GET/api/v2/account
Account snapshot
Safe profile fields, wallet balance, active subscription summary, and complimentary gift grants (freeMessageGrants). Secrets and tokens are never returned.
When to use it. A status panel in your system, or before sending to check canSend and balance.
Code example
Correct: Correct snapshot
curl --location 'https://raselsms.com/api/v2/account' \--header 'X-API-Key: YOUR_API_KEY'Incorrect: Incorrect: no key
curl --location 'https://raselsms.com/api/v2/account' \--header 'X-API-Key: YOUR_API_KEY'Requires api_keys:read.
Response example
200 — Correct snapshot
{ "success": true, "data": { "profile": { "id": "6800user123def4567890ffff", "name": "Acme Co", "email": "ops@acme.example", "phone": "+963912345678", "avatar": null, "phoneVerified": true, "businessName": "Acme", "appName": "Acme App", "businessNameVerified": true, "appNameVerified": true, "ownerId": null, "memberPermissions": null, "createdAt": "2026-01-10T08:00:00.000Z" }, "wallet": { "balance": 4.88, "availableBalance": 4.88, "currency": "USD" }, "subscription": { "access": { "canSend": true, "reason": "ok", "poolExhausted": false, "effectiveLimit": 1000, "remainingSegments": 800, "usageCount": 200 }, "active": { "planName": "Growth", "status": "active", "startAt": "2026-07-01T00:00:00.000Z", "endAt": "2026-08-01T00:00:00.000Z", "isTrial": false, "billingCycleMonths": 1 }, "pool": { "hasActivePlan": true, "poolSuppressed": false, "effectiveLimit": 1000, "usedSegments": 200, "remainingSegments": 800, "poolExhausted": false, "planName": "Growth" } }, "freeMessageGrants": { "summary": { "totals": { "granted": 100, "consumed": 10, "reserved": 0, "withdrawn": 0, "remaining": 90, "activeRemaining": 90 }, "activeGrantCount": 1, "grantCount": 1, "byScope": [ { "channel": "sms_local", "providerKey": null, "messageType": "all", "remaining": 90, "grantCount": 1 } ] }, "grants": [ { "id": "6800abc123def4567890fedc", "channel": "sms_local", "remainingQuantity": 90, "status": "active", "reason": "admin_gift" } ] } }}401 — Incorrect: no key
{ "success": false, "requestId": "msgreq_1739012345678_abc123", "code": "UNAUTHORIZED", "error": "Missing or invalid API key"}Requires api_keys:read.
403 — Phone is not verified or the key lacks permission (usually messages:create or api_keys:read).
{ "success": false, "requestId": "msgreq_1739012345678_abc123", "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
GET /api/v2/account
Request Headers
| Header | Type | Description |
|---|---|---|
| X-API-Key | string | Your Rasel API key. Send it on every documented request except inbound webhooks. * |
Response Fields
| Field | Type | Description | Example |
|---|---|---|---|
| success | boolean | True when the operation succeeded, or when at least one batch recipient succeeded. | |
| data | object | Primary payload for list and snapshot endpoints. | |
| data.profile | object | Account identity on the snapshot. Passwords and API keys are never included. | |
| data.profile.id | string | Resource identifier. | |
| data.profile.name | string | Display name or lowercase template identifier, depending on the endpoint. | |
| data.profile.email | string | Account email. | |
| data.profile.phone | string | Account or contact phone in international format. | |
| data.profile.avatar | string | Profile image URL when the account has one. | |
| data.profile.phoneVerified | boolean | True when the account phone number has been verified. | |
| data.profile.businessName | string | Business name stored on the account. | |
| data.profile.appName | string | Application name configured for this account. | |
| data.profile.businessNameVerified | boolean | True when the business name has been verified. | |
| data.profile.appNameVerified | boolean | True when the application name has been verified. | |
| data.profile.ownerId | string | User id of the account owner. | |
| data.profile.memberPermissions | string-list | Permissions of the current team member. Omitted for the owner. | |
| data.profile.createdAt | string | Creation timestamp. | |
| data.wallet | object | Current wallet balance and available balance. | |
| data.wallet.balance | number | Wallet balance after the latest movement or current snapshot. | |
| data.wallet.availableBalance | number | Balance that can be spent now, after holds. | |
| data.wallet.currency | string | ISO currency code of the wallet, such as USD. | |
| data.subscription | object | Active plan access, period, and pool summary. | |
| data.subscription.access | object | Whether this account may send in the current plan period. | |
| data.subscription.access.canSend | boolean | True when sending is allowed right now. | |
| data.subscription.access.reason | string | Why sending is allowed or blocked. | |
| data.subscription.access.poolExhausted | boolean | True when the plan message pool is used up. | |
| data.subscription.access.effectiveLimit | number | Messages allowed in this period, including bonus messages. | |
| data.subscription.access.periodMessageLimit | number | Plan limit for the current period, before bonus messages. | |
| data.subscription.access.bonusMessagesGranted | number | Extra messages added on top of the plan limit. | |
| data.subscription.access.remainingSegments | number | Messages still available in the current period. | |
| data.subscription.access.usageCount | number | Messages already counted in this period. | |
| data.subscription.access.usageByChannel | json | Usage split by channel. | |
| data.subscription.access.channelLimits | json | Per-channel limits for the current period. | |
| data.subscription.access.cycleStart | string | Start of the current billing period, in ISO 8601. | |
| data.subscription.access.cycleEnd | string | End of the current billing period, in ISO 8601. | |
| data.subscription.active | object | The subscription period that is in force now. | |
| data.subscription.active.planName | string | Name of the active plan. | |
| data.subscription.active.status | string | Delivery or record status. On send: sent, queued, or scheduled. On other resources it is the row status filter or value. | |
| data.subscription.active.startAt | string | When this subscription period started. | |
| data.subscription.active.endAt | string | When this subscription period ends. | |
| data.subscription.active.isTrial | boolean | True when the active period is a trial. | |
| data.subscription.active.billingCycleMonths | number | Length of the billing cycle in months. | |
| data.subscription.pool | object | Plan message pool for the current period. | |
| data.subscription.pool.hasActivePlan | boolean | True when a plan period is active. | |
| data.subscription.pool.poolSuppressed | boolean | True when pool usage is turned off for this account. | |
| data.subscription.pool.effectiveLimit | number | Messages allowed in this period, including bonus messages. | |
| data.subscription.pool.periodMessageLimit | number | Plan limit for the current period, before bonus messages. | |
| data.subscription.pool.bonusMessagesGranted | number | Extra messages added on top of the plan limit. | |
| data.subscription.pool.usedSegments | number | Segments already consumed from the pool. | |
| data.subscription.pool.remainingSegments | number | Segments still available in the pool. | |
| data.subscription.pool.usedMessages | number | Messages already consumed from the pool. | |
| data.subscription.pool.usageByChannel | json | Pool usage split by channel. | |
| data.subscription.pool.channelLimits | json | Per-channel pool limits. | |
| data.subscription.pool.cycleStart | string | Start of the pool period, in ISO 8601. | |
| data.subscription.pool.cycleEnd | string | End of the pool period, in ISO 8601. | |
| data.subscription.pool.poolExhausted | boolean | True when the pool is used up. | |
| data.subscription.pool.planName | string | Name of the plan that owns this pool. | |
| data.freeMessageGrants | object | Complimentary admin gift message grants. | |
| data.freeMessageGrants.summary | object | Totals for complimentary message grants on this account. | |
| data.freeMessageGrants.summary.totals | object | Granted, consumed, reserved, withdrawn, and remaining gift messages. | |
| data.freeMessageGrants.summary.totals.granted | number | Gift messages that were issued. | |
| data.freeMessageGrants.summary.totals.consumed | number | Gift messages that were already used. | |
| data.freeMessageGrants.summary.totals.reserved | number | Gift messages held for sends that are still in flight. | |
| data.freeMessageGrants.summary.totals.withdrawn | number | Gift messages removed by an admin. | |
| data.freeMessageGrants.summary.totals.remaining | number | Gift messages that are still unused. | |
| data.freeMessageGrants.summary.totals.activeRemaining | number | Remaining messages on grants that are still active. | |
| data.freeMessageGrants.summary.activeGrantCount | integer | Number of grants that are still active. | |
| data.freeMessageGrants.summary.grantCount | integer | Total number of grants, including inactive ones. | |
| data.freeMessageGrants.summary.byScope | json | Remaining gift messages grouped by channel or scope. | |
| data.freeMessageGrants.grants | json | Individual complimentary message grants. |
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. |
| 429 | Rate limit exceeded, or the maximum number of verification attempts was reached. |
Try it
Request
GET /api/v2/accountResponse
Send a request to see the response.