Pause a bulk job
Accepts pause while the job is validating, queued, or running. No body. The current window may finish. Poll until status is paused and pauseReason is user.
When to use it. A temporary stop from your system. Balance and provider pauses happen on their own.
Code example
Correct: Correct: request pause
curl --location 'https://raselsms.com/api/v2/messages/bulk/64b0c0ff0000000000000001/pause' \--header 'X-API-Key: YOUR_API_KEY' \--header 'Content-Type: application/json'The response confirms the request. Status can stay running until the window finishes.
Incorrect: Incorrect: not pausable
curl --location 'https://raselsms.com/api/v2/messages/bulk/64b0c0ff0000000000000001/pause' \--header 'X-API-Key: YOUR_API_KEY' \--header 'Content-Type: application/json'Response example
200 — Correct: request pause
{ "success": true, "job": { "id": "64b0c0ff0000000000000001", "name": "Morning notices", "status": "running", "messagesPerSecond": 10, "pauseReason": null, "total": 2, "validatedCount": 2, "counts": { "pending": 1, "sent": 1, "failed": 0, "cancelled": 0 }, "errorCode": null, "errorMessage": null, "createdAt": "2026-09-24T12:00:00.000Z" }}The response confirms the request. Status can stay running until the window finishes.
409 — Incorrect: not pausable
{ "success": false, "code": "JOB_NOT_PAUSABLE", "error": "Job cannot be paused"}200 — Pause was accepted.
{ "success": true, "job": { "id": "64b0c0ff0000000000000001", "name": "Morning notices", "status": "running", "messagesPerSecond": 10, "pauseReason": null, "total": 2, "validatedCount": 2, "counts": { "pending": 0, "sent": 0, "failed": 0, "cancelled": 0 }, "errorCode": null, "errorMessage": null, "createdAt": "2026-09-24T12:00:00.000Z" }}404 — No job with this id belongs to this account. Code JOB_NOT_FOUND.
{ "success": false, "code": "JOB_NOT_FOUND", "error": "Job was not found"}401 — Missing or invalid API key.
{ "success": false, "requestId": "msgreq_1739012345678_abc123", "code": "UNAUTHORIZED", "error": "Missing or invalid API key"}403 — Phone is not verified or messages:create is missing. Code FORBIDDEN.
{ "success": false, "code": "FORBIDDEN", "error": "Phone not verified or missing permission"}429 — Rate limit exceeded. Honor Retry-After when present.
{ "success": false, "requestId": "msgreq_1739012345678_abc123", "code": "RATE_LIMITED", "error": "Rate limit exceeded", "retryAfterSeconds": 30}HTTP request
POST /api/v2/messages/bulk/{jobId}/pause
Request Headers
| Header | Type | Description |
|---|---|---|
| X-API-Key | string | Your Rasel API key. Send it on every documented request except inbound webhooks. * |
Path parameters
| Field | Type | Description |
|---|---|---|
| jobId | string | Job id from the create response. The job is visible only to that key's account. * |
Response Fields
| Field | Type | Description | Example |
|---|---|---|---|
| success | enum | True when the operation succeeded, or when at least one batch recipient succeeded. * | |
| job | object | Job details. The following fields belong to this job and are not visible to another account. * | |
| job.id | string | Resource identifier. * | |
| job.name | string | Display name or lowercase template identifier, depending on the endpoint. * | |
| job.status | enum | Delivery or record status. On send: sent, queued, or scheduled. On other resources it is the row status filter or value. * | |
| job.messagesPerSecond | integer | Rate ceiling: an integer from 1 to 10. Zero, fractions, and values above 10 reject the request before a job is stored. The ceiling is shared by the account's jobs in creation order. * | |
| job.pauseReason | enum | Set only while status is paused. insufficient_balance and provider_rate_limit stop the current window. user means the account requested pause. * | |
| job.total | integer | Total matching rows. * | |
| job.validatedCount | integer | How many rows have been checked while status is validating. * | |
| job.counts | object | Row counters. They stay separate even when a completed job still has failed rows. * | |
| job.counts.pending | integer | Rows not sent yet. * | |
| job.counts.sent | integer | Rows accepted for delivery. They also appear in the normal message list. * | |
| job.counts.failed | integer | Rows that failed. A completed job can still have failed rows. * | |
| job.counts.cancelled | integer | Rows cancelled before send. * | |
| job.errorCode | string | Job-level code when status is rejected: VALIDATION_FAILED (one or more rows failed checks; nothing sent), INSUFFICIENT_BALANCE (the account cannot send even one message; nothing sent), INTAKE_INCOMPLETE (storage did not finish; nothing sent). * | |
| job.errorMessage | string | Short explanation safe to show the account owner. Match your logic on code, not on this text. * | |
| job.createdAt | string | Creation timestamp. |
Status Codes
| Status | Description |
|---|---|
| 200 | Success. |
| 401 | Missing or invalid API key. |
| 403 | Phone not verified, missing permission, or the account cannot perform this action. |
| 404 | Resource not found for this API key owner. |
| 409 | Conflict, such as an idempotency key reuse with a different body, or a session that is not ready. |
| 429 | Rate limit exceeded, or the maximum number of verification attempts was reached. |
Try it
Parameters
Job id from the create response. The job is visible only to that key's account.
Request
{}Response
Send a request to see the response.