cURL
curl "https://app.tatango.com/api/v2/lists/<ID>/subscribers/<SUBSCRIBER_ID>" -d '{"subscriber":{"phone_number":"2141234567","first_name":"John","last_name":"Doe"}}' -X PUT \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-u emailaddress@mydomain.com:my_api_key \
-H "Host: example.org" \
-H "Cookie: "require 'net/http'
require 'uri'
uri = URI.parse('https://app.tatango.com/api/v2/lists/<ID>/subscribers/<SUBSCRIBER_ID>')
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Put.new(uri.request_url)
request.basic_auth("emailaddress@mydomain.com", "my_api_key")
request.body = {"subscriber":{"phone_number":"2141234567","first_name":"John","last_name":"Doe"}}.to_json
response = http.request(request)var request = new XMLHttpRequest();
request.open('PUT', 'https://app.tatango.com/api/v2/lists/<ID>/subscribers/<SUBSCRIBER_ID>', false);
request.setRequestHeader('Content-Type', 'application/json');
request.setRequestHeader('Authorization', 'Basic ' + btoa('emailaddress@mydomain.com:my_api_key'));
var data = JSON.stringify({ subscriber: { phone_number: '2141234567', first_name: 'John', last_name: 'Doe' } });
request.send(data);import requests
url = "https://app.tatango.com/api/v2/lists/{ID}/subscribers/{SUBSCRIBER_ID}"
payload = { "subscriber": {
"phone_number": "2141234567",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"birthdate": "19900101",
"zip_code": "75201",
"gender": "Male",
"tags": "vip customer, card holder, daily alerts",
"custom_field_key": "custom_value"
} }
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.tatango.com/api/v2/lists/{ID}/subscribers/{SUBSCRIBER_ID}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'subscriber' => [
'phone_number' => '2141234567',
'first_name' => 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com',
'birthdate' => '19900101',
'zip_code' => '75201',
'gender' => 'Male',
'tags' => 'vip customer, card holder, daily alerts',
'custom_field_key' => 'custom_value'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.tatango.com/api/v2/lists/{ID}/subscribers/{SUBSCRIBER_ID}"
payload := strings.NewReader("{\n \"subscriber\": {\n \"phone_number\": \"2141234567\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"birthdate\": \"19900101\",\n \"zip_code\": \"75201\",\n \"gender\": \"Male\",\n \"tags\": \"vip customer, card holder, daily alerts\",\n \"custom_field_key\": \"custom_value\"\n }\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://app.tatango.com/api/v2/lists/{ID}/subscribers/{SUBSCRIBER_ID}")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"subscriber\": {\n \"phone_number\": \"2141234567\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"birthdate\": \"19900101\",\n \"zip_code\": \"75201\",\n \"gender\": \"Male\",\n \"tags\": \"vip customer, card holder, daily alerts\",\n \"custom_field_key\": \"custom_value\"\n }\n}")
.asString();{
"status": "Subscriber updated",
"subscriber": {
"phone_number": "2141234567",
"cleaned_at": null,
"subscribed_at": "2025-06-18T15:36:07Z",
"opted_out_at": null,
"opt_in_method": "api",
"keyword_name": null,
"carrier": 383,
"carrier_name": "Verizon Wireless",
"global_carrier_id": "12345",
"global_carrier_name": "Verizon"
}
}Subscribers
Updating a Subscriber
This endpoint updates a subscriber.
PUT
/
api
/
v2
/
lists
/
{ID}
/
subscribers
/
{SUBSCRIBER_ID}
cURL
curl "https://app.tatango.com/api/v2/lists/<ID>/subscribers/<SUBSCRIBER_ID>" -d '{"subscriber":{"phone_number":"2141234567","first_name":"John","last_name":"Doe"}}' -X PUT \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-u emailaddress@mydomain.com:my_api_key \
-H "Host: example.org" \
-H "Cookie: "require 'net/http'
require 'uri'
uri = URI.parse('https://app.tatango.com/api/v2/lists/<ID>/subscribers/<SUBSCRIBER_ID>')
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Put.new(uri.request_url)
request.basic_auth("emailaddress@mydomain.com", "my_api_key")
request.body = {"subscriber":{"phone_number":"2141234567","first_name":"John","last_name":"Doe"}}.to_json
response = http.request(request)var request = new XMLHttpRequest();
request.open('PUT', 'https://app.tatango.com/api/v2/lists/<ID>/subscribers/<SUBSCRIBER_ID>', false);
request.setRequestHeader('Content-Type', 'application/json');
request.setRequestHeader('Authorization', 'Basic ' + btoa('emailaddress@mydomain.com:my_api_key'));
var data = JSON.stringify({ subscriber: { phone_number: '2141234567', first_name: 'John', last_name: 'Doe' } });
request.send(data);import requests
url = "https://app.tatango.com/api/v2/lists/{ID}/subscribers/{SUBSCRIBER_ID}"
payload = { "subscriber": {
"phone_number": "2141234567",
"first_name": "John",
"last_name": "Doe",
"email": "john.doe@example.com",
"birthdate": "19900101",
"zip_code": "75201",
"gender": "Male",
"tags": "vip customer, card holder, daily alerts",
"custom_field_key": "custom_value"
} }
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.tatango.com/api/v2/lists/{ID}/subscribers/{SUBSCRIBER_ID}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'subscriber' => [
'phone_number' => '2141234567',
'first_name' => 'John',
'last_name' => 'Doe',
'email' => 'john.doe@example.com',
'birthdate' => '19900101',
'zip_code' => '75201',
'gender' => 'Male',
'tags' => 'vip customer, card holder, daily alerts',
'custom_field_key' => 'custom_value'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.tatango.com/api/v2/lists/{ID}/subscribers/{SUBSCRIBER_ID}"
payload := strings.NewReader("{\n \"subscriber\": {\n \"phone_number\": \"2141234567\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"birthdate\": \"19900101\",\n \"zip_code\": \"75201\",\n \"gender\": \"Male\",\n \"tags\": \"vip customer, card holder, daily alerts\",\n \"custom_field_key\": \"custom_value\"\n }\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://app.tatango.com/api/v2/lists/{ID}/subscribers/{SUBSCRIBER_ID}")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"subscriber\": {\n \"phone_number\": \"2141234567\",\n \"first_name\": \"John\",\n \"last_name\": \"Doe\",\n \"email\": \"john.doe@example.com\",\n \"birthdate\": \"19900101\",\n \"zip_code\": \"75201\",\n \"gender\": \"Male\",\n \"tags\": \"vip customer, card holder, daily alerts\",\n \"custom_field_key\": \"custom_value\"\n }\n}")
.asString();{
"status": "Subscriber updated",
"subscriber": {
"phone_number": "2141234567",
"cleaned_at": null,
"subscribed_at": "2025-06-18T15:36:07Z",
"opted_out_at": null,
"opt_in_method": "api",
"keyword_name": null,
"carrier": 383,
"carrier_name": "Verizon Wireless",
"global_carrier_id": "12345",
"global_carrier_name": "Verizon"
}
}Request URL
PUT https://app.tatango.com/api/v2/lists/{ID}/subscribers/{SUBSCRIBER_ID}
FAQs
If I add tags to an existing subscriber, does that add the tags to existing, or replace existing?- The tags are added to any tags already applied, not replaced.
- Yes, the paramaters are listed below.
Authorizations
The momoGood Messaging API v2 authenticates requests by validating an API key passed via HTTP Basic Authentication. Use your login email as the username and your API key as the password.
Path Parameters
ID of the list
ID of the subscriber (phone number)
Body
application/json
Show child attributes
Show child attributes
⌘I