PERFORMANCE & RELIABILITYLimits & Deduplication

Rate Limits & Idempotency

To ensure consistent low-latency delivery, equitable resource sharing, and protection against accidental loops or DDoS attacks, Softymize enforces sliding-window rate limits across all API endpoints. In addition, our 24-hour distributed Idempotency caching guarantees that duplicated requests produce zero duplicate messages or charges.

Tiered Plan Rate Limits

Rate limits are evaluated per workspace across sliding 60-second windows based on your active billing plan:

Plan TierRequests per MinuteBurst AllowanceBehavior on Limit Exceeded
Starter Plan60 req / minUp to 15 req/secHTTP 429 Too Many Requests
Pro Plan300 req / minUp to 50 req/secHTTP 429 Too Many Requests
Business Plan1,000 req / minUp to 150 req/secHTTP 429 Too Many Requests
Enterprise Plan5,000+ req / minCustom SLA (500+ req/sec)Dedicated Redis Isolated Queue

Standard Rate Limit Response Headers

Every HTTP response from the Softymize gateway includes standard RFC headers reflecting your current quota usage in real time:

HeaderExample ValueDescription
X-RateLimit-Limit300The maximum number of requests allowed within your current 60-second window.
X-RateLimit-Remaining284The number of remaining requests available before hitting the rate limit.
X-RateLimit-Reset1729189260Unix timestamp indicating when the current sliding window will reset.
Retry-After14Returned on HTTP 429 responses. Number of seconds your client must sleep before retrying.
Sample HTTP Response HeadersHTTP
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
X-RateLimit-Limit: 300
X-RateLimit-Remaining: 284
X-RateLimit-Reset: 1729189260
X-Request-Id: req_9f8a3c4b12d34e5f

HTTP 429 Too Many Requests Envelope

If your client exceeds your plan's request limit, the gateway rejects the request with HTTP status 429 Too Many Requests and provides the exact wait duration:

HTTP 429 Rate Limit PayloadJSON
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests. You have reached your rate limit of 300 requests per minute.",
"retry_after": 14,
"limit": 300,
"doc_url": "https://docs.softymize.com/api-docs/rate-limits"
},
"meta": {
"request_id": "req_8a1b2c3d4e5f6g7h",
"timestamp": "2026-10-17T18:55:00Z"
}
}

24-Hour Idempotency Key Deduplication

Network glitches, mobile drops, or client timeouts can trigger automated retries. Without idempotency, a customer could receive duplicate WhatsApp order confirmations or multiple OTP messages. Softymize supports the X-Idempotency-Key header to guarantee safe retries.

1Send Unique Key

Include an X-Idempotency-Key header with a unique UUID or transaction slug on sensitive POST requests.

2Redis Distributed Cache

Softymize atomically locks and stores the initial response payload and status in our Redis cluster with a 24-hour TTL.

3Zero Duplicate Execution

Any retry using the same idempotency key returns the original cached response immediately without re-dispatching messages.

Sending with X-Idempotency-KeycURL
curl -X POST https://api.softymize.com/api/v1/whatsapp/send \
-H "X-Softymize-API-Key: sft_live_9b8a7c6d5e4f3a2b1" \
-H "X-Idempotency-Key: ord_tx_88219_checkout" \
-H "Content-Type: application/json" \
-d '{
"to": "+919876543210",
"template_name": "order_confirmation_v2",
"variables": {
"customer_name": "Rahul Sharma",
"order_id": "ORD-88219",
"amount": "₹2,499.00"
}
}'

Channel-Specific Quotas & Meta / AWS Limits

In addition to Softymize workspace API limits, each outbound channel has upstream platform limits:

WhatsApp Cloud API
  • Tier 1: 1,000 unique customers / 24h
  • Tier 2: 10,000 unique customers / 24h
  • Tier 3: 100,000 unique customers / 24h
  • Tier 4: Unlimited customer messaging
AWS SES Email Engine
  • Burst Rate: Up to 100 emails / sec
  • Daily Quota: Up to 500,000 emails / day
  • Max Payload: 25MB (including attachments)
  • Zero-bounce: Real-time suppression
Universal Events Ingest
  • Throughput: 10,000+ events / sec
  • Processing: Asynchronous Redis workers
  • Checkout Impact: < 5ms page latency
  • Storage: 90 days event log history

Recommended Retry Logic: Exponential Backoff with Jitter

When handling high-volume surges (such as Flash Sales or Festive Broadcasts), always implement an exponential backoff loop with randomized jitter to prevent the "thundering herd" problem:

Axios Retry Wrapper with Exponential BackoffJavaScript
const axios = require('axios');
async function sendWithExponentialBackoff(endpoint, data, maxRetries = 3) {
let attempt = 0;
while (attempt < maxRetries) {
try {
return await axios.post(`https://api.softymize.com/api/v1${endpoint}`, data, {
headers: {
'X-Softymize-API-Key': process.env.SOFTYMIZE_API_KEY,
'X-Idempotency-Key': data.idempotency_key || undefined,
'Content-Type': 'application/json'
}
});
} catch (error) {
if (error.response && error.response.status === 429) {
attempt++;
// Read Retry-After header or fallback to exponential backoff
const retryAfterSeconds = parseInt(error.response.headers['retry-after'], 10) || Math.pow(2, attempt);
const delayMs = (retryAfterSeconds * 1000) + Math.random() * 500; // Adding jitter
console.warn(`Rate limited. Retrying attempt ${attempt}/${maxRetries} after ${Math.round(delayMs)}ms...`);
await new Promise((resolve) => setTimeout(resolve, delayMs));
} else {
throw error;
}
}
}
throw new Error('Maximum retry limit exceeded for rate-limited request.');
}
Need Higher Rate Limits for a Major Launch?

If your store is expecting a high-traffic spike (such as Black Friday, Big Billion Days, or a celebrity campaign), contact your Softymize Technical Account Manager or write to [email protected] at least 48 hours in advance for temporary or permanent dedicated queue provisioning.