Proxy587 API
The Proxy587 API allows you to programmatically manage your proxies, create orders, extend subscriptions, and automate your proxy infrastructure. This documentation covers all available endpoints.
Base URL
https://proxy587.com/api/v1
API key + IP whitelist authentication
Instant order processing and proxy assignment
Standard JSON request/response format
Authentication
All API requests require authentication using an API key. Generate your API key in the Telegram Bot settings.
Security Requirements
-
1
API Key
Include your 64-character API key in the
Authorizationheader using Bearer token format. -
2
IP Whitelist
Requests are only accepted from whitelisted IP addresses (max 3 IPs). Configure in the bot settings.
Example Request
curl -X GET "https://proxy587.com/api/v1/balance" \
-H "Authorization: Bearer your-64-character-api-key-here"
Rate Limits
API requests are rate limited to ensure fair usage and system stability:
| Endpoint Type | Rate Limit | Description |
|---|---|---|
GET endpoints |
100 req/min | Balance, formats, countries, proxies list |
POST orders |
10 req/min | Order creation |
POST replacement |
5 req/min | Replacement requests |
POST proxies/parent/rotate |
10 req/min | Parent rotation (intended for non-working originals) |
Errors
The API uses standard HTTP status codes and returns JSON error responses. All responses include a status field.
| Code | Status | Description |
|---|---|---|
200 |
OK | Request successful |
400 |
Bad Request | Invalid parameters or malformed request |
401 |
Unauthorized | Invalid or missing API key |
402 |
Payment Required | Insufficient balance |
403 |
Forbidden | IP not in whitelist or feature not enabled |
404 |
Not Found | Resource doesn't exist |
429 |
Rate Limit | Too many requests, slow down |
Error Response Format
{
"status": "error",
"data": {},
"errors": ["Invalid API key"]
}
/balance
Get your current account balance.
Response Fields
| Field | Type | Description |
|---|---|---|
balance | string | Current balance amount (e.g., "125.50") |
currency | string | Currency code (always "USD") |
Example Request
curl -X GET "https://proxy587.com/api/v1/balance" \
-H "Authorization: Bearer your-api-key"
Example Response 200 OK
{
"status": "success",
"data": {
"balance": "125.50",
"currency": "USD"
},
"errors": []
}
/formats
Get available proxy formats (IPv4, ISP, IPv6, Mobile).
Response Fields
| Field | Type | Description |
|---|---|---|
formats | array | List of available proxy formats |
formats[].id | integer | Format ID (use in other endpoints) |
formats[].name | string | Human-readable format name |
formats[].code | string | Format code: ipv4, isp, ipv6, mobile |
Example Request
curl -X GET "https://proxy587.com/api/v1/formats" \
-H "Authorization: Bearer your-api-key"
Example Response 200 OK
{
"status": "success",
"data": {
"formats": [
{"id": 1, "name": "IPv4", "code": "ipv4"},
{"id": 2, "name": "ISP", "code": "isp"},
{"id": 3, "name": "IPv6", "code": "ipv6"},
{"id": 4, "name": "Mobile", "code": "mobile"}
]
},
"errors": []
}
/countries
Get available countries for proxy orders.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
format_id | integer | Optional | Filter by proxy format ID |
Response Fields
| Field | Type | Description |
|---|---|---|
countries | array | List of available countries |
countries[].id | integer | Country ID (use in orders) |
countries[].name | string | Country name |
countries[].code | string | ISO country code (US, DE, etc.) |
countries[].format_id | integer | Associated proxy format ID |
Example Request
curl -X GET "https://proxy587.com/api/v1/countries?format_id=1" \
-H "Authorization: Bearer your-api-key"
Example Response 200 OK
{
"status": "success",
"data": {
"countries": [
{"id": 1, "name": "United States", "code": "US", "format_id": 1},
{"id": 2, "name": "Germany", "code": "DE", "format_id": 1},
{"id": 3, "name": "Netherlands", "code": "NL", "format_id": 1}
]
},
"errors": []
}
/durations
Get available rental durations.
Response Fields
| Field | Type | Description |
|---|---|---|
durations | array | List of available durations |
durations[].days | integer | Number of days (7, 14, 30, 60, 90) |
durations[].label | string | Human-readable label |
Example Request
curl -X GET "https://proxy587.com/api/v1/durations" \
-H "Authorization: Bearer your-api-key"
Example Response 200 OK
{
"status": "success",
"data": {
"durations": [
{"days": 7, "label": "7 days"},
{"days": 14, "label": "14 days"},
{"days": 30, "label": "30 days"},
{"days": 60, "label": "60 days"},
{"days": 90, "label": "90 days"}
]
},
"errors": []
}
/pricing
Calculate order price. Also accepts POST with JSON body.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
format_id | integer | Required | Proxy format ID |
country_id | integer | Required | Country ID |
duration | integer | Required | Duration in days (7, 14, 30, 60, 90) |
quantity | integer | Required | Number of proxies (1-1000) |
Response Fields
| Field | Type | Description |
|---|---|---|
price_per_proxy | string | Price per single proxy |
total_price | string | Final total after discounts |
original_price | string | Price before discounts |
quantity_discount_percent | string | Discount percentage applied |
currency | string | Currency code (USD) |
Example Request
curl -X GET "https://proxy587.com/api/v1/pricing?format_id=1&country_id=1&duration=30&quantity=10" \
-H "Authorization: Bearer your-api-key"
Example Response 200 OK
{
"status": "success",
"data": {
"price_per_proxy": "2.50",
"total_price": "22.50",
"original_price": "25.00",
"quantity_discount_percent": "10",
"currency": "USD"
},
"errors": []
}
/subnets
Get available subnets for a country and format. Only available for IPv4 and ISP formats.
Note: Subnet selection must be enabled for your account. Not available for IPv6 and Mobile formats.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
format_id | integer | Required | Proxy format ID |
country_id | integer | Required | Country ID |
Response Fields
| Field | Type | Description |
|---|---|---|
subnets | array | List of available subnets |
subnets[].subnet | string | Subnet prefix (e.g., "192.168.1") |
Example Request
curl -X GET "https://proxy587.com/api/v1/subnets?format_id=1&country_id=1" \
-H "Authorization: Bearer your-api-key"
Example Response 200 OK
{
"status": "success",
"data": {
"subnets": [
{"subnet": "192.168.1"},
{"subnet": "10.0.0"},
{"subnet": "172.16.0"}
]
},
"errors": []
}
/rotation-types
Get available rotation types for mobile proxies in a specific country.
Note: This endpoint is only applicable to countries that support mobile proxy format.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
country_id | integer | Required | Country ID with mobile proxy support |
Response Fields
| Field | Type | Description |
|---|---|---|
rotation_types | array | List of available rotation types |
rotation_types[].value | string | Rotation type code (sticky, 5min, 30min) |
rotation_types[].label | string | Human-readable label |
Example Request
curl -X GET "https://proxy587.com/api/v1/rotation-types?country_id=5" \
-H "Authorization: Bearer your-api-key"
Example Response 200 OK
{
"status": "success",
"data": {
"rotation_types": [
{"value": "sticky", "label": "Sticky (no rotation)"},
{"value": "5min", "label": "Rotation every 5 minutes"},
{"value": "30min", "label": "Rotation every 30 minutes"}
]
},
"errors": []
}
/mobile-operators
Get available mobile operators for a specific country and optionally filter by rotation type.
Note: This endpoint is only applicable to countries that support mobile proxy format. Filter by rotation_type to see which operators are available for specific rotation types.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
country_id | integer | Required | Country ID with mobile proxy support |
rotation_type | string | Optional | Filter operators by rotation type (sticky, 5min, 30min) |
Response Fields
| Field | Type | Description |
|---|---|---|
operators | array | List of available mobile operators |
operators[].value | string | Operator code (e.g., orange, sfr, vodafone) |
operators[].label | string | Human-readable operator name |
Example Request
curl -X GET "https://proxy587.com/api/v1/mobile-operators?country_id=5&rotation_type=sticky" \
-H "Authorization: Bearer your-api-key"
Example Response 200 OK
{
"status": "success",
"data": {
"operators": [
{"value": "orange", "label": "Orange"},
{"value": "sfr", "label": "SFR"},
{"value": "vodafone", "label": "Vodafone"}
]
},
"errors": []
}
/orders
Get your orders list with filtering options.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | Optional | Filter: active, expired, all (default: active) |
Response Fields
| Field | Type | Description |
|---|---|---|
orders | array | List of orders |
orders[].order_id | integer | Order ID |
orders[].format | string | Proxy format code |
orders[].country | string | Country code |
orders[].quantity | integer | Number of proxies |
orders[].duration_days | integer | Duration in days |
orders[].created_at | string | Creation date (ISO 8601) |
orders[].expires_at | string | Expiration date (ISO 8601) |
orders[].status | string | Order status: active, expired |
total | integer | Total number of orders |
Example Request
curl -X GET "https://proxy587.com/api/v1/orders?status=active" \
-H "Authorization: Bearer your-api-key"
Example Response 200 OK
{
"status": "success",
"data": {
"orders": [
{
"order_id": 12345,
"format": "ipv4",
"country": "US",
"quantity": 10,
"duration_days": 30,
"created_at": "2025-11-28T12:00:00Z",
"expires_at": "2025-12-28T12:00:00Z",
"status": "active"
}
],
"total": 1
},
"errors": []
}
/orders/create
Create a new proxy order. Payment is deducted from your balance.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
format_id | integer | Required | Proxy format ID |
country_id | integer | Required | Country ID |
duration | integer | Required | Duration in days (7, 14, 30, 60, 90) |
quantity | integer | Required | Number of proxies (1-1000) |
subnets | array | Optional | Preferred subnet prefixes (IPv4/ISP only) |
mobile_rotation_type | string | Required* | Rotation type for mobile proxies (sticky, 5min, 30min). *Required for mobile orders only. |
mobile_operator | string | Required* | Mobile operator (e.g., orange, sfr, vodafone, or 'any'). *Required for mobile orders only. |
allowed_ip | string | Optional | IP for IP-based authorization |
promo_code | string | Optional | Promo code for discount (not available with custom pricing) |
universal_login | string | Optional | Universal login for all proxies (3-32 chars, alphanumeric) |
universal_password | string | Optional | Universal password for all proxies (6-64 chars) |
extra_credentials_count | integer | Optional | Extra credential pairs per proxy (0-50) |
Response Fields
| Field | Type | Description |
|---|---|---|
order_id | string | Created order ID |
total_price | string | Amount charged |
payment_status | string | Payment status (paid) |
proxies_count | integer | Number of assigned proxies |
promo_discount_percent | string | Promo discount applied (if any) |
quantity_discount_percent | string | Quantity discount applied (if any) |
extra_credentials_created | integer | Number of extra credentials created |
Example Request
curl -X POST "https://proxy587.com/api/v1/orders/create" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"format_id": 1,
"country_id": 1,
"quantity": 10,
"duration": 30,
"promo_code": "DISCOUNT10",
"universal_login": "mylogin",
"universal_password": "mypassword123",
"extra_credentials_count": 2
}'
Example Response 200 OK
{
"status": "success",
"data": {
"order_id": "ORD-20251129-ABCD",
"total_price": "20.25",
"payment_status": "paid",
"proxies_count": 10,
"promo_discount_percent": "10.00",
"quantity_discount_percent": "0",
"extra_credentials_created": 20
},
"errors": []
}
/orders/{order_id}
Get detailed information about a specific order.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
order_id | string | Required | Order ID (e.g., ORD-20251129-ABCD) |
Response Fields
| Field | Type | Description |
|---|---|---|
order_id | string | Order ID |
format | string | Proxy format (ipv4, isp, ipv6, mobile) |
country | string | Country code |
quantity | integer | Ordered quantity |
duration_days | integer | Duration in days |
price | string | Final price paid |
created_at | string | Creation date (ISO 8601) |
expires_at | string | Expiration date (ISO 8601) |
status | string | Order status: active, expired |
payment_status | string | Payment status: paid, unpaid |
allowed_ip | string|null | Whitelisted IP for authorization |
has_universal_credentials | boolean | Whether universal credentials are set |
proxies_count | integer | Total proxies in order |
active_proxies_count | integer | Currently active proxies |
extra_credentials_count | integer | Number of extra credential pairs |
Example Request
curl -X GET "https://proxy587.com/api/v1/orders/ORD-20251129-ABCD" \
-H "Authorization: Bearer your-api-key"
Example Response 200 OK
{
"status": "success",
"data": {
"order_id": "ORD-20251129-ABCD",
"format": "ipv4",
"country": "US",
"quantity": 10,
"duration_days": 30,
"price": "20.25",
"created_at": "2025-11-29T12:00:00Z",
"expires_at": "2025-12-29T12:00:00Z",
"status": "active",
"payment_status": "paid",
"allowed_ip": null,
"has_universal_credentials": true,
"proxies_count": 10,
"active_proxies_count": 10,
"extra_credentials_count": 20
},
"errors": []
}
/proxies
Get your active proxies with connection details.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
order_id | integer | Optional | Filter by order ID |
format | string | Optional | Filter: ipv4, isp, ipv6, mobile |
country | string | Optional | Filter by country code (US, DE) |
protocol | string | Optional | http or socks5 (default: http) |
output_format | string | Optional | Custom format: {ip}:{port}:{login}:{password} |
Response Fields
| Field | Type | Description |
|---|---|---|
proxies | array | List of proxies |
proxies[].order_id | integer | Associated order ID |
proxies[].ip | string | Proxy IP (only for IPv4/ISP) |
proxies[].host | string | Connection host (IP or domain) |
proxies[].port_http | integer | HTTP port |
proxies[].port_socks5 | integer | SOCKS5 port |
proxies[].login | string | Username for authentication |
proxies[].password | string | Password for authentication |
proxies[].expires_at | string | Expiration date (ISO 8601) |
proxies[].country | string | Country code |
proxies[].format | string | Format code |
total | integer | Total number of proxies |
Example Request
curl -X GET "https://proxy587.com/api/v1/proxies?order_id=12345" \
-H "Authorization: Bearer your-api-key"
Example Response 200 OK
{
"status": "success",
"data": {
"proxies": [
{
"order_id": 12345,
"ip": "185.10.20.30",
"host": "185.10.20.30",
"port_http": 8080,
"port_socks5": 23080,
"login": "user123",
"password": "pass456",
"expires_at": "2025-12-28T12:00:00Z",
"country": "US",
"format": "ipv4"
}
],
"total": 1
},
"errors": []
}
/proxies/extend
Extend the rental period of existing proxies. Payment deducted from balance.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
order_id | integer | Optional* | Extend all proxies in order |
proxy_ips | array | Optional* | Extend specific proxies by IP |
duration | integer | Required | Additional days (7, 14, 30, 60, 90) |
* Either order_id or proxy_ips is required.
Response Fields
| Field | Type | Description |
|---|---|---|
extended_count | integer | Number of extended proxies |
total_price | string | Amount charged |
new_expiry | string | New expiration date (ISO 8601) |
Example Request
curl -X POST "https://proxy587.com/api/v1/proxies/extend" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"order_id": 12345,
"duration": 30
}'
Example Response 200 OK
{
"status": "success",
"data": {
"extended_count": 10,
"total_price": "25.00",
"new_expiry": "2026-01-28T12:00:00Z"
},
"errors": []
}
/replacement
Submit a replacement request for non-working proxies.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
proxy_ips | array | Required | Array of proxy IPs to replace |
reason | string | Required | Reason for replacement |
selected_subnets | array | Optional | Preferred subnets (if enabled) |
Response Fields
| Field | Type | Description |
|---|---|---|
request_id | integer | Replacement request ID |
proxies_count | integer | Number of proxies submitted |
status | string | pending or completed |
Example Request
curl -X POST "https://proxy587.com/api/v1/replacement" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"proxy_ips": ["185.10.20.30", "185.10.20.31"],
"reason": "Proxies not working for target site"
}'
Example Response 200 OK
{
"status": "success",
"data": {
"request_id": 789,
"proxies_count": 2,
"status": "pending"
},
"errors": []
}
/proxies/parent/rotate
Rotate the upstream parent of one or more proxies to a random replacement of the same country and format. The original parent is re-tested at +1h, +6h, +12h, +24h, +72h, +168h and automatically restored if it recovers.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
proxy_ips | array<string> | Required | One or more proxy IPs from your account to rotate. proxy_ip (string) is also accepted for a single IP. |
Response Fields
| Field | Type | Description |
|---|---|---|
rotated | array | List of successful rotations. Each entry contains rotation_id, proxy_ip, status, schedule_hours, next_test_at (ISO 8601 UTC). |
errors | array | List of per-IP failures: {"proxy_ip", "error"}. Possible errors: not found or not active, proxy is shared with other clients, rotation refused, no replacement parent available for same country+format. |
schedule_hours | array<int> | Probe schedule used by the system: [1, 6, 12, 24, 72, 168]. |
Example Request
curl -X POST "https://proxy587.com/api/v1/proxies/parent/rotate" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"proxy_ips": ["185.10.20.30"]
}'
Example Response 200 OK
{
"status": "success",
"data": {
"rotated": [
{
"rotation_id": "ROT-20260529-AB12",
"proxy_ip": "185.10.20.30",
"status": "active",
"test_index": 0,
"schedule_hours": [1, 6, 12, 24, 72, 168],
"next_test_at": "2026-05-29T23:45:00+00:00",
"last_tested_at": null,
"last_test_result": {},
"created_at": "2026-05-29T22:45:00+00:00",
"restored_at": null,
"expired_at": null
}
],
"errors": [],
"schedule_hours": [1, 6, 12, 24, 72, 168]
},
"errors": []
}
/proxies/parent/rotations
List your parent rotation requests (most recent first).
Query Parameters
| Parameter | Type | Description |
|---|---|---|
status | string | Filter by status: active, restored, expired, failed. |
proxy_ip | string | Filter by current proxy IP. |
limit | integer | Default 50, max 200. |
/proxies/parent/rotations/<rotation_id>
Return the current state of a single rotation request.
Status Values
| Status | Meaning |
|---|---|
active | System is still probing the original parent on schedule. |
restored | Original parent recovered and was automatically restored. |
expired | All 6 probes failed within 7 days; proxy stays on the rotated parent. |
failed | Rotation could not be completed (rare; reserved for system errors). |
Example
curl "https://proxy587.com/api/v1/proxies/parent/rotations?status=active&limit=20" \
-H "Authorization: Bearer your-api-key"
/orders/credentials
Set or remove universal login/password credentials for an order.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
order_id | integer | Required | Order ID |
login | string|null | Required | Username (3-32 chars, alphanumeric) |
password | string|null | Required | Password (6-64 chars) |
Set both login and password to null to remove credentials.
Response Fields
| Field | Type | Description |
|---|---|---|
order_id | integer | Order ID |
credentials_set | boolean | Whether credentials are now set |
Example Request
curl -X POST "https://proxy587.com/api/v1/orders/credentials" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"order_id": 12345,
"login": "mylogin",
"password": "mypassword123"
}'
Example Response 200 OK
{
"status": "success",
"data": {
"order_id": 12345,
"credentials_set": true
},
"errors": []
}
/orders/ip-auth
Set or update IP-based authorization for an order (no login/password needed).
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
order_id | integer | Required | Order ID |
allowed_ip | string|null | Required | Public IP to whitelist (or null to remove) |
Response Fields
| Field | Type | Description |
|---|---|---|
order_id | integer | Order ID |
allowed_ip | string|null | The whitelisted IP (or null if removed) |
Example Request
curl -X POST "https://proxy587.com/api/v1/orders/ip-auth" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"order_id": 12345,
"allowed_ip": "203.0.113.50"
}'
Example Response 200 OK
{
"status": "success",
"data": {
"order_id": 12345,
"allowed_ip": "203.0.113.50"
},
"errors": []
}
/orders/{order_id}/credentials
Get all extra credential pairs for proxies in an order. Extra credentials allow multiple users or services to use the same proxy simultaneously.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
order_id | string | Required | Order ID |
Response Fields
| Field | Type | Description |
|---|---|---|
order_id | string | Order ID |
credentials | array | List of extra credentials |
credentials[].id | integer | Credential ID |
credentials[].order_id | string | Order ID |
credentials[].proxy_ip | string | Associated proxy IP |
credentials[].username | string | Extra username |
credentials[].password | string | Extra password |
credentials[].label | string | Optional label |
credentials[].created_at | string | Creation date (ISO 8601) |
total | integer | Total number of credentials |
Example Request
curl -X GET "https://proxy587.com/api/v1/orders/ORD-20251129-ABCD/credentials" \
-H "Authorization: Bearer your-api-key"
Example Response 200 OK
{
"status": "success",
"data": {
"order_id": "ORD-20251129-ABCD",
"credentials": [
{
"id": 1,
"order_id": "ORD-20251129-ABCD",
"proxy_ip": "185.10.20.30",
"username": "extra_user1",
"password": "extra_pass1",
"label": "Worker 1",
"created_at": "2025-11-29T12:00:00Z"
}
],
"total": 1
},
"errors": []
}
/orders/extra-credentials
Add extra credential pairs to proxies in an order.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
order_id | string | Required | Order ID |
count | integer | Required | Number of credentials per proxy (1-50) |
proxy_ips | array | Optional* | Specific proxy IPs to add credentials to |
all_proxies | boolean | Optional* | Add credentials to all proxies in order |
label_prefix | string | Optional | Label prefix for credentials (max 50 chars) |
* Either proxy_ips or all_proxies must be provided.
Response Fields
| Field | Type | Description |
|---|---|---|
order_id | string | Order ID |
created_count | integer | Number of credentials created |
credentials | array | List of created credentials |
Example Request
curl -X POST "https://proxy587.com/api/v1/orders/extra-credentials" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"order_id": "ORD-20251129-ABCD",
"all_proxies": true,
"count": 2,
"label_prefix": "Worker"
}'
Example Response 200 OK
{
"status": "success",
"data": {
"order_id": "ORD-20251129-ABCD",
"created_count": 20,
"credentials": [
{
"id": 1,
"proxy_ip": "185.10.20.30",
"username": "extra_abc123",
"password": "pass_xyz789",
"label": "Worker 1"
}
]
},
"errors": []
}
/orders/extra-credentials/delete
Delete extra credentials from an order. Can delete specific credentials, all for certain proxies, or all for the order.
Request Body
| Parameter | Type | Required | Description |
|---|---|---|---|
order_id | string | Required | Order ID |
credential_ids | array | Optional* | Specific credential IDs to delete |
proxy_ips | array | Optional* | Delete all credentials for these proxies |
all | boolean | Optional* | Delete all extra credentials for the order |
* At least one of credential_ids, proxy_ips, or all must be provided.
Response Fields
| Field | Type | Description |
|---|---|---|
order_id | string | Order ID |
deleted_count | integer | Number of credentials deleted |
Example Request
curl -X POST "https://proxy587.com/api/v1/orders/extra-credentials/delete" \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"order_id": "ORD-20251129-ABCD",
"credential_ids": [1, 2, 3]
}'
Example Response 200 OK
{
"status": "success",
"data": {
"order_id": "ORD-20251129-ABCD",
"deleted_count": 3
},
"errors": []
}