Bulk delete schedules
Permanently delete one or multiple charge schedules in a single request. Deleted schedules will not execute any future occurrences and cannot be restored. Past occurrences and their associated charges are preserved for historical records.
Request Parametersโ
Required - 1 fieldRequired Parameters
`schedule_ids`ARRAY(required)
Array of schedule IDs to delete. Each ID must start with schd_. Maximum 100 IDs per request.
Responsesโ
200
Schedules deletedReturns a summary of the bulk delete operation with details for each schedule.
Response includes:
object- Always "bulk_operation"operation- "delete"total_count- Total number of schedule IDs providedsuccessful_count- Number of schedules successfully deletedfailed_count- Number of schedules that failed to deleteresults- Array of result objects for each schedule
schedule_id- The schedule IDstatus- "success" or "failed"schedule- Deleted schedule object with deleted=true (if successful)error_code- Error code (if failed)error_message- Error description (if failed)
- Deletion is permanent and cannot be undone
- Past charges created by deleted schedules are not affected
- Any pending occurrences scheduled for today may still execute
400
Bad requestRequest validation failed. Check the error message for details.
Common causes:
- Missing schedule_ids parameter
- schedule_ids is not an array
- Empty schedule_ids array
- More than 100 schedule IDs provided
- Invalid schedule ID format
401
UnauthorizedAuthentication failed. Invalid or missing API key.
Common causes:
- Missing Authorization header
- Invalid secret key
- Using public key instead of secret key
- Incorrect HTTP Basic Auth format
404
Not foundEndpoint not found or feature not enabled.
Common causes:
- Bulk operations feature not enabled for account
- Incorrect API endpoint URL
5xx
Server errorServer-side error occurred. These are rare but should be handled gracefully.
How to handle:
- Retry the request with exponential backoff
- Check status.omise.co for service incidents
- See Error Handling for detailed guidance
Code samplesโ
- cURL
- Ruby
- Python
- Node.js
- PHP
- Java
- C#
- Go
# Delete multiple schedules
curl https://api.omise.co/schedules/bulk_delete \
-X DELETE \
-u skey_test_5xuy4w91xqz7d1w9u0t: \
-H "Content-Type: application/json" \
-d '{
"schedule_ids": [
"schd_test_5xuy4w91xqz7d1w9u0t",
"schd_test_5xuy4w91xqz7d1w9u0s",
"schd_test_5xuy4w91xqz7d1w9u0r"
]
}'
require 'omise'
require 'net/http'
require 'uri'
require 'json'
Omise.api_key = 'skey_test_5xuy4w91xqz7d1w9u0t'
schedule_ids = [
'schd_test_5xuy4w91xqz7d1w9u0t',
'schd_test_5xuy4w91xqz7d1w9u0s',
'schd_test_5xuy4w91xqz7d1w9u0r'
]
uri = URI('https://api.omise.co/schedules/bulk_delete')
request = Net::HTTP::Delete.new(uri)
request.basic_auth(Omise.api_key, '')
request['Content-Type'] = 'application/json'
request.body = { schedule_ids: schedule_ids }.to_json
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
result = JSON.parse(response.body)
puts "Deleted: #{result['successful_count']} / #{result['total_count']}"
import omise
import requests
omise.api_secret = 'skey_test_5xuy4w91xqz7d1w9u0t'
schedule_ids = [
'schd_test_5xuy4w91xqz7d1w9u0t',
'schd_test_5xuy4w91xqz7d1w9u0s',
'schd_test_5xuy4w91xqz7d1w9u0r'
]
response = requests.delete(
'https://api.omise.co/schedules/bulk_delete',
auth=(omise.api_secret, ''),
json={'schedule_ids': schedule_ids}
)
result = response.json()
print(f"Deleted: {result['successful_count']} / {result['total_count']}")
# Check for any failures
for item in result['results']:
if item['status'] == 'failed':
print(f"Failed: {item['schedule_id']} - {item['error_message']}")
const omise = require('omise')({
secretKey: 'skey_test_5xuy4w91xqz7d1w9u0t'
});
const axios = require('axios');
const scheduleIds = [
'schd_test_5xuy4w91xqz7d1w9u0t',
'schd_test_5xuy4w91xqz7d1w9u0s',
'schd_test_5xuy4w91xqz7d1w9u0r'
];
const response = await axios.delete(
'https://api.omise.co/schedules/bulk_delete',
{
auth: {
username: 'skey_test_5xuy4w91xqz7d1w9u0t',
password: ''
},
data: { schedule_ids: scheduleIds }
}
);
console.log(`Deleted: ${response.data.successful_count} / ${response.data.total_count}`);
// Check for any failures
response.data.results.forEach(item => {
if (item.status === 'failed') {
console.log(`Failed: ${item.schedule_id} - ${item.error_message}`);
}
});
<?php
define('OMISE_SECRET_KEY', 'skey_test_5xuy4w91xqz7d1w9u0t');
$schedule_ids = [
'schd_test_5xuy4w91xqz7d1w9u0t',
'schd_test_5xuy4w91xqz7d1w9u0s',
'schd_test_5xuy4w91xqz7d1w9u0r'
];
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => 'https://api.omise.co/schedules/bulk_delete',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => 'DELETE',
CURLOPT_USERPWD => OMISE_SECRET_KEY . ':',
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['schedule_ids' => $schedule_ids])
]);
$response = curl_exec($curl);
curl_close($curl);
$result = json_decode($response, true);
echo "Deleted: {$result['successful_count']} / {$result['total_count']}\n";
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Base64;
HttpClient client = HttpClient.newHttpClient();
String auth = Base64.getEncoder().encodeToString("skey_test_5xuy4w91xqz7d1w9u0t:".getBytes());
String jsonBody = """
{
"schedule_ids": [
"schd_test_5xuy4w91xqz7d1w9u0t",
"schd_test_5xuy4w91xqz7d1w9u0s",
"schd_test_5xuy4w91xqz7d1w9u0r"
]
}
""";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.omise.co/schedules/bulk_delete"))
.header("Authorization", "Basic " + auth)
.header("Content-Type", "application/json")
.method("DELETE", HttpRequest.BodyPublishers.ofString(jsonBody))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
var client = new HttpClient();
var credentials = Convert.ToBase64String(
Encoding.ASCII.GetBytes("skey_test_5xuy4w91xqz7d1w9u0t:")
);
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic", credentials);
var scheduleIds = new[] {
"schd_test_5xuy4w91xqz7d1w9u0t",
"schd_test_5xuy4w91xqz7d1w9u0s",
"schd_test_5xuy4w91xqz7d1w9u0r"
};
var content = new StringContent(
JsonSerializer.Serialize(new { schedule_ids = scheduleIds }),
Encoding.UTF8,
"application/json"
);
var request = new HttpRequestMessage(HttpMethod.Delete,
"https://api.omise.co/schedules/bulk_delete")
{
Content = content
};
var response = await client.SendAsync(request);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
scheduleIds := []string{
"schd_test_5xuy4w91xqz7d1w9u0t",
"schd_test_5xuy4w91xqz7d1w9u0s",
"schd_test_5xuy4w91xqz7d1w9u0r",
}
body, _ := json.Marshal(map[string][]string{
"schedule_ids": scheduleIds,
})
req, _ := http.NewRequest("DELETE",
"https://api.omise.co/schedules/bulk_delete",
bytes.NewBuffer(body))
req.SetBasicAuth("skey_test_5xuy4w91xqz7d1w9u0t", "")
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
fmt.Printf("Deleted: %.0f / %.0f\n",
result["successful_count"], result["total_count"])
}
Error and result codesโ
Common Error Codesโ
| Code | Description | Resolution |
|---|---|---|
authentication_failure | Invalid API key | Verify your secret key is correct |
invalid_schedule_ids | Invalid or missing schedule_ids | Provide valid array of schedule IDs |
too_many_ids | More than 100 IDs provided | Split into multiple requests |
Per-Schedule Error Codesโ
| Code | Description | Resolution |
|---|---|---|
schedule_not_found | Schedule ID does not exist | Verify schedule ID is correct |
schedule_already_deleted | Schedule was already deleted | No action needed |
Schedule Status After Deletionโ
| Field | Value |
|---|---|
status | deleted |
deleted | true |
deleted_at | Timestamp of deletion |
API Credentials
Try it outโ
Required - 1 fields
Your IP:
...Loading...