POST

Bulk Send Notifications

Send notifications to customers for multiple orders in a single request.

Endpoint

HTTP Request
POST /v1/orders/notify-bulk

Authentication

This endpoint requires a valid API key with canSendNotifications permission. The API key must be passed in the X-API-Key header.
Required Header
X-API-Key: your_api_key_here

Request Body

ParameterTypeRequiredDefaultDescription
order_idsstring[]Yes-Array of order identifiers (UUIDs by default, or Shopify order IDs if use_shopify_order_id is true). For Shopify order IDs, provide the numeric portion of Shopify's order GID (e.g., for 'gid://shopify/Order/450789469', use '450789469').
channelsstring[]Yes-Notification channels to use: "email", "sms", "whatsapp". At least one channel is required to prevent accidental mass notifications.
use_shopify_order_idbooleanNofalseSet to 'true' to look up orders using Shopify order IDs instead of UUIDs. Extract the number from Shopify's GID format (gid://shopify/Order/450789469 → 450789469) and use it in the order_ids array.

Response

Returns detailed notification results for each order:
200 OK - Success Response
{
  "message": "Bulk notification request processed",
  "sent": 2,
  "failed": 1,
  "results": [
    {
      "order_id": "uuid1",
      "success": true,
      "notifications_sent": {
        "email": "sent",
        "sms": "sent",
        "whatsapp": "skipped"
      }
    },
    {
      "order_id": "uuid2",
      "success": true,
      "notifications_sent": {
        "email": "sent",
        "sms": "failed",
        "whatsapp": "skipped"
      }
    },
    {
      "order_id": "invalid-uuid",
      "success": false,
      "error": "Order not found"
    }
  ]
}

Response Fields

Root Response Object

FieldTypeDescription
messagestringConfirmation message
sentnumberTotal number of notifications sent successfully
failednumberTotal number of notifications that failed
resultsarrayArray of notification results per order

Result Object Fields (per order)

FieldTypeDescription
order_idstringUUID of the order
successbooleanWhether all notifications succeeded for this order
notifications_sentobjectObject containing notification status for each channel
errorstringError message if the notification failed for this order

Notifications Sent Object Fields

FieldTypeDescription
emailstringEmail notification status: "sent", "skipped", or "failed"
smsstringSMS notification status: "sent", "skipped", or "failed"
whatsappstringWhatsApp notification status: "sent", "skipped", or "failed"

Examples

Basic Request (UUIDs)

cURL Request
curl -X POST "https://api.ultimate-custom-order-status.apps.msmtech.ca/api/v1/orders/notify-bulk" \
  -H "X-API-Key: your_api_key_here" \
  -H "X-API-Version: 1.3" \
  -H "Content-Type: application/json" \
  -d '{
    "order_ids": ["uuid1", "uuid2", "uuid3"],
    "channels": ["email", "sms"]
  }'

Using Shopify Order IDs

cURL Request
curl -X POST "https://api.ultimate-custom-order-status.apps.msmtech.ca/api/v1/orders/notify-bulk" \
  -H "X-API-Key: your_api_key_here" \
  -H "X-API-Version: 1.3" \
  -H "Content-Type: application/json" \
  -d '{
    "order_ids": ["5460132438316", "5460132438317", "5460132438318"],
    "use_shopify_order_id": true,
    "channels": ["email", "sms"]
  }'

Rate Limiting

This endpoint is subject to per-minute and per-day rate limits based on your API key. Rate limit information is returned in the response headers:
  • X-RateLimit-Limit-Minute: Maximum requests per minute
  • X-RateLimit-Remaining-Minute: Remaining requests in current minute
  • X-RateLimit-Reset-Minute: Unix timestamp when minute window resets
  • X-RateLimit-Limit-Day: Maximum requests per day
  • X-RateLimit-Remaining-Day: Remaining requests in current day
  • X-RateLimit-Reset-Day: Unix timestamp when day window resets
  • Retry-After: Seconds to wait before retrying (when rate limited)

Error Responses

400 Bad Request

Invalid request body or validation failed

400 Bad Request
{
  "error": "Validation failed",
  "details": {
    "errors": [...]
  }
}

401 Unauthorized

Missing or invalid API key

401 Unauthorized
{
  "error": "Unauthorized"
}

403 Forbidden

API key lacks required permissions

403 Forbidden
{
  "error": "Insufficient permissions"
}

404 Not Found

No valid orders found for the provided IDs

404 Not Found
{
  "error": "No valid orders found"
}

500 Internal Server Error

Server error occurred

500 Internal Server Error
{
  "error": "Internal server error",
  "details": {
    "message": "Error description"
  }
}