# PUT /multiplans/{{id}} — Update Multiplan

> Product: **Pabbly Subscription Billing** (v1)
> Base URL: `https://payments.pabbly.com/api/v1`
> Auth: Basic via `Authorization` header
> Canonical: `/subscription-billing/multiplan/update-multiplan`

Put request API to update an existing multiplan checkout page. You can add the multiplan Id in request URL. In response the multiplan details will be updated for the fields provided. Only the fields included in the request body are modified — this is a partial update, you do not need to send every field. Note: product_id is immutable and cannot be modified after a multiplan is created. Sending a different product_id value will return an error.

**Path parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| id | string | Yes |  |

**Body parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| page_title | string | No | New display name for the checkout page. Must be unique within the same product |
| preferred_plan_id | string | No | Pre-selected plan Id shown on the checkout page. Must be one of the plan Ids in the plans array. Send null to clear |
| plans | string | No | Array of plan Ids, e.g. ["5e5e2c...", "5e5e2d..."]. All plans must belong to the same product and user |
| multiplan_list | string | No | Layout style for the checkout page. Allowed values: radio, select |

**Example request body:**

```json
{
    "page_title": "Updated API Test Multiplan",
    "preferred_plan_id": "69ca13434339a54d2b664343"
}
```

**Response (200)** — Update Multiplan:

```json
{
    "status": "success",
    "message": "Multiplan updated",
    "data": {
        "product_id": "69b2aa3b2cbef17b2d0e783f",
        "page_title": "Updated API Test Multiplan",
        "multiplan_list": "radio",
        "preferred_plan_id": "69ca13434339a54d2b664343",
        "createdAt": "2026-05-14T05:56:40.182Z",
        "updatedAt": "2026-05-14T05:56:40.182Z",
        "id": "6a056418c3144e06f775874b",
        "plans": [
            {
                "plan_type": "per_unit",
                "plan_active": "true",
                "currency_code": "USD",
                "currency_symbol": "$",
                "custom_payment_term": 0,
                "failed_payment_gateway": "",
                "failed_payment_gateway_array": [],
                "funnel": [],
                "is_metered": false,
                "setup_fee_type": "",
                "trial_type": "day",
                "createdAt": "2026-03-12T12:00:34.668Z",
                "updatedAt": "2026-03-13T05:48:14.338Z",
                "id": "69b2aae22cbef17b2d0e78d7",
                "product_id": "69b2aa3b2cbef17b2d0e783f",
                "plan_name": "Plan A",
                "plan_code": "plan-a",
                "price": 1289,
                "billing_period": "m",
                "billing_period_num": "1",
                "billing_cycle": "lifetime",
                "billing_cycle_num": "",
                "trial_period": 0,
                "setup_fee": 0,
                "plan_description": "<p>This is the test plan description.</p><p><br></p><p><img src=\"https://s3psb.pabbly.com/product/images/2022/2/Y9fZRFgdHKIR-1643959680-PlandescriptionImage.png\" style=\"max-width: 100%; height: auto;\"></p><p><br></p><p>From the checkout customizer,</p><p><br></p><ul><li>You can change the bullet type.</li><li>You can change list style.</li><li>You can change text size</li><li>You can change the bullet color.</li><li>Image size should be 400W x 250H, Max Size - 100kb.</li></ul>"
            },
            {
                "plan_type": "flat_fee",
                "plan_active": "true",
                "currency_code": "USD",
                "currency_symbol": "$",
                "custom_payment_term": 0,
                "failed_payment_gateway": "",
                "failed_payment_gateway_array": [],
                "funnel": [],
                "is_metered": false,
                "setup_fee_type": "",
                "trial_type": "day",
                "createdAt": "2026-03-30T06:08:03.979Z",
                "updatedAt": "2026-03-30T06:50:52.358Z",
                "id": "69ca13434339a54d2b664343",
                "product_id": "69b2aa3b2cbef17b2d0e783f",
                "plan_name": "Free Plan",
                "plan_code": "free-plan",
                "price": 0,
                "billing_period": "m",
                "billing_period_num": "1",
                "billing_cycle": "lifetime",
                "billing_cycle_num": "",
                "trial_period": 0,
                "setup_fee": 0,
                "plan_description": "<p>This is the test plan description.</p><p><br></p><p><img src=\"https://s3psb.pabbly.com/product/images/2022/2/Y9fZRFgdHKIR-1643959680-PlandescriptionImage.png\" style=\"max-width: 100%; height: auto;\"></p><p><br></p><p>From the checkout customizer,</p><p><br></p><ul><li>You can change the bullet type.</li><li>You can change list style.</li><li>You can change text size</li><li>You can change the bullet color.</li><li>Image size should be 400W x 250H, Max Size - 100kb.</li></ul>"
            }
        ],
        "checkout_page": "https://payments.pabbly.com/checkout/6a056418c3144e06f775874b"
    }
}
```

