মূল অংশে যান

অনুগ্রহ করে অপেক্ষা করুন...

Amarseba API

Developer documentation

সেন্টারসমূহ

Groups and contacts

Groups are saved contact lists you can send to in one call. Groups created through the API and on the Group Contacts page of your dashboard are the same records. Reading needs bulk-sms-groups:read; creating, changing and deleting needs bulk-sms-groups:write and a live key. Groups are shared between test and live mode, so a test key can read them but not change them.

Groups

GET /bulk-sms/groups Scope: bulk-sms-groups:read

List your groups. Paginated.

Request
curl -X GET https://e-amarseba.com/api/v1/bulk-sms/groups \
  -H "Authorization: Bearer $AMARSEBA_API_KEY" \
  -H "Accept: application/json"
use Illuminate\Support\Facades\Http;

$response = Http::withToken(config('services.amarseba.key'))
    ->acceptJson()
    ->get('https://e-amarseba.com/api/v1/bulk-sms/groups');

$result = $response->json();
const response = await fetch("https://e-amarseba.com/api/v1/bulk-sms/groups", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.AMARSEBA_API_KEY}`,
    Accept: "application/json",
  },
});

const result = await response.json();
import os

import requests

response = requests.get(
    "https://e-amarseba.com/api/v1/bulk-sms/groups",
    headers={
        "Authorization": f"Bearer {os.environ['AMARSEBA_API_KEY']}",
        "Accept": "application/json",
    },
)

result = response.json()
POST /bulk-sms/groups Scope: bulk-sms-groups:write

Create a group, optionally with its first contacts.

Parameters
Name Type Required Description
name string Yes Up to 100 characters.
contacts object[] No Up to 5,000 contacts of {phone, name?, designation?}.
Request
curl -X POST https://e-amarseba.com/api/v1/bulk-sms/groups \
  -H "Authorization: Bearer $AMARSEBA_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "name": "Customers",
    "contacts": [
        {
            "phone": "01712345678",
            "name": "Rahim",
            "designation": "Manager"
        }
    ]
}'
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::withToken(config('services.amarseba.key'))
    ->acceptJson()
    ->withHeaders(['Idempotency-Key' => (string) Str::uuid()])
    ->post('https://e-amarseba.com/api/v1/bulk-sms/groups', [
        'name' => 'Customers',
        'contacts' => [
            [
                'phone' => '01712345678',
                'name' => 'Rahim',
                'designation' => 'Manager',
            ],
        ],
    ]);

$result = $response->json();
const response = await fetch("https://e-amarseba.com/api/v1/bulk-sms/groups", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.AMARSEBA_API_KEY}`,
    Accept: "application/json",
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
      "name": "Customers",
      "contacts": [
          {
              "phone": "01712345678",
              "name": "Rahim",
              "designation": "Manager"
          }
      ]
  }),
});

const result = await response.json();
import os
import uuid

import requests

response = requests.post(
    "https://e-amarseba.com/api/v1/bulk-sms/groups",
    headers={
        "Authorization": f"Bearer {os.environ['AMARSEBA_API_KEY']}",
        "Accept": "application/json",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "name": "Customers",
        "contacts": [
            {
                "phone": "01712345678",
                "name": "Rahim",
                "designation": "Manager",
            },
        ],
    },
)

result = response.json()
Response
201application/json
{
    "success": true,
    "message": "Group created",
    "data": {
        "group": {
            "group_id": "grp_01j8z3m2c5d8f1g4h7j0k3m6n9",
            "name": "Customers",
            "active": true,
            "contact_count": 1,
            "created_at": "2026-09-26T10:00:00.000000Z"
        },
        "contacts": {
            "added": 1,
            "updated": 0
        }
    },
    "code": 201,
    "timestamp": "2026-09-26T10:00:00.000000Z"
}
GET /bulk-sms/groups/{group_id} Scope: bulk-sms-groups:read

One group with its active contact count.

Request
curl -g -X GET https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id} \
  -H "Authorization: Bearer $AMARSEBA_API_KEY" \
  -H "Accept: application/json"
