diff --git a/api-docs.json b/api-docs.json
index 86f50bc..67b383c 100644
--- a/api-docs.json
+++ b/api-docs.json
@@ -1718,7 +1718,7 @@
"type": "string"
},
"listIds": {
- "description": "To create a blast campaign, set listIds to an array of list IDs to which the campaign should be sent. To create a triggered campaign, omit listIds from the request body.",
+ "description": "To create a blast campaign, set listIds to a non-empty array of list IDs to which the campaign should be sent. To create a triggered campaign, omit listIds from the request body.",
"items": {
"format": "int64",
"type": "integer"
@@ -1729,6 +1729,11 @@
"description": "The name to use in Iterable for the new campaign.",
"type": "string"
},
+ "scheduleSend": {
+ "description": "Whether to immediately schedule the blast campaign for sending. Defaults to true. Set to false to create the campaign without scheduling it (the campaign can be scheduled later using POST /api/campaigns/{campaignId}/schedule). Only applies to blast campaigns.",
+ "example": false,
+ "type": "boolean"
+ },
"sendAt": {
"description": "A scheduled send time for a new blast campaign, up to 21 days in the future. Format: YYYY-MM-DD HH:MM:SS (UTC). For more details, see our API Overview.",
"type": "string"
@@ -3857,6 +3862,8 @@
"webPushSend",
"webPushClick",
"webPushSendSkip",
+ "rcsSend",
+ "rcsSendSkip",
"emailSubscribe",
"emailUnSubscribe",
"purchase",
@@ -7175,6 +7182,8 @@
"webPushSend",
"webPushClick",
"webPushSendSkip",
+ "rcsSend",
+ "rcsSendSkip",
"emailSubscribe",
"emailUnSubscribe",
"purchase",
@@ -7329,6 +7338,8 @@
"webPushSend",
"webPushClick",
"webPushSendSkip",
+ "rcsSend",
+ "rcsSendSkip",
"emailSubscribe",
"emailUnSubscribe",
"purchase",
diff --git a/src/client/campaigns.ts b/src/client/campaigns.ts
index f342fa4..b145a29 100644
--- a/src/client/campaigns.ts
+++ b/src/client/campaigns.ts
@@ -6,7 +6,7 @@ import {
ArchiveCampaignsResponseSchema,
CampaignMetricsResponse,
CancelCampaignParams,
- CreateAndScheduleCampaignParams,
+ CreateBlastCampaignParams,
CreateCampaignResponse,
CreateCampaignResponseSchema,
CreateTriggeredCampaignParams,
@@ -76,8 +76,8 @@ export function Campaigns>(Base: T) {
return this.validateResponse(response, GetCampaignResponseSchema);
}
- async createAndScheduleCampaign(
- params: CreateAndScheduleCampaignParams
+ async createBlastCampaign(
+ params: CreateBlastCampaignParams
): Promise {
const response = await this.client.post("/api/campaigns/create", params);
return this.validateResponse(response, CreateCampaignResponseSchema);
diff --git a/src/types/campaigns.ts b/src/types/campaigns.ts
index 72a346a..3cf9a33 100644
--- a/src/types/campaigns.ts
+++ b/src/types/campaigns.ts
@@ -153,7 +153,7 @@ const campaignDataFieldsSchema = z
);
// Create and schedule a blast campaign
-export const CreateAndScheduleCampaignParamsSchema = z.object({
+export const CreateBlastCampaignParamsSchema = z.object({
name: z
.string()
.describe("The name to use in Iterable for the new campaign"),
@@ -164,6 +164,12 @@ export const CreateAndScheduleCampaignParamsSchema = z.object({
.array(z.number())
.min(1)
.describe("Array of list IDs to which the campaign should be sent"),
+ scheduleSend: z
+ .boolean()
+ .default(false)
+ .describe(
+ "Whether to immediately schedule the blast campaign for sending. Set to true to schedule the campaign on creation. When false, the campaign can be scheduled later using POST /api/campaigns/{campaignId}/schedule."
+ ),
sendAt: IterableDateTimeSchema.describe(
"Scheduled send time (YYYY-MM-DD HH:MM:SS UTC)"
),
@@ -188,8 +194,8 @@ export const CreateAndScheduleCampaignParamsSchema = z.object({
.describe("Array of suppression list IDs"),
});
-export type CreateAndScheduleCampaignParams = z.infer<
- typeof CreateAndScheduleCampaignParamsSchema
+export type CreateBlastCampaignParams = z.input<
+ typeof CreateBlastCampaignParamsSchema
>;
// Create a triggered campaign
diff --git a/src/types/export.ts b/src/types/export.ts
index 8c3c1c3..6a2003d 100644
--- a/src/types/export.ts
+++ b/src/types/export.ts
@@ -60,6 +60,8 @@ export const StartExportJobParamsSchema = z.object({
"webPushSend",
"webPushClick",
"webPushSendSkip",
+ "rcsSend",
+ "rcsSendSkip",
"emailSubscribe",
"emailUnSubscribe",
"purchase",
diff --git a/tests/integration/campaigns.test.ts b/tests/integration/campaigns.test.ts
index d7d213b..2778137 100644
--- a/tests/integration/campaigns.test.ts
+++ b/tests/integration/campaigns.test.ts
@@ -35,7 +35,7 @@ describe("Campaign Management Integration Tests", () => {
sendAt: string;
}) => {
const createResponse = await retryRateLimited(
- () => withTimeout(client.createAndScheduleCampaign(params)),
+ () => withTimeout(client.createBlastCampaign(params)),
`Create blast campaign: ${params.name}`
);
return createResponse.campaignId;
diff --git a/tests/unit/campaigns.test.ts b/tests/unit/campaigns.test.ts
index 59443db..a272111 100644
--- a/tests/unit/campaigns.test.ts
+++ b/tests/unit/campaigns.test.ts
@@ -14,7 +14,7 @@ import {
ArchiveCampaignsParamsSchema,
CampaignDetailsSchema,
CancelCampaignParamsSchema,
- CreateAndScheduleCampaignParamsSchema,
+ CreateBlastCampaignParamsSchema,
CreateTriggeredCampaignParamsSchema,
DeactivateTriggeredCampaignParamsSchema,
GetCampaignMetricsParamsSchema,
@@ -781,10 +781,10 @@ describe("Campaign Management", () => {
).toThrow(); // invalid type
});
- it("should validate createAndScheduleCampaign parameters", () => {
+ it("should validate createBlastCampaign parameters", () => {
// Valid parameters - all required fields
expect(() =>
- CreateAndScheduleCampaignParamsSchema.parse({
+ CreateBlastCampaignParamsSchema.parse({
name: "Test Campaign",
templateId: 123,
listIds: [456],
@@ -794,7 +794,7 @@ describe("Campaign Management", () => {
// Valid with optional fields
expect(() =>
- CreateAndScheduleCampaignParamsSchema.parse({
+ CreateBlastCampaignParamsSchema.parse({
name: "Test Campaign",
templateId: 123,
listIds: [456, 789],
@@ -809,7 +809,7 @@ describe("Campaign Management", () => {
// Missing sendAt
expect(() =>
- CreateAndScheduleCampaignParamsSchema.parse({
+ CreateBlastCampaignParamsSchema.parse({
name: "Test Campaign",
templateId: 123,
listIds: [456],
@@ -818,7 +818,7 @@ describe("Campaign Management", () => {
// Missing listIds
expect(() =>
- CreateAndScheduleCampaignParamsSchema.parse({
+ CreateBlastCampaignParamsSchema.parse({
name: "Test Campaign",
templateId: 123,
sendAt: "2026-03-01 10:00:00",
@@ -827,7 +827,7 @@ describe("Campaign Management", () => {
// Empty listIds
expect(() =>
- CreateAndScheduleCampaignParamsSchema.parse({
+ CreateBlastCampaignParamsSchema.parse({
name: "Test Campaign",
templateId: 123,
listIds: [],
@@ -837,7 +837,7 @@ describe("Campaign Management", () => {
// Missing name
expect(() =>
- CreateAndScheduleCampaignParamsSchema.parse({
+ CreateBlastCampaignParamsSchema.parse({
templateId: 123,
listIds: [456],
sendAt: "2026-03-01 10:00:00",
@@ -846,7 +846,7 @@ describe("Campaign Management", () => {
// Missing templateId
expect(() =>
- CreateAndScheduleCampaignParamsSchema.parse({
+ CreateBlastCampaignParamsSchema.parse({
name: "Test Campaign",
listIds: [456],
sendAt: "2026-03-01 10:00:00",
@@ -888,7 +888,7 @@ describe("Campaign Management", () => {
});
});
- describe("createAndScheduleCampaign", () => {
+ describe("createBlastCampaign", () => {
it("should call campaigns/create endpoint with blast params", async () => {
const mockResponse = { data: { campaignId: 12345 } };
mockAxiosInstance.post.mockResolvedValue(mockResponse);
@@ -900,7 +900,7 @@ describe("Campaign Management", () => {
sendAt: "2026-03-01 10:00:00",
};
- const result = await client.createAndScheduleCampaign(params);
+ const result = await client.createBlastCampaign(params);
expect(mockAxiosInstance.post).toHaveBeenCalledWith(
"/api/campaigns/create",