> ## 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.

# Update API Proxy from URL

> Updates an existing API proxy by re-parsing an OpenAPI (Swagger), WSDL specification from a URL, or updates a reverse proxy. The API proxy can be automatically deployed to specified environments after update.

## Endpoint

```
PUT /apiops/projects/{projectName}/apiProxies/url/
```

## Authentication

Requires a Personal API Access Token.

### Header

```
Authorization: Bearer YOUR_TOKEN
```

## Request

### Headers

| Header        | Value            | Required |
| ------------- | ---------------- | -------- |
| Authorization | Bearer {token}   | Yes      |
| Content-Type  | application/json | Yes      |

### Path Parameters

| Parameter   | Type   | Required | Description  |
| ----------- | ------ | -------- | ------------ |
| projectName | string | Yes      | Project name |

### Request Body

#### Full JSON Body Example - Update OpenAPI

```json theme={null}
{
  "apiProxyName": "petstore-api",
  "apiProxyDescription": "Updated Petstore API Proxy",
  "apiProxyCreationType": "OPEN_API",
  "specUrl": "https://petstore.swagger.io/v2/swagger.json",
  "clientRoute": {
    "relativePathList": ["/api/v1"],
    "virtualHostList": ["api.example.com"]
  },
  "routingInfo": {
    "routingAddressList": [
      {
        "address": "https://backend.example.com",
        "weight": 100,
        "healthCheckEnabled": true
      }
    ],
    "routingEnabled": true,
    "mirrorEnabled": false
  },
  "deploy": false,
  "deployTargetEnvironmentNameList": ["production"],
  "reParse": true,
  "soapToRest": false,
  "enableWSA": false,
  "enableWSRM": false,
  "backendApiVersion": "v2",
  "maintenanceModeSetting": {
    "enabled": false,
    "httpStatusCode": 503,
    "contentType": "application/json",
    "message": "Service is under maintenance"
  },
  "specAuthorizationValueList": [
    {
      "headerName": "Authorization",
      "headerValue": "Bearer token123"
    }
  ]
}
```

#### Full JSON Body Example - Update WSDL

```json theme={null}
{
  "apiProxyName": "soap-service",
  "apiProxyDescription": "Updated SOAP Service",
  "apiProxyCreationType": "WSDL",
  "specUrl": "https://example.com/service.wsdl",
  "clientRoute": {
    "relativePathList": ["/soap"],
    "virtualHostList": ["soap.example.com"]
  },
  "routingInfo": {
    "routingAddressList": [
      {
        "address": "https://backend.example.com/soap",
        "weight": 100,
        "healthCheckEnabled": true
      }
    ],
    "routingEnabled": true,
    "mirrorEnabled": false
  },
  "deploy": false,
  "deployTargetEnvironmentNameList": ["production"],
  "reParse": true,
  "soapToRest": false,
  "enableWSA": true,
  "enableWSRM": false,
  "backendApiVersion": null,
  "maintenanceModeSetting": {
    "enabled": false,
    "httpStatusCode": 503,
    "contentType": "text/xml",
    "message": "Service is under maintenance"
  },
  "specAuthorizationValueList": []
}
```

#### Full JSON Body Example - Update Reverse Proxy

```json theme={null}
{
  "apiProxyName": "reverse-proxy",
  "apiProxyDescription": "Updated Reverse Proxy",
  "apiProxyCreationType": "REVERSE_PROXY",
  "specUrl": null,
  "clientRoute": {
    "relativePathList": ["/reverse"],
    "virtualHostList": ["reverse.example.com"]
  },
  "routingInfo": {
    "routingAddressList": [
      {
        "address": "https://backend.example.com",
        "weight": 100,
        "healthCheckEnabled": true
      }
    ],
    "routingEnabled": true,
    "mirrorEnabled": false
  },
  "deploy": false,
  "deployTargetEnvironmentNameList": ["production"],
  "reParse": true,
  "soapToRest": false,
  "enableWSA": false,
  "enableWSRM": false,
  "backendApiVersion": null,
  "maintenanceModeSetting": {
    "enabled": false,
    "httpStatusCode": 503,
    "contentType": "application/json",
    "message": "Service is under maintenance"
  },
  "specAuthorizationValueList": []
}
```

