> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploy API Proxy

> Deploys an API proxy to a specific environment. The API proxy becomes available in the target environment after successful deployment.

## Endpoint

```
POST /apiops/projects/{projectName}/apiProxies/{apiProxyName}/environments/{environmentName}/
```

## Authentication

Requires a Personal API Access Token.

### Header

```
Authorization: Bearer YOUR_TOKEN
```

## Request

### Headers

| Header        | Value          | Required |
| ------------- | -------------- | -------- |
| Authorization | Bearer {token} | Yes      |

### Path Parameters

| Parameter       | Type   | Required | Description                   |
| --------------- | ------ | -------- | ----------------------------- |
| projectName     | string | Yes      | Project name                  |
| apiProxyName    | string | Yes      | API Proxy name (must exist)   |
| environmentName | string | Yes      | Environment name (must exist) |

### Query Parameters

None.

### Request Body

Optional JSON body. When omitted, defaults are applied.

| Field       | Type    | Required | Description                                                                                                              |
| ----------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------ |
| description | string  | No       | Description/notes for the deploy history record. Defaults to "Deployed by APIOPS Api" if not provided.                   |
| persistent  | boolean | No       | If `true`, this deploy history record will not be auto-deleted when the retention limit is reached. Defaults to `false`. |

#### Example

```json theme={null}
{
  "description": "v2.1 release",
  "persistent": true
}
```

## Response

### Success Response (200 OK)

```json theme={null}
{
  "success": true,
  "deploymentResult": {
    "success": true,
    "deploymentResults": [
      {
        "environmentName": "production",
        "success": true,
        "message": "Deployment successful"
      }
    ]
  }
}
```

#### Response Fields

| Field                                                 | Type    | Description                               |
| ----------------------------------------------------- | ------- | ----------------------------------------- |
| success                                               | boolean | Indicates if the request was successful   |
| deploymentResult                                      | object  | Deployment result                         |
| deploymentResult.success                              | boolean | Overall deployment success                |
| deploymentResult.deploymentResults                    | array   | Individual environment deployment results |
| deploymentResult.deploymentResults\[].environmentName | string  | Environment name                          |
| deploymentResult.deploymentResults\[].success         | boolean | Deployment success for this environment   |
| deploymentResult.deploymentResults\[].message         | string  | Deployment message                        |

### Error Response (400 Bad Request)

```json theme={null}
{
  "error": "bad_request",
  "error_description": "ApiProxy with name (petstore-api) can not be deployed to Environment(production) because it is not exist!"
}
```

#### Common Causes

* API Proxy name does not exist
* Environment name does not exist
* User does not have access to the environment
* Deployment failed (check deploymentResult for details)

### Error Response (401 Unauthorized)

```json theme={null}
{
  "error": "unauthorized_client",
  "error_description": "Invalid token"
}
```

### Error Response (404 Not Found)

```json theme={null}
{
  "error": "not_found",
  "error_description": "Project (MyProject) is not found or user does not have privilege to access it!"
}
```

## cURL Example

```bash theme={null}
curl -X POST \
  "https://demo.apinizer.com/apiops/projects/MyProject/apiProxies/petstore-api/environments/production/" \
  -H "Authorization: Bearer YOUR_TOKEN"
```

### With Description and Persistent Flag

```bash theme={null}
curl -X POST \
  "https://demo.apinizer.com/apiops/projects/MyProject/apiProxies/petstore-api/environments/production/" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"description": "v2.1 release", "persistent": true}'
```

## Notes and Warnings

* **API Proxy Must Exist**: The API proxy must exist before deployment
* **Environment Access**: User must have access to the target environment

## Permissions

User must have **`API_MANAGEMENT` + `DEPLOY_UNDEPLOY`** permission in the project.

* **Deployment Status**: Check the `deploymentResult` in the response to verify deployment success
* **Redeployment**: If the API proxy is already deployed, this operation redeploys it
* **Deployment History**: Deployment history is automatically recorded

## Related Documentation

* [Undeploy API Proxy](/api-reference/api-proxies/deployment/undeploy-api-proxy) - Undeploy API proxy from environment
* [List API Proxies](/api-reference/api-proxies/crud/list-api-proxies) - List all API proxies
