Skip to main content
PUT
/
v2
/
schedules
/
{id}
{
  "success": true,
  "schedule": {
    "id": "6651a3f2e4b0a1c2d3e4f567",
    "name": "Weekend Promo — Updated",
    "status": "on",
    "send_type": "blast",
    "source_lists": [101, 204],
    "audiences": ["665fa1b2c3d4e5f6a7b8c901"],
    "is_repeating": true,
    "send_time": "14:30",
    "send_date": null,
    "start_date": "2025-06-01T00:00:00Z",
    "end_date": "2025-08-31T00:00:00Z",
    "days_of_week": {
      "monday": false,
      "tuesday": false,
      "wednesday": false,
      "thursday": false,
      "friday": true,
      "saturday": true,
      "sunday": true
    },
    "skip_within_hours": 48,
    "use_local_time": true,
    "filter_bots": true,
    "is_mms": false,
    "is_cto": false,
    "automated_percent": 0,
    "ir_revenue": 2.50,
    "blasts": [
      {
        "message": "Huge weekend sale! Save big: {{link1}}",
        "offer_links": [
          {
            "key": "link1",
            "offer_id": "offer_abc123",
            "url_params": {"utm_source": "sms", "utm_campaign": "weekend_v2"}
          }
        ],
        "percent_audience": 100,
        "variant_name": "Single Variant",
        "mms_image_url": null
      }
    ],
    "created_at": "2025-05-28T10:15:30Z",
    "updated_at": "2025-06-05T14:22:10Z"
  }
}
Update the configuration of an existing schedule. Only the fields you include in the request body will be modified — omitted fields remain unchanged. Schedules with status complete cannot be edited and will return a 400 error.

Path Parameters

id
string
required
The unique identifier of the schedule to update.

Body Parameters

All body parameters are optional. Only provided fields are updated.
name
string
A descriptive name for this schedule.
send_type
string
The type of schedule. Must be blast or automated.
audiences
array of strings
Array of audience IDs to target. Each audience must exist and be active on your account.
is_repeating
boolean
Set to true for a recurring schedule or false for a one-time send.
send_time
string
Time of day to send, in HH:MM format (24-hour clock).
source_lists
array of integers
IDs of source sending lists.
status
string
Updated status. Allowed values on update: draft, off, on, complete, archive.
send_date
datetime
The date to send for a one-time schedule. Required if changing is_repeating to false.
start_date
datetime
Start date for a repeating schedule. Required if changing is_repeating to true.
end_date
datetime
End date for a repeating schedule. Required if changing is_repeating to true.
days_of_week
object
An object specifying which days the schedule should run. Keys: monday, tuesday, wednesday, thursday, friday, saturday, sunday. Values are booleans. At least one day must be true if provided.
skip_within_hours
float
Skip sending to a contact if they were already sent to within this many hours.
use_local_time
boolean
When true, send_time is interpreted in each recipient’s local timezone.
filter_bots
boolean
Enable or disable bot filtering.
is_mms
boolean
Set to true to send MMS messages with image attachments.
is_cto
boolean
Enable or disable click-to-open mode.
automated_percent
float
Percentage of the audience for automated creative selection (0-100).
ir_revenue
float
Expected revenue per conversion.
blasts
array
Updated array of blast variant objects. When provided, this replaces the entire blasts array.

Response Fields

success
boolean
true if the schedule was updated successfully.
schedule
object
The full updated schedule object. See List Schedules for the complete schedule object schema.

Examples

cURL
curl -X PUT "https://app.tracklysms.com/api/v2/schedules/6651a3f2e4b0a1c2d3e4f567" \
  -H "X-Api-Key: trk_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Weekend Promo — Updated",
    "status": "on",
    "skip_within_hours": 48,
    "blasts": [
      {
        "message": "Huge weekend sale! Save big: {{link1}}",
        "offer_links": [
          {
            "key": "link1",
            "offer_id": "offer_abc123",
            "url_params": {"utm_source": "sms", "utm_campaign": "weekend_v2"}
          }
        ],
        "percent_audience": 100,
        "variant_name": "Single Variant"
      }
    ]
  }'
Python
import requests

schedule_id = "6651a3f2e4b0a1c2d3e4f567"