#### Request Body Fields

| Field                           | Type    | Required | Default | Description                                                                                                                         |
| ------------------------------- | ------- | -------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| apiProxyName                    | string  | Yes      | -       | API Proxy name (must exist for update)                                                                                              |
| apiProxyDescription             | string  | No       | -       | API Proxy description (if empty, keeps existing description)                                                                        |
| apiProxyCreationType            | string  | Yes      | -       | API creation type. Must match existing API Proxy type. See [EnumApiProxySpecType](#enumapiproxyspectype-apiproxycreationtype)       |
| specUrl                         | string  | Yes\*    | -       | Specification URL (required if not reverse proxy)                                                                                   |
| clientRoute                     | object  | Yes      | -       | Client route configuration. See [ClientRoute](#clientroute-clientroute)                                                             |
| routingInfo                     | object  | No       | -       | Routing configuration. See [RoutingInfo](#routinginfo-routinginfo)                                                                  |
| deploy                          | boolean | No       | false   | Whether to deploy after update                                                                                                      |
| deployTargetEnvironmentNameList | array   | No       | \[]     | List of environment names to deploy to                                                                                              |
| reParse                         | boolean | No       | true    | Whether to reparse API proxy (should be true for update)                                                                            |
| soapToRest                      | boolean | No       | false   | Enable SOAP to REST transformation (cannot be changed if not set initially)                                                         |
| enableWSA                       | boolean | No       | false   | Enable WS-Addressing (SOAP only)                                                                                                    |
| enableWSRM                      | boolean | No       | false   | Enable WS-ReliableMessaging (SOAP only)                                                                                             |
| backendApiVersion               | string  | No       | -       | Backend API version                                                                                                                 |
| maintenanceModeSetting          | object  | No       | -       | Maintenance mode settings. See [MaintenanceModeSetting](#maintenancemodesetting-maintenancemodesetting)                             |
| specAuthorizationValueList      | array   | No       | \[]     | Authorization headers for accessing spec URL. See [SpecAuthorizationValue](#specauthorizationvalue-specauthorizationvaluelist-item) |

### EnumApiProxySpecType (apiProxyCreationType)

* `OPEN_API` - OpenAPI 3.0 specification
* `SWAGGER` - Swagger 2.0 specification
* `WSDL` - WSDL specification (SOAP)
* `REVERSE_PROXY` - Reverse proxy (no specification)

### ClientRoute (clientRoute)

| Field            | Type  | Required | Description                                                           |
| ---------------- | ----- | -------- | --------------------------------------------------------------------- |
| relativePathList | array | Yes      | List of relative paths (at least one required, first cannot be empty) |
| virtualHostList  | array | No       | List of virtual hosts                                                 |

### RoutingInfo (routingInfo)

| Field              | Type    | Required | Description                                                                                         |
| ------------------ | ------- | -------- | --------------------------------------------------------------------------------------------------- |
| routingAddressList | array   | No       | List of routing addresses. See [RoutingAddress](#routingaddress-routinginforoutingaddresslist-item) |
| routingEnabled     | boolean | No       | Whether routing is enabled                                                                          |
| mirrorEnabled      | boolean | No       | Whether mirroring is enabled                                                                        |

### RoutingAddress (routingInfo.routingAddressList item)

| Field              | Type    | Required | Description                         |
| ------------------ | ------- | -------- | ----------------------------------- |
| address            | string  | Yes      | Backend server address              |
| weight             | integer | No       | Routing weight (for load balancing) |
| healthCheckEnabled | boolean | No       | Enable health check                 |

### MaintenanceModeSetting (maintenanceModeSetting)

| Field          | Type    | Required | Description                               |
| -------------- | ------- | -------- | ----------------------------------------- |
| enabled        | boolean | No       | Whether maintenance mode is enabled       |
| httpStatusCode | integer | No       | HTTP status code for maintenance response |
| contentType    | string  | No       | Content type for maintenance response     |
| message        | string  | No       | Maintenance message                       |

### SpecAuthorizationValue (specAuthorizationValueList item)

| Field       | Type   | Required | Description                            |
| ----------- | ------ | -------- | -------------------------------------- |
| headerName  | string | Yes      | Header name (e.g., "Authorization")    |
| headerValue | string | Yes      | Header value (e.g., "Bearer token123") |

### Notes

* `apiProxyName` must exist (API Proxy will be updated, not created).
* `apiProxyCreationType` must match the existing API Proxy type (cannot change type).
* `specUrl` is required unless `apiProxyCreationType` is `REVERSE_PROXY`.
* `clientRoute.relativePathList` must contain at least one path, and the first path cannot be empty.
* `reParse: true` is recommended for updates to reparse the specification.
* `soapToRest` cannot be enabled if the API Proxy was not created with this option initially.
* If `apiProxyDescription` is empty, the existing description is preserved.
* `routingInfo` is optional; if not provided, existing routing settings are preserved.

## Response

### Success Response (200 OK)

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

## cURL Example

```bash theme={null}
curl -X PUT \
  "https://demo.apinizer.com/apiops/projects/MyProject/apiProxies/url/" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "apiProxyName": "petstore-api",
    "apiProxyDescription": "Updated Petstore API Proxy",
    "apiProxyCreationType": "OPEN_API",
    "specUrl": "https://petstore.swagger.io/v2/swagger.json",
    "clientRoute": {
      "relativePathList": ["/api/v1"]
    },
    "reParse": true,
    "deploy": false
  }'
```

## Notes and Warnings

* **Update vs Create**:
  * This endpoint updates an existing API Proxy (identified by `apiProxyName`)
  * If API Proxy does not exist, it will be created
  * Use this endpoint to reparse and update API Proxy from specification URL
* **Type Restrictions**:
  * `apiProxyCreationType` must match the existing API Proxy type
  * Cannot change from SOAP to REST or vice versa
  * Cannot enable `soapToRest` if not enabled initially
* **Reparsing**:
  * `reParse: true` re-parses the specification and updates endpoints
  * Existing endpoints may be modified or removed if specification changes
  * Policies and settings are preserved during reparse
* **Client Route**:
  * `clientRoute.relativePathList` must contain at least one path
  * First path in the list cannot be empty
  * Virtual hosts are optional
* **Routing**:
  * `routingInfo` is optional
  * If not provided, existing routing settings are preserved
  * Can update routing addresses, weights, and health checks
* **Deployment**:
  * Set `deploy: true` to automatically deploy after update
  * Specify `deployTargetEnvironmentNameList` for target environments
  * Requires `API_MANAGEMENT` + `DEPLOY_UNDEPLOY` permission if deploying

## Permissions

User must have **`API_MANAGEMENT` + `MANAGE`** permission in the project. For deployment operations (when `deploy: true` is set), user must also have **`API_MANAGEMENT` + `DEPLOY_UNDEPLOY`** permission.

* **Specification Authorization**:
  * Use `specAuthorizationValueList` if specification URL requires authentication
  * Common: Authorization header with Bearer token
  * Headers are sent when fetching specification

## Related Documentation

* [Create API Proxy from URL](/api-reference/api-proxies/crud/create-api-proxy-from-url) - Create new API Proxy from URL
* [Update API Proxy](/api-reference/api-proxies/crud/update-api-proxy) - Update API Proxy metadata
* [Deploy API Proxy](/api-reference/api-proxies/deployment/deploy-api-proxy) - Deploy API Proxy to environments