**Code examples:**

_cURL_

```curl
curl -X PUT https://payments.pabbly.com/api/v1/multiplans/{{id}} \
  -u {{YOUR_API_KEY}}:{{YOUR_SECRET_KEY}} \
  -H "Content-Type: application/json" \
  -d '{
    "page_title": "Updated API Test Multiplan",
    "preferred_plan_id": "69ca13434339a54d2b664343"
  }'
```

_Ruby_

```ruby
require 'net/http'
require 'json'

uri = URI('https://payments.pabbly.com/api/v1/multiplans/{{id}}')
request = Net::HTTP::Put.new(uri)
request.basic_auth '{{YOUR_API_KEY}}', '{{YOUR_SECRET_KEY}}'
request['Content-Type'] = 'application/json'
request.body = "{\"page_title\":\"Updated API Test Multiplan\",\"preferred_plan_id\":\"69ca13434339a54d2b664343\"}"

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') do |http|
  http.request(request)
end

data = JSON.parse(response.body)
```

_Python_

```python
import requests
from requests.auth import HTTPBasicAuth

response = requests.put(
    'https://payments.pabbly.com/api/v1/multiplans/{{id}}',
    auth=HTTPBasicAuth('{{YOUR_API_KEY}}', '{{YOUR_SECRET_KEY}}'),
    json={
    'page_title': 'Updated API Test Multiplan',
    'preferred_plan_id': '69ca13434339a54d2b664343'
},
)

data = response.json()
```

_PHP_

```php
<?php
$ch = curl_init('https://payments.pabbly.com/api/v1/multiplans/{{id}}');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_USERPWD, '{{YOUR_API_KEY}}:{{YOUR_SECRET_KEY}}');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"page_title":"Updated API Test Multiplan","preferred_plan_id":"69ca13434339a54d2b664343"}');

$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
```

_Java_

```java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Base64;

String credentials = Base64.getEncoder().encodeToString("{{YOUR_API_KEY}}:{{YOUR_SECRET_KEY}}".getBytes());

HttpClient client = HttpClient.newHttpClient();
HttpRequest.Builder builder = HttpRequest.newBuilder()
    .uri(URI.create("https://payments.pabbly.com/api/v1/multiplans/{{id}}"))
    .header("Authorization", "Basic " + credentials)
    .header("Content-Type", "application/json")
    .PUT(HttpRequest.BodyPublishers.ofString("{\"page_title\":\"Updated API Test Multiplan\",\"preferred_plan_id\":\"69ca13434339a54d2b664343\"}"));

HttpRequest request = builder.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
```

_Node.js_

```node
const credentials = Buffer.from('{{YOUR_API_KEY}}:{{YOUR_SECRET_KEY}}').toString('base64');

const response = await fetch('https://payments.pabbly.com/api/v1/multiplans/{{id}}', {
  method: 'PUT',
  headers: {
    'Authorization': `Basic ${credentials}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "page_title": "Updated API Test Multiplan",
    "preferred_plan_id": "69ca13434339a54d2b664343"
  }),
});

const data = await response.json();
```

_Go_

```go
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"page_title\":\"Updated API Test Multiplan\",\"preferred_plan_id\":\"69ca13434339a54d2b664343\"}")
    req, _ := http.NewRequest("PUT", "https://payments.pabbly.com/api/v1/multiplans/{{id}}", payload)
    req.Header.Set("Content-Type", "application/json")
    req.SetBasicAuth("{{YOUR_API_KEY}}", "{{YOUR_SECRET_KEY}}")

    res, _ := http.DefaultClient.Do(req)
    defer res.Body.Close()
    body, _ := io.ReadAll(res.Body)
    fmt.Println(string(body))
}
```

_.NET_

```dotnet
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes("{{YOUR_API_KEY}}:{{YOUR_SECRET_KEY}}"));

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Put, "https://payments.pabbly.com/api/v1/multiplans/{{id}}");
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {credentials}");
request.Content = new StringContent("{\"page_title\":\"Updated API Test Multiplan\",\"preferred_plan_id\":\"69ca13434339a54d2b664343\"}");
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

var response = await client.SendAsync(request);
var data = await response.Content.ReadAsStringAsync();
Console.WriteLine(data);
```

---

**Other endpoints in Multiplan:**

- [GET /multiplans/{{multiplan_id}} — Get Multiplan Details](/subscription-billing/multiplan/get-multiplan-details)
- [GET /multiplans — List All Multiplans](/subscription-billing/multiplan/list-all-multiplans)
- [POST /multiplans — Create Multiplan](/subscription-billing/multiplan/create-multiplan)
- [DELETE /multiplans/{{id}} — Delete Multiplan](/subscription-billing/multiplan/delete-multiplan)

