Skip to content

Commit 2fb69eb

Browse files
authored
Add scheduleSend parameter (#15)
1 parent a950180 commit 2fb69eb

6 files changed

Lines changed: 38 additions & 19 deletions

File tree

api-docs.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1718,7 +1718,7 @@
17181718
"type": "string"
17191719
},
17201720
"listIds": {
1721-
"description": "To create a blast campaign, set <code>listIds</code> to an array of list IDs to which the campaign should be sent. To create a triggered campaign, omit <code>listIds</code> from the request body.",
1721+
"description": "To create a blast campaign, set <code>listIds</code> to a non-empty array of list IDs to which the campaign should be sent. To create a triggered campaign, omit <code>listIds</code> from the request body.",
17221722
"items": {
17231723
"format": "int64",
17241724
"type": "integer"
@@ -1729,6 +1729,11 @@
17291729
"description": "The name to use in Iterable for the new campaign.",
17301730
"type": "string"
17311731
},
1732+
"scheduleSend": {
1733+
"description": "Whether to immediately schedule the blast campaign for sending. Defaults to <code>true</code>. Set to <code>false</code> to create the campaign without scheduling it (the campaign can be scheduled later using <code>POST /api/campaigns/{campaignId}/schedule</code>). Only applies to blast campaigns.",
1734+
"example": false,
1735+
"type": "boolean"
1736+
},
17321737
"sendAt": {
17331738
"description": "A scheduled send time for a new blast campaign, up to 21 days in the future. Format: <code>YYYY-MM-DD HH:MM:SS</code> (UTC). For more details, see our <a href=\"https://support.iterable.com/hc/articles/204780579#post-api-campaigns-create\">API Overview</a>.",
17341739
"type": "string"
@@ -3857,6 +3862,8 @@
38573862
"webPushSend",
38583863
"webPushClick",
38593864
"webPushSendSkip",
3865+
"rcsSend",
3866+
"rcsSendSkip",
38603867
"emailSubscribe",
38613868
"emailUnSubscribe",
38623869
"purchase",
@@ -7175,6 +7182,8 @@
71757182
"webPushSend",
71767183
"webPushClick",
71777184
"webPushSendSkip",
7185+
"rcsSend",
7186+
"rcsSendSkip",
71787187
"emailSubscribe",
71797188
"emailUnSubscribe",
71807189
"purchase",
@@ -7329,6 +7338,8 @@
73297338
"webPushSend",
73307339
"webPushClick",
73317340
"webPushSendSkip",
7341+
"rcsSend",
7342+
"rcsSendSkip",
73327343
"emailSubscribe",
73337344
"emailUnSubscribe",
73347345
"purchase",

src/client/campaigns.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
ArchiveCampaignsResponseSchema,
77
CampaignMetricsResponse,
88
CancelCampaignParams,
9-
CreateAndScheduleCampaignParams,
9+
CreateBlastCampaignParams,
1010
CreateCampaignResponse,
1111
CreateCampaignResponseSchema,
1212
CreateTriggeredCampaignParams,
@@ -76,8 +76,8 @@ export function Campaigns<T extends Constructor<BaseIterableClient>>(Base: T) {
7676
return this.validateResponse(response, GetCampaignResponseSchema);
7777
}
7878

79-
async createAndScheduleCampaign(
80-
params: CreateAndScheduleCampaignParams
79+
async createBlastCampaign(
80+
params: CreateBlastCampaignParams
8181
): Promise<CreateCampaignResponse> {
8282
const response = await this.client.post("/api/campaigns/create", params);
8383
return this.validateResponse(response, CreateCampaignResponseSchema);

src/types/campaigns.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ const campaignDataFieldsSchema = z
153153
);
154154

155155
// Create and schedule a blast campaign
156-
export const CreateAndScheduleCampaignParamsSchema = z.object({
156+
export const CreateBlastCampaignParamsSchema = z.object({
157157
name: z
158158
.string()
159159
.describe("The name to use in Iterable for the new campaign"),
@@ -164,6 +164,12 @@ export const CreateAndScheduleCampaignParamsSchema = z.object({
164164
.array(z.number())
165165
.min(1)
166166
.describe("Array of list IDs to which the campaign should be sent"),
167+
scheduleSend: z
168+
.boolean()
169+
.default(false)
170+
.describe(
171+
"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."
172+
),
167173
sendAt: IterableDateTimeSchema.describe(
168174
"Scheduled send time (YYYY-MM-DD HH:MM:SS UTC)"
169175
),
@@ -188,8 +194,8 @@ export const CreateAndScheduleCampaignParamsSchema = z.object({
188194
.describe("Array of suppression list IDs"),
189195
});
190196

191-
export type CreateAndScheduleCampaignParams = z.infer<
192-
typeof CreateAndScheduleCampaignParamsSchema
197+
export type CreateBlastCampaignParams = z.input<
198+
typeof CreateBlastCampaignParamsSchema
193199
>;
194200

195201
// Create a triggered campaign

src/types/export.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ export const StartExportJobParamsSchema = z.object({
6060
"webPushSend",
6161
"webPushClick",
6262
"webPushSendSkip",
63+
"rcsSend",
64+
"rcsSendSkip",
6365
"emailSubscribe",
6466
"emailUnSubscribe",
6567
"purchase",

tests/integration/campaigns.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ describe("Campaign Management Integration Tests", () => {
3535
sendAt: string;
3636
}) => {
3737
const createResponse = await retryRateLimited(
38-
() => withTimeout(client.createAndScheduleCampaign(params)),
38+
() => withTimeout(client.createBlastCampaign(params)),
3939
`Create blast campaign: ${params.name}`
4040
);
4141
return createResponse.campaignId;

tests/unit/campaigns.test.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import {
1414
ArchiveCampaignsParamsSchema,
1515
CampaignDetailsSchema,
1616
CancelCampaignParamsSchema,
17-
CreateAndScheduleCampaignParamsSchema,
17+
CreateBlastCampaignParamsSchema,
1818
CreateTriggeredCampaignParamsSchema,
1919
DeactivateTriggeredCampaignParamsSchema,
2020
GetCampaignMetricsParamsSchema,
@@ -781,10 +781,10 @@ describe("Campaign Management", () => {
781781
).toThrow(); // invalid type
782782
});
783783

784-
it("should validate createAndScheduleCampaign parameters", () => {
784+
it("should validate createBlastCampaign parameters", () => {
785785
// Valid parameters - all required fields
786786
expect(() =>
787-
CreateAndScheduleCampaignParamsSchema.parse({
787+
CreateBlastCampaignParamsSchema.parse({
788788
name: "Test Campaign",
789789
templateId: 123,
790790
listIds: [456],
@@ -794,7 +794,7 @@ describe("Campaign Management", () => {
794794

795795
// Valid with optional fields
796796
expect(() =>
797-
CreateAndScheduleCampaignParamsSchema.parse({
797+
CreateBlastCampaignParamsSchema.parse({
798798
name: "Test Campaign",
799799
templateId: 123,
800800
listIds: [456, 789],
@@ -809,7 +809,7 @@ describe("Campaign Management", () => {
809809

810810
// Missing sendAt
811811
expect(() =>
812-
CreateAndScheduleCampaignParamsSchema.parse({
812+
CreateBlastCampaignParamsSchema.parse({
813813
name: "Test Campaign",
814814
templateId: 123,
815815
listIds: [456],
@@ -818,7 +818,7 @@ describe("Campaign Management", () => {
818818

819819
// Missing listIds
820820
expect(() =>
821-
CreateAndScheduleCampaignParamsSchema.parse({
821+
CreateBlastCampaignParamsSchema.parse({
822822
name: "Test Campaign",
823823
templateId: 123,
824824
sendAt: "2026-03-01 10:00:00",
@@ -827,7 +827,7 @@ describe("Campaign Management", () => {
827827

828828
// Empty listIds
829829
expect(() =>
830-
CreateAndScheduleCampaignParamsSchema.parse({
830+
CreateBlastCampaignParamsSchema.parse({
831831
name: "Test Campaign",
832832
templateId: 123,
833833
listIds: [],
@@ -837,7 +837,7 @@ describe("Campaign Management", () => {
837837

838838
// Missing name
839839
expect(() =>
840-
CreateAndScheduleCampaignParamsSchema.parse({
840+
CreateBlastCampaignParamsSchema.parse({
841841
templateId: 123,
842842
listIds: [456],
843843
sendAt: "2026-03-01 10:00:00",
@@ -846,7 +846,7 @@ describe("Campaign Management", () => {
846846

847847
// Missing templateId
848848
expect(() =>
849-
CreateAndScheduleCampaignParamsSchema.parse({
849+
CreateBlastCampaignParamsSchema.parse({
850850
name: "Test Campaign",
851851
listIds: [456],
852852
sendAt: "2026-03-01 10:00:00",
@@ -888,7 +888,7 @@ describe("Campaign Management", () => {
888888
});
889889
});
890890

891-
describe("createAndScheduleCampaign", () => {
891+
describe("createBlastCampaign", () => {
892892
it("should call campaigns/create endpoint with blast params", async () => {
893893
const mockResponse = { data: { campaignId: 12345 } };
894894
mockAxiosInstance.post.mockResolvedValue(mockResponse);
@@ -900,7 +900,7 @@ describe("Campaign Management", () => {
900900
sendAt: "2026-03-01 10:00:00",
901901
};
902902

903-
const result = await client.createAndScheduleCampaign(params);
903+
const result = await client.createBlastCampaign(params);
904904

905905
expect(mockAxiosInstance.post).toHaveBeenCalledWith(
906906
"/api/campaigns/create",

0 commit comments

Comments
 (0)