use Illuminate\Support\Facades\Http;

$response = Http::withToken(config('services.amarseba.key'))
    ->acceptJson()
    ->get('https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}');

$result = $response->json();
const response = await fetch("https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.AMARSEBA_API_KEY}`,
    Accept: "application/json",
  },
});

const result = await response.json();
import os

import requests

response = requests.get(
    "https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}",
    headers={
        "Authorization": f"Bearer {os.environ['AMARSEBA_API_KEY']}",
        "Accept": "application/json",
    },
)

result = response.json()
PATCH /bulk-sms/groups/{group_id} Scope: bulk-sms-groups:write

Rename a group or switch it on or off.

Parameters
Name Type Required Description
name string No Up to 100 characters.
active boolean No Whether the group is active.
Request
curl -g -X PATCH https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id} \
  -H "Authorization: Bearer $AMARSEBA_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "name": "VIP customers"
}'
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::withToken(config('services.amarseba.key'))
    ->acceptJson()
    ->withHeaders(['Idempotency-Key' => (string) Str::uuid()])
    ->patch('https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}', [
        'name' => 'VIP customers',
    ]);

$result = $response->json();
const response = await fetch("https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}", {
  method: "PATCH",
  headers: {
    Authorization: `Bearer ${process.env.AMARSEBA_API_KEY}`,
    Accept: "application/json",
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
      "name": "VIP customers"
  }),
});

const result = await response.json();
import os
import uuid

import requests

response = requests.patch(
    "https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}",
    headers={
        "Authorization": f"Bearer {os.environ['AMARSEBA_API_KEY']}",
        "Accept": "application/json",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "name": "VIP customers",
    },
)

result = response.json()
DELETE /bulk-sms/groups/{group_id} Scope: bulk-sms-groups:write

Delete a group and all of its contacts.

Request
curl -g -X DELETE https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id} \
  -H "Authorization: Bearer $AMARSEBA_API_KEY" \
  -H "Accept: application/json"
use Illuminate\Support\Facades\Http;

$response = Http::withToken(config('services.amarseba.key'))
    ->acceptJson()
    ->delete('https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}');

$result = $response->json();
const response = await fetch("https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}", {
  method: "DELETE",
  headers: {
    Authorization: `Bearer ${process.env.AMARSEBA_API_KEY}`,
    Accept: "application/json",
  },
});

const result = await response.json();
import os

import requests

response = requests.delete(
    "https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}",
    headers={
        "Authorization": f"Bearer {os.environ['AMARSEBA_API_KEY']}",
        "Accept": "application/json",
    },
)

result = response.json()

Contacts

GET /bulk-sms/groups/{group_id}/contacts Scope: bulk-sms-groups:read

List the contacts of a group in the order they were added. Paginated.

Request
curl -g -X GET https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}/contacts \
  -H "Authorization: Bearer $AMARSEBA_API_KEY" \
  -H "Accept: application/json"
use Illuminate\Support\Facades\Http;

$response = Http::withToken(config('services.amarseba.key'))
    ->acceptJson()
    ->get('https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}/contacts');

$result = $response->json();
const response = await fetch("https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}/contacts", {
  method: "GET",
  headers: {
    Authorization: `Bearer ${process.env.AMARSEBA_API_KEY}`,
    Accept: "application/json",
  },
});

const result = await response.json();
import os

import requests

response = requests.get(
    "https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}/contacts",
    headers={
        "Authorization": f"Bearer {os.environ['AMARSEBA_API_KEY']}",
        "Accept": "application/json",
    },
)

result = response.json()
POST /bulk-sms/groups/{group_id}/contacts Scope: bulk-sms-groups:write

Add or update up to 5,000 contacts per call, matched by phone number. For a number already in the group, the name and designation are replaced with the values you send (a missing value clears it) and the contact is reactivated. Any invalid number rejects the whole call with 422 under contacts.N.phone.

Parameters
Name Type Required Description
contacts object[] Yes From 1 to 5,000 contacts.
contacts.*.phone string Yes A Bangladeshi mobile number in any accepted format.
contacts.*.name string No Up to 100 characters.
contacts.*.designation string No Up to 100 characters.
Request
curl -g -X POST https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}/contacts \
  -H "Authorization: Bearer $AMARSEBA_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "contacts": [
        {
            "phone": "01712345678",
            "name": "Rahim",
            "designation": "Manager"
        },
        {
            "phone": "+8801812345678",
            "name": "Karim"
        }
    ]
}'
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::withToken(config('services.amarseba.key'))
    ->acceptJson()
    ->withHeaders(['Idempotency-Key' => (string) Str::uuid()])
    ->post('https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}/contacts', [
        'contacts' => [
            [
                'phone' => '01712345678',
                'name' => 'Rahim',
                'designation' => 'Manager',
            ],
            [
                'phone' => '+8801812345678',
                'name' => 'Karim',
            ],
        ],
    ]);

$result = $response->json();
const response = await fetch("https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}/contacts", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.AMARSEBA_API_KEY}`,
    Accept: "application/json",
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
      "contacts": [
          {
              "phone": "01712345678",
              "name": "Rahim",
              "designation": "Manager"
          },
          {
              "phone": "+8801812345678",
              "name": "Karim"
          }
      ]
  }),
});

const result = await response.json();
import os
import uuid

import requests

response = requests.post(
    "https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}/contacts",
    headers={
        "Authorization": f"Bearer {os.environ['AMARSEBA_API_KEY']}",
        "Accept": "application/json",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "contacts": [
            {
                "phone": "01712345678",
                "name": "Rahim",
                "designation": "Manager",
            },
            {
                "phone": "+8801812345678",
                "name": "Karim",
            },
        ],
    },
)

result = response.json()
Response
200application/json
{
    "success": true,
    "message": "Contacts saved",
    "data": {
        "added": 1,
        "updated": 1
    },
    "code": 200,
    "timestamp": "2026-09-26T10:00:00.000000Z"
}
DELETE /bulk-sms/groups/{group_id}/contacts Scope: bulk-sms-groups:write

Remove contacts by phone number, up to 5,000 per call.

Parameters
Name Type Required Description
phones string[] Yes The numbers to remove, in any accepted format.
Request
curl -g -X DELETE https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}/contacts \
  -H "Authorization: Bearer $AMARSEBA_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "phones": [
        "01712345678"
    ]
}'
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Str;

$response = Http::withToken(config('services.amarseba.key'))
    ->acceptJson()
    ->withHeaders(['Idempotency-Key' => (string) Str::uuid()])
    ->delete('https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}/contacts', [
        'phones' => [
            '01712345678',
        ],
    ]);

$result = $response->json();
const response = await fetch("https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}/contacts", {
  method: "DELETE",
  headers: {
    Authorization: `Bearer ${process.env.AMARSEBA_API_KEY}`,
    Accept: "application/json",
    "Content-Type": "application/json",
    "Idempotency-Key": crypto.randomUUID(),
  },
  body: JSON.stringify({
      "phones": [
          "01712345678"
      ]
  }),
});

const result = await response.json();
import os
import uuid

import requests

response = requests.delete(
    "https://e-amarseba.com/api/v1/bulk-sms/groups/{group_id}/contacts",
    headers={
        "Authorization": f"Bearer {os.environ['AMARSEBA_API_KEY']}",
        "Accept": "application/json",
        "Idempotency-Key": str(uuid.uuid4()),
    },
    json={
        "phones": [
            "01712345678",
        ],
    },
)

result = response.json()
Response
200application/json
{
    "success": true,
    "message": "Contacts removed",
    "data": {
        "removed": 1
    },
    "code": 200,
    "timestamp": "2026-09-26T10:00:00.000000Z"
}

Sending to a group

Send one body to every active contact with POST /bulk-sms/groups/{group_id}/send. Duplicate numbers are sent once. A group send has no 10,000-recipient cap: large groups are sent in background chunks. An inactive group returns 422 under group_id with "The group is not active", and a group with no active contacts returns "The group has no active contacts".