Delete campaign step
This endpoint lets you delete a campaign step. You can delete EMAIL
steps that haven't processed any prospects and are not the first EMAIL
step. Once a step is deleted, it cannot be restored.
Only campaigns with a status of DRAFT
or EDITED
can be updated. To change the campaign status to EDITED
use the /make_editable endpoint.
Request
Endpoint
DELETE https://api.woodpecker.co/rest/v2/campaigns/{campaign_id}/steps/{step_id}
You can fetch the step_id
using the GET /campaigns structure endpoint.
Headers
x-api-key: {YOUR_API_KEY}
For details on how to authenticate your requests, please see the authentication guide.
Request sample
Delete a campaign step
- cURL
- Java
- Node.js
curl --request DELETE \
--url "https://api.woodpecker.co/rest/v2/campaigns/{campaign_id}/steps/{step_id}" \
--header "x-api-key: {YOUR_API_KEY}"
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.io.IOException;
public class WoodpeckerApiClient {
public static void main(String[] args) {
HttpClient client = HttpClient.newHttpClient();
long campaignId = 12345;
String stepId = "ID_OF_STEP_TO_EDIT";
String apiKey = "YOUR_API_KEY";
String url = "https://api.woodpecker.co/rest/v2/campaigns/" + campaignId + "/steps/" + stepId;
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("x-api-key", apiKey)
.DELETE()
.build();
try {
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Response Code: " + response.statusCode());
System.out.println("Response Body: " + response.body());
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
const deleteStep = async (campaignId, stepId, apiKey) => {
const url = `https://api.woodpecker.co/rest/v2/campaigns/${campaignId}/steps/${stepId}`;
const response = await fetch(url, {
method: "DELETE",
headers: {
"x-api-key": apiKey,
},
});
if (!response.ok) {
throw new Error(`Request failed with status ${response.status}`);
}
return await response.json();
};
(async () => {
try {
const campaignId = 12345;
const stepId = "ID_OF_STEP_TO_EDIT";
const apiKey = "YOUR_API_KEY";
const result = await deleteStep(campaignId, stepId, apiKey);
console.log("Success:", result);
} catch (error) {
console.error("Error:", error.message);
}
})();
Response
Response examples
- 200
- 401
- 404
- 409
- 500
The campaign has been deleted. A full campaign payload will be returned.
An issue with authorization. Please review the authorization guide
{
"title": "Unauthorized",
"status": 401,
"detail": "Invalid api key",
"timestamp": "2025-03-05 17:57:00"
}
Body schema
Field | Type | Description |
---|---|---|
title | string | A short title describing the error |
status | integer | The HTTP status code |
detail | string | A detailed message explaining the error |
timestamp | string | The timestamp when the error occurred, YYYY-MM-DD HH:MM:SS UTC |
The requested campaign or step doesn't exist.
{
"code": "CAMPAIGN_NOT_EXIST" | "BRANCH_NOT_FOUND",
"message": "Campaign not found" | "Step not found",
"details": null
}
Body schema
Field | Type | Description |
---|---|---|
code | string | Error code |
message | string | Descriptive error message |
details | string/null | Additional information. Currently always null |
The step has already processed some prospects, is the first EMAIL
step, is a START
step, or the campaign is in a status that prohibits edits.
{
"code": "BRANCH_NOT_DELETABLE" | "NOT_EDITABLE_STATUS",
"message": "Step is not allowed to be deleted" | "The campaign must be in DRAFT or EDITED status to be updated",
"details": null
}
Body schema
Field | Type | Description |
---|---|---|
code | string | Error code |
message | string | Descriptive error message |
details | string/null | Additional information. Currently always null |
An unknown error while deleting the campaign. Please try again later.
{
"type": "UNKNOWN",
"message": "Unknown error during delete campaign step call",
"details": null
}
Body schema
Field | Type | Description |
---|---|---|
code | string | Error code |
message | string | Descriptive error message |
details | string/null | Additional information. Currently always null |