# PUT /subscribers/{ subscriber Id} — Update Subscriber by ID

> Product: **Pabbly Email Marketing** (v2)
> Base URL: `https://emails.pabbly.com/api/v2`
> Auth: Bearer via `Authorization` header
> Canonical: `/email-marketing/subscribers/update-subscriber-by-id`

Updates an existing subscriber's information by their unique ID or email address. The API automatically detects whether you're using a subscriber ID or email address. All provided fields will be updated; omitted fields remain unchanged.

**Body parameters:**

| Name | Type | Required | Description |
|------|------|----------|-------------|
| firstName | string | No | Update subscriber's first name. |
| lastName | string | No | Update subscriber's last name. |
| leadScore | integer | No | Update lead score value (0-100). |
| status | string | No | Update subscription status. Valid values: subscribed, unsubscribed, bounced, complaint. |
| tagsToAdd | array | No | Add tags to existing subscriber tags. Tags will be merged with existing tags (duplicates are automatically removed). Tags must exist in Settings. This field is ignored if tags field is also provided. |
| tagsToRemove | array | No | Remove specific tags from subscriber. Tags specified in this array will be removed from existing tags. This field is ignored if tags field is also provided. |
| customFields | object | No | Update custom fields. Custom fields must exist in Settings. |
|   ↳ company | string | No |  |
|   ↳ position | string | No |  |
| mobile | string | No | Update subscriber's phone number. |
| country | string | No | Update subscriber's country. |
| city | string | No | Update subscriber's city. |
| tags | string | No | Update tags. Note: This replaces all existing tags. Tags must exist in Settings. |
| lists | string | No | Update lists. Note: This replaces all existing lists. |

**Example request body:**

```json
{
  "firstName": "John",
  "lastName": "Doe Updated",
  "leadScore": 90,
  "status": "subscribed",
    "tagsToAdd": ["hot lead", "Premium", "New Tag"],
  "tagsToRemove": ["cold lead"],
  "customFields": {
    "company": "Updated Company Name",
    "position": "Senior Software Engineer"
  }
}
```

**Response (200)** — Update Subscriber by ID:

```json
{
    "success": true,
    "status": "success",
    "message": "Subscriber updated successfully",
    "data": {
        "suppressionDetail": {
            "createdAt": "2026-01-06T06:19:07.546Z",
            "updatedAt": "2026-01-06T07:15:45.730Z",
            "reason": "bounced",
            "type": "bounced"
        },
        "_id": "695ca95b9a8ed4e65738d1c5",
        "userId": "682db2da6ef7e93a3eceb126",
        "businessId": "695b6aabf58d3822ac852e28",
        "email": "s001gourav@gmail.com",
        "firstName": "John",
        "lastName": "Doe Updated",
        "mobile": "",
        "leadScore": 90,
        "dateOfBirth": null,
        "status": "subscribed",
        "country": "Not Specified",
        "city": "Not Specified",
        "tags": [
            "hot lead",
            "Premium",
            "New Tag"
        ],
        "source": "manual",
        "segments": [],
        "customFields": {
            "company": "Updated Company Name",
            "position": "Senior Software Engineer"
        },
        "activity": [],
        "automationWorkflows": [],
        "lists": [
            "Pabbly Email Marketing",
            "cvbcbbc"
        ],
        "totalSent": 2,
        "totalDelivered": 0,
        "totalOpens": 0,
        "totalUniqueOpens": 0,
        "totalUniqueClick": 0,
        "totalClicks": 0,
        "deleteAfter": null,
        "campaignDetails": [
            {
                "_id": "69672de955b46d5df8e456e7",
                "campaignId": "695ca9729a8ed4e65738d2d9",
                "campaignName": "gfgf"
            },
            {
                "_id": "69672de955b46d5df8e456e8",
                "campaignId": "695caafb9a8ed4e6573906ac",
                "campaignName": "pp"
            },
            {
                "_id": "69672de955b46d5df8e456e9",
                "campaignId": "695cb3d29a8ed4e6573a0430",
                "campaignName": "tr"
            },
            {
                "_id": "69672de955b46d5df8e456ea",
                "campaignId": "695cb6579a8ed4e6573a05fd",
                "campaignName": "d"
            }
        ],
        "createdAt": "2026-01-06T06:19:07.546Z",
        "updatedAt": "2026-01-14T05:47:21.327Z",
        "isSuppressed": true
    }
}
```

**Code examples:**

_cURL_

```curl
curl -X PUT https://emails.pabbly.com/api/v2/subscribers/{ subscriber Id} \
  -H "Authorization: Bearer {{YOUR_API_KEY}}" \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "John",
    "lastName": "Doe Updated",
    "leadScore": 90,
    "status": "subscribed",
    "tagsToAdd": [
      "hot lead",
      "Premium",
      "New Tag"
    ],
    "tagsToRemove": [
      "cold lead"
    ],
    "customFields": {
      "company": "Updated Company Name",
      "position": "Senior Software Engineer"
    }
  }'
```

_Ruby_

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

uri = URI('https://emails.pabbly.com/api/v2/subscribers/{ subscriber Id}')
request = Net::HTTP::Put.new(uri)
request['Authorization'] = 'Bearer {{YOUR_API_KEY}}'
request['Content-Type'] = 'application/json'
request.body = "{\"firstName\":\"John\",\"lastName\":\"Doe Updated\",\"leadScore\":90,\"status\":\"subscribed\",\"tagsToAdd\":[\"hot lead\",\"Premium\",\"New Tag\"],\"tagsToRemove\":[\"cold lead\"],\"customFields\":{\"company\":\"Updated Company Name\",\"position\":\"Senior Software Engineer\"}}"

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

response = requests.put(
    'https://emails.pabbly.com/api/v2/subscribers/{ subscriber Id}',
    headers={'Authorization': 'Bearer {{YOUR_API_KEY}}'},
    json={
    'firstName': 'John',
    'lastName': 'Doe Updated',
    'leadScore': 90,
    'status': 'subscribed',
    'tagsToAdd': [
        'hot lead',
        'Premium',
        'New Tag'
    ],
    'tagsToRemove': [
        'cold lead'
    ],
    'customFields': {
        'company': 'Updated Company Name',
        'position': 'Senior Software Engineer'
    }
},
)

data = response.json()
```

_PHP_

```php
<?php
$ch = curl_init('https://emails.pabbly.com/api/v2/subscribers/{ subscriber Id}');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer {{YOUR_API_KEY}}', 'Content-Type: application/json']);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"firstName":"John","lastName":"Doe Updated","leadScore":90,"status":"subscribed","tagsToAdd":["hot lead","Premium","New Tag"],"tagsToRemove":["cold lead"],"customFields":{"company":"Updated Company Name","position":"Senior Software Engineer"}}');

$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;

HttpClient client = HttpClient.newHttpClient();
HttpRequest.Builder builder = HttpRequest.newBuilder()
    .uri(URI.create("https://emails.pabbly.com/api/v2/subscribers/{ subscriber Id}"))
    .header("Authorization", "Bearer {{YOUR_API_KEY}}")
    .header("Content-Type", "application/json")
    .PUT(HttpRequest.BodyPublishers.ofString("{\"firstName\":\"John\",\"lastName\":\"Doe Updated\",\"leadScore\":90,\"status\":\"subscribed\",\"tagsToAdd\":[\"hot lead\",\"Premium\",\"New Tag\"],\"tagsToRemove\":[\"cold lead\"],\"customFields\":{\"company\":\"Updated Company Name\",\"position\":\"Senior Software Engineer\"}}"));

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

_Node.js_

```node
const response = await fetch('https://emails.pabbly.com/api/v2/subscribers/{ subscriber Id}', {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer {{YOUR_API_KEY}}',
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "firstName": "John",
    "lastName": "Doe Updated",
    "leadScore": 90,
    "status": "subscribed",
    "tagsToAdd": [
      "hot lead",
      "Premium",
      "New Tag"
    ],
    "tagsToRemove": [
      "cold lead"
    ],
    "customFields": {
      "company": "Updated Company Name",
      "position": "Senior Software Engineer"
    }
  }),
});

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

_Go_

```go
package main

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

func main() {
    payload := strings.NewReader("{\"firstName\":\"John\",\"lastName\":\"Doe Updated\",\"leadScore\":90,\"status\":\"subscribed\",\"tagsToAdd\":[\"hot lead\",\"Premium\",\"New Tag\"],\"tagsToRemove\":[\"cold lead\"],\"customFields\":{\"company\":\"Updated Company Name\",\"position\":\"Senior Software Engineer\"}}")
    req, _ := http.NewRequest("PUT", "https://emails.pabbly.com/api/v2/subscribers/{ subscriber Id}", payload)
    req.Header.Set("Content-Type", "application/json")
    req.Header.Set("Authorization", "Bearer {{YOUR_API_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.Threading.Tasks;

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Put, "https://emails.pabbly.com/api/v2/subscribers/{ subscriber Id}");
request.Headers.TryAddWithoutValidation("Authorization", "Bearer {{YOUR_API_KEY}}");
request.Content = new StringContent("{\"firstName\":\"John\",\"lastName\":\"Doe Updated\",\"leadScore\":90,\"status\":\"subscribed\",\"tagsToAdd\":[\"hot lead\",\"Premium\",\"New Tag\"],\"tagsToRemove\":[\"cold lead\"],\"customFields\":{\"company\":\"Updated Company Name\",\"position\":\"Senior Software Engineer\"}}");
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 Subscribers:**

- [POST /subscribers — Create Subscriber](/email-marketing/subscribers/create-subscriber)
- [GET /subscribers — Get All Subscribers](/email-marketing/subscribers/get-all-subscribers)
- [GET /subscribers/stats — Get Subscriber Statistics](/email-marketing/subscribers/get-subscriber-statistics)
- [GET /subscribers/{subscriber ID} — Get Subscriber by ID](/email-marketing/subscribers/get-subscriber-by-id)
- [DELETE /subscribers — Delete Subscriber](/email-marketing/subscribers/delete-subscriber)
- [PUT /subscribers/{{email}} — Update Subscriber by Email](/email-marketing/subscribers/update-subscriber-by-email)
- [GET /subscribers/{{email}} — Get Subscriber by Email](/email-marketing/subscribers/get-subscriber-by-email)
- [GET /custom-fields — Get All Custom Fields](/email-marketing/subscribers/get-all-custom-fields)

