---
title: "Deploy a Function"
method: POST
path: "/v1/functions/deployments"
tags: ["Functions"]
---

# Deploy a Function

`POST /v1/functions/deployments`

## Request

- Base URL: `https://api.dexto.ai`
- URL: `https://api.dexto.ai/v1/functions/deployments`
- Auth: HTTP bearer

Deploy a Function package, the deploy-request.json `pnpm run pack` writes, into the Cloud project, and make it production unless promote is false. A Function whose package sets dextoApiKey gets its own Dexto key, acting as the project, when your key or token holds every permission it gets. Needs functions:write. The body is at most 40 MiB; a larger one gets 413, and an invalid package gets 400 naming every problem.

## Query parameters

- `access` 'private' | 'public': Who can reach it: private by default; public only for intentional internet access.
- `promote` 'true' | 'false': false leaves the deployment to promote later.
- `provider` 'aws-lambda' | 'cloudflare-workers' | 'local': Where it should run. Omit to use host policy; an unavailable choice is refused.

## Request body

- object
  - `dexto` object
    - `apiKeyScopes` string[], required
  - `dextoApiKey` true: Give the Function its own DEXTO_API_KEY, which acts as its Cloud project with the permissions a project's deployed code needs.
  - `environment` object, required
    - `secrets` object[], required
      - `description` string, required
      - `name` string, required
      - `required` boolean, required
    - `variables` object[], required
      - `name` string, required
      - `value` string, required
  - `healthcheck` object
    - `expectedStatus` integer, required
    - `path` string, required
  - `kind` 'http-api' | 'mcp-server'
  - `modules` object[], required
    - `contentBase64` string, required
    - `mediaType` 'application/javascript+module'
    - `path` string, required
  - `publication` object, nullable, required
    - `interfaces` string[], required
    - `operations` string[], required
  - `routes` object[], required
    - `access` 'public', required
    - `pathPrefix` string, required
  - `runtime` object, required
    - `entrypoint` string, required
    - `target` 'dexto-fetch-v1', required
  - `schemaVersion` 1, required
  - `slug` string, required
  - `title` string, required

## Response `201`

Created.

- object
  - `access` 'private' | 'public', required: Who can reach it: private by default; public only for intentional internet access.
  - `deployment` object, required
    - `id` string, uuid, required
    - `preview_url` string, uri, required: This deployment's own URL.
    - `status` 'failed' | 'pending' | 'ready' | 'retired' | 'retiring', required
  - `dexto` object, nullable, required: Its own DEXTO_API_KEY, when its package sets dextoApiKey (or, in an older package, declares Dexto API scopes), with the scopes it gets. It is bound only when the caller's key or token holds every one; otherwise configured is false.
    - `configured` boolean, required
    - `scopes` string[], required
  - `function` object, required
    - `id` string, uuid, required
    - `slug` string, required
    - `title` string, required
  - `interfaces` object, required
    - `mcp` string, uri, nullable, required: Its MCP endpoint, when it publishes MCP.
    - `openapi` string, uri, nullable, required: Its OpenAPI document, when it publishes OpenAPI.
  - `mcp_connection` object, nullable, required: The person's remote MCP connection its MCP interface was registered as, for a person's OAuth token; null for a key, which registers none.
    - `id` string, required
    - `status` string, required
  - `object` 'function.deploy', required
  - `operations` string[], required
  - `promoted` boolean, required
  - `provider` 'aws-lambda' | 'cloudflare-workers' | 'local', required
  - `secrets` object[], required: The secrets it declares and whether each is set.
    - `configured` boolean, required
    - `description` string, required
    - `name` string, required
    - `required` boolean, required
  - `url` string, uri, nullable, required: Where it is reached once promoted.

## Other responses

- `400`: Invalid JSON or request fields.
- `401`: Missing or invalid API key.
- `402`: The account has insufficient credits.
- `403`: The account cannot perform this operation.
- `404`: The requested resource was not found.
- `409`: The request conflicts with existing resource state.
- `429`: The account exceeded this operation's request rate.
- `500`: Unexpected Dexto failure.
- `502`: The upstream model provider failed.
- `503`: A required Dexto service is temporarily unavailable.

---

[API](https://skmtc.dev/dexto/apis/dexto-api.md) - [All operations](https://skmtc.dev/dexto/apis/dexto-api/llms.txt) - [OpenAPI document](https://skmtc.dev/dexto/apis/dexto-api/revisions/47eb880cffa5?raw)
