---
title: "Add Application"
method: POST
path: "/apps"
tags: ["Applications"]
---

# Add Application

`POST /apps`

Creates a new application with the specified configuration including containers, volumes, region settings, and autoscaling.

## Request body

- AddApplicationRequest
  - `name` string, required
  - `runtimeType` 'shared' | 'reserved', required
  - `terminationGracePeriodSeconds` integer
  - `repositorySettings` RepositorySettings
    - `templateRepository` string, nullable
    - `repositoryName` string, nullable
    - `owner` string, nullable
  - `autoScaling` AutoscalingSettings, required
    - `min` integer, required
    - `max` integer, required
  - `regionSettings` UpdateRegionSettingsRequest, required
    - `allowedRegionIds` string[], nullable
    - `requiredRegionIds` string[], nullable
    - `maxAllowedRegions` integer, nullable
    - `nodeSelectors` object, nullable
  - `containerTemplates` ContainerRequest[]
    - `id` string, nullable — Absence of the id means it is a new container. Presence of the id means it is an update of the existing.
    - `name` string, required
    - `image` string, nullable
    - `imageName` string, required
    - `imageNamespace` string, required
    - `imageTag` string, required
    - `imageDigest` string, nullable
    - `imageRegistryId` string, required
    - `imagePullPolicy` 'always' | 'ifNotPresent'
    - `entryPoint` ContainerEntryPoint
      - `command` string, nullable
      - `commandArray` string[], nullable
      - `arguments` string, nullable
      - `argumentsArray` string[], nullable
      - `workingDirectory` string, nullable
    - `probes` ContainerProbes
      - `startup` ContainerProbe
        - `initialDelaySeconds` integer, nullable
        - `periodSeconds` integer, nullable
        - `timeoutSeconds` integer, nullable
        - `failureThreshold` integer, nullable
        - `successThreshold` integer, nullable
        - `httpGet` HttpGetProbe
          - `request` HttpGetProbeRequestDetails
            - `path` string
            - `portNumber` integer
          - `response` HttpGetProbeResponseDetails
            - `expectedStatusCode` 100 | 101 | 102 | 103 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 421 | 422 | 423 | 424 | 426 | 428 | 429 | 431 | 451 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511 — 100 = Continue 101 = SwitchingProtocols 102 = Processing 103 = EarlyHints 200 = OK 201 = Created 202 = Accepted 203 = NonAuthoritativeInformation 204 = NoContent 205 = ResetContent 206 = PartialContent 207 = MultiStatus 208 = AlreadyReported 226 = IMUsed 300 = MultipleChoices 300 = Ambiguous 301 = MovedPermanently 301 = Moved 302 = Found 302 = Redirect 303 = SeeOther 303 = RedirectMethod 304 = NotModified 305 = UseProxy 306 = Unused 307 = TemporaryRedirect 307 = RedirectKeepVerb 308 = PermanentRedirect 400 = BadRequest 401 = Unauthorized 402 = PaymentRequired 403 = Forbidden 404 = NotFound 405 = MethodNotAllowed 406 = NotAcceptable 407 = ProxyAuthenticationRequired 408 = RequestTimeout 409 = Conflict 410 = Gone 411 = LengthRequired 412 = PreconditionFailed 413 = RequestEntityTooLarge 414 = RequestUriTooLong 415 = UnsupportedMediaType 416 = RequestedRangeNotSatisfiable 417 = ExpectationFailed 421 = MisdirectedRequest 422 = UnprocessableEntity 422 = UnprocessableContent 423 = Locked 424 = FailedDependency 426 = UpgradeRequired 428 = PreconditionRequired 429 = TooManyRequests 431 = RequestHeaderFieldsTooLarge 451 = UnavailableForLegalReasons 500 = InternalServerError 501 = NotImplemented 502 = BadGateway 503 = ServiceUnavailable 504 = GatewayTimeout 505 = HttpVersionNotSupported 506 = VariantAlsoNegotiates 507 = InsufficientStorage 508 = LoopDetected 510 = NotExtended 511 = NetworkAuthenticationRequired
        - `tcpSocket` TcpSocketProbe
          - `request` TcpSocketProbeRequestDetails
            - `portNumber` integer
        - `grpc` GrpcProbe
          - `request` GrpcProbeRequestDetails
            - `portNumber` integer
            - `serviceName` string, nullable — If this is not specified, the default behavior is to probe the server's overall health status.
      - `readiness` ContainerProbe
        - `initialDelaySeconds` integer, nullable
        - `periodSeconds` integer, nullable
        - `timeoutSeconds` integer, nullable
        - `failureThreshold` integer, nullable
        - `successThreshold` integer, nullable
        - `httpGet` HttpGetProbe
          - `request` HttpGetProbeRequestDetails
            - `path` string
            - `portNumber` integer
          - `response` HttpGetProbeResponseDetails
            - `expectedStatusCode` 100 | 101 | 102 | 103 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 421 | 422 | 423 | 424 | 426 | 428 | 429 | 431 | 451 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511 — 100 = Continue 101 = SwitchingProtocols 102 = Processing 103 = EarlyHints 200 = OK 201 = Created 202 = Accepted 203 = NonAuthoritativeInformation 204 = NoContent 205 = ResetContent 206 = PartialContent 207 = MultiStatus 208 = AlreadyReported 226 = IMUsed 300 = MultipleChoices 300 = Ambiguous 301 = MovedPermanently 301 = Moved 302 = Found 302 = Redirect 303 = SeeOther 303 = RedirectMethod 304 = NotModified 305 = UseProxy 306 = Unused 307 = TemporaryRedirect 307 = RedirectKeepVerb 308 = PermanentRedirect 400 = BadRequest 401 = Unauthorized 402 = PaymentRequired 403 = Forbidden 404 = NotFound 405 = MethodNotAllowed 406 = NotAcceptable 407 = ProxyAuthenticationRequired 408 = RequestTimeout 409 = Conflict 410 = Gone 411 = LengthRequired 412 = PreconditionFailed 413 = RequestEntityTooLarge 414 = RequestUriTooLong 415 = UnsupportedMediaType 416 = RequestedRangeNotSatisfiable 417 = ExpectationFailed 421 = MisdirectedRequest 422 = UnprocessableEntity 422 = UnprocessableContent 423 = Locked 424 = FailedDependency 426 = UpgradeRequired 428 = PreconditionRequired 429 = TooManyRequests 431 = RequestHeaderFieldsTooLarge 451 = UnavailableForLegalReasons 500 = InternalServerError 501 = NotImplemented 502 = BadGateway 503 = ServiceUnavailable 504 = GatewayTimeout 505 = HttpVersionNotSupported 506 = VariantAlsoNegotiates 507 = InsufficientStorage 508 = LoopDetected 510 = NotExtended 511 = NetworkAuthenticationRequired
        - `tcpSocket` TcpSocketProbe
          - `request` TcpSocketProbeRequestDetails
            - `portNumber` integer
        - `grpc` GrpcProbe
          - `request` GrpcProbeRequestDetails
            - `portNumber` integer
            - `serviceName` string, nullable — If this is not specified, the default behavior is to probe the server's overall health status.
      - `liveness` ContainerProbe
        - `initialDelaySeconds` integer, nullable
        - `periodSeconds` integer, nullable
        - `timeoutSeconds` integer, nullable
        - `failureThreshold` integer, nullable
        - `successThreshold` integer, nullable
        - `httpGet` HttpGetProbe
          - `request` HttpGetProbeRequestDetails
            - `path` string
            - `portNumber` integer
          - `response` HttpGetProbeResponseDetails
            - `expectedStatusCode` 100 | 101 | 102 | 103 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 226 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 421 | 422 | 423 | 424 | 426 | 428 | 429 | 431 | 451 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 510 | 511 — 100 = Continue 101 = SwitchingProtocols 102 = Processing 103 = EarlyHints 200 = OK 201 = Created 202 = Accepted 203 = NonAuthoritativeInformation 204 = NoContent 205 = ResetContent 206 = PartialContent 207 = MultiStatus 208 = AlreadyReported 226 = IMUsed 300 = MultipleChoices 300 = Ambiguous 301 = MovedPermanently 301 = Moved 302 = Found 302 = Redirect 303 = SeeOther 303 = RedirectMethod 304 = NotModified 305 = UseProxy 306 = Unused 307 = TemporaryRedirect 307 = RedirectKeepVerb 308 = PermanentRedirect 400 = BadRequest 401 = Unauthorized 402 = PaymentRequired 403 = Forbidden 404 = NotFound 405 = MethodNotAllowed 406 = NotAcceptable 407 = ProxyAuthenticationRequired 408 = RequestTimeout 409 = Conflict 410 = Gone 411 = LengthRequired 412 = PreconditionFailed 413 = RequestEntityTooLarge 414 = RequestUriTooLong 415 = UnsupportedMediaType 416 = RequestedRangeNotSatisfiable 417 = ExpectationFailed 421 = MisdirectedRequest 422 = UnprocessableEntity 422 = UnprocessableContent 423 = Locked 424 = FailedDependency 426 = UpgradeRequired 428 = PreconditionRequired 429 = TooManyRequests 431 = RequestHeaderFieldsTooLarge 451 = UnavailableForLegalReasons 500 = InternalServerError 501 = NotImplemented 502 = BadGateway 503 = ServiceUnavailable 504 = GatewayTimeout 505 = HttpVersionNotSupported 506 = VariantAlsoNegotiates 507 = InsufficientStorage 508 = LoopDetected 510 = NotExtended 511 = NetworkAuthenticationRequired
        - `tcpSocket` TcpSocketProbe
          - `request` TcpSocketProbeRequestDetails
            - `portNumber` integer
        - `grpc` GrpcProbe
          - `request` GrpcProbeRequestDetails
            - `portNumber` integer
            - `serviceName` string, nullable — If this is not specified, the default behavior is to probe the server's overall health status.
    - `environmentVariables` EnvironmentVariable[]
      - `name` string, required
      - `value` string
    - `endpoints` EndpointRequest[]
      - `displayName` string, required
      - `cdn` CdnEndpointRequest
        - `isSslEnabled` boolean
        - `stickySessions` StickySessionSettings
          - `enabled` boolean
          - `sessionHeaders` string[], required
          - `cookieName` string
        - `pullZoneId` integer, nullable
        - `portMappings` ContainerPortMappingRequest[]
          - `containerPort` integer, required
          - `exposedPort` integer, nullable
          - `protocols` Protocol[]
      - `anycast` AnycastEndpointRequest
        - `type` 'iPv4', required
        - `portMappings` ContainerPortMappingRequest[], required
          - `containerPort` integer, required
          - `exposedPort` integer, nullable
          - `protocols` Protocol[]
    - `volumeMounts` VolumeMountRequest[]
      - `name` string, required
      - `mountPath` string, required
  - `volumes` VolumeRequest[]
    - `name` string, required
    - `size` integer, required

## Response `201`

Application was successfully created.

- AddApplicationResponse
  - `id` string

## Other responses

- `400` — Invalid input.
- `401` — User is unauthorized.
- `403` — User has invalid card or suspended.
- `409` — Application count limit is reached.
- `422` — Unprocessable entity.
- `500` — Unexpected server error.

---

[API](https://skmtc.net/bunny/apis/bunny-net-cdn-logging.md) · [All operations](https://skmtc.net/bunny/apis/bunny-net-cdn-logging/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/bunny/bunny-net-cdn-logging/versions/9e622620664b/schema)