payload = {
    "name": "Weekend Promo — Updated",
    "status": "on",
    "skip_within_hours": 48,
    "blasts": [
        {
            "message": "Huge weekend sale! Save big: {{link1}}",
            "offer_links": [
                {
                    "key": "link1",
                    "offer_id": "offer_abc123",
                    "url_params": {"utm_source": "sms", "utm_campaign": "weekend_v2"},
                }
            ],
            "percent_audience": 100,
            "variant_name": "Single Variant",
        }
    ],
}

response = requests.put(
    f"https://app.tracklysms.com/api/v2/schedules/{schedule_id}",
    headers={
        "X-Api-Key": "trk_your_api_key_here",
        "Content-Type": "application/json",
    },
    json=payload,
)

data = response.json()
print(f"Updated: {data['schedule']['name']}{data['schedule']['status']}")
Node.js
const scheduleId = "6651a3f2e4b0a1c2d3e4f567";

const payload = {
  name: "Weekend Promo — Updated",
  status: "on",
  skip_within_hours: 48,
  blasts: [
    {
      message: "Huge weekend sale! Save big: {{link1}}",
      offer_links: [
        {
          key: "link1",
          offer_id: "offer_abc123",
          url_params: "utm_source=sms&utm_campaign=weekend_v2"
        }
      ],
      percent_audience: 100,
      variant_name: "Single Variant"
    }
  ]
};

const response = await fetch(
  `https://app.tracklysms.com/api/v2/schedules/${scheduleId}`,
  {
    method: "PUT",
    headers: {
      "X-Api-Key": "trk_your_api_key_here",
      "Content-Type": "application/json"
    },
    body: JSON.stringify(payload)
  }
);

const data = await response.json();
console.log(`Updated: ${data.schedule.name}${data.schedule.status}`);
{
  "success": true,
  "schedule": {
    "id": "6651a3f2e4b0a1c2d3e4f567",
    "name": "Weekend Promo — Updated",
    "status": "on",
    "send_type": "blast",
    "source_lists": [101, 204],
    "audiences": ["665fa1b2c3d4e5f6a7b8c901"],
    "is_repeating": true,
    "send_time": "14:30",
    "send_date": null,
    "start_date": "2025-06-01T00:00:00Z",
    "end_date": "2025-08-31T00:00:00Z",
    "days_of_week": {
      "monday": false,
      "tuesday": false,
      "wednesday": false,
      "thursday": false,
      "friday": true,
      "saturday": true,
      "sunday": true
    },
    "skip_within_hours": 48,
    "use_local_time": true,
    "filter_bots": true,
    "is_mms": false,
    "is_cto": false,
    "automated_percent": 0,
    "ir_revenue": 2.50,
    "blasts": [
      {
        "message": "Huge weekend sale! Save big: {{link1}}",
        "offer_links": [
          {
            "key": "link1",
            "offer_id": "offer_abc123",
            "url_params": {"utm_source": "sms", "utm_campaign": "weekend_v2"}
          }
        ],
        "percent_audience": 100,
        "variant_name": "Single Variant",
        "mms_image_url": null
      }
    ],
    "created_at": "2025-05-28T10:15:30Z",
    "updated_at": "2025-06-05T14:22:10Z"
  }
}

Error Codes

HTTP StatusError CodeDescription
400schedule_completeThe schedule has status complete and cannot be modified.
400missing_nameThe name field cannot be set to an empty value.
400missing_send_typeThe send_type field cannot be set to an empty value.
400invalid_send_typesend_type must be blast or automated.
400missing_is_repeatingThe is_repeating field cannot be set to an empty value.
400missing_send_timeThe send_time field cannot be set to an empty value.
400missing_audiencesAt least one audience ID is required.
400invalid_statusstatus must be draft, off, on, complete, or archive.
400missing_send_datesend_date is required for one-time (non-repeating) schedules.
400missing_start_datestart_date is required for repeating schedules.
400missing_end_dateend_date is required for repeating schedules.
400no_days_selectedAt least one day must be true in days_of_week for repeating schedules.
400missing_blastsBlast variants are required when send_type is blast.
400invalid_blast_percentThe percent_audience values across all blasts must sum to exactly 100.
400missing_blast_messageEach blast variant must include a message.
404not_foundNo schedule exists with the given ID.
404audience_not_foundOne or more audience IDs do not exist or are not active.
404source_list_not_foundOne or more source list IDs do not exist on this account.
404offer_not_foundOne or more offer IDs referenced in offer_links do not exist.
401unauthorizedAPI key is missing, invalid, or revoked.

Next Steps

Campaign Scheduling

Scheduling best practices

List Audiences

View audiences