Skip to main content

API Reference

The Arsel API provides RESTful endpoints for managing contacts, sending transactional and campaign email and SMS, and organizing recipients with lists and tags. All endpoints use JSON request and response bodies.

Base URL

https://api.arsel.sa/v1

Email Endpoints

MethodEndpointDescription
POST/email/sendSend a transactional email
GET/emailList sent emails with delivery status
GET/email/:idGet detailed status for a specific email
Verified Domain Required

All email sending requires a verified domain. Verify your domain in the Arsel Dashboard under Settings > Domains before sending.

Email Campaign Endpoints

MethodEndpointDescription
POST/email/campaignsCreate an email campaign
GET/email/campaignsList email campaigns
GET/email/campaigns/:idGet an email campaign
PATCH/email/campaigns/:idUpdate an email campaign
DELETE/email/campaigns/:idDelete an email campaign
POST/email/campaigns/:id/sendSend or schedule an email campaign
POST/email/campaigns/:id/cancelCancel an email campaign

SMS Endpoints

MethodEndpointDescription
POST/sms/sendSend a transactional SMS
GET/smsList sent SMS messages with delivery status
GET/sms/:idGet detailed status for a specific SMS
Verified Sender Name Required

All SMS sending requires a registered sender name. Register your sender name in the Arsel Dashboard under Settings > SMS Senders before sending.

SMS Campaign Endpoints

MethodEndpointDescription
POST/sms/campaignsCreate an SMS campaign
GET/sms/campaignsList SMS campaigns
GET/sms/campaigns/:idGet an SMS campaign
PATCH/sms/campaigns/:idUpdate an SMS campaign
DELETE/sms/campaigns/:idDelete an SMS campaign
POST/sms/campaigns/:id/sendSend or schedule an SMS campaign
POST/sms/campaigns/:id/cancelCancel an SMS campaign

Contact Endpoints

MethodEndpointDescription
POST/contactsCreate a new contact
GET/contactsList contacts with search, filter, and sort
GET/contacts/:idGet a specific contact
PATCH/contacts/:idUpdate a contact
DELETE/contacts/:idDelete a contact
POST/contacts/bulk-deleteBulk delete up to 1,000 contacts

List Endpoints

MethodEndpointDescription
POST/listsCreate a contact list
GET/listsList all contact lists
GET/lists/:idGet a specific list
PATCH/lists/:idUpdate a list
DELETE/lists/:idDelete a list
POST/lists/:id/contactsAdd contacts to a list
DELETE/lists/:id/contactsRemove contacts from a list

Tag Endpoints

MethodEndpointDescription
POST/tagsCreate a tag
GET/tagsList all tags
GET/tags/:idGet a specific tag
PATCH/tags/:idUpdate a tag
DELETE/tags/:idDelete a tag
POST/tags/:id/contactsApply a tag to contacts
DELETE/tags/:id/contactsRemove a tag from contacts

Custom Template Endpoints

MethodEndpointDescription
POST/templatesCreate an email template
GET/templatesList templates
GET/templates/:idGet a specific template
PATCH/templates/:idUpdate a template
DELETE/templates/:idDelete a template
MethodEndpointDescription
GET/templates/galleryBrowse the starter-template gallery
GET/templates/gallery/categoriesList gallery filter values
GET/templates/gallery/:idGet a gallery template (with HTML)
POST/templates/gallery/:id/copyCopy a gallery template into your custom templates

Property Endpoints

MethodEndpointDescription
POST/propertiesCreate a custom property
GET/propertiesList custom properties
GET/properties/:idGet a specific property
PATCH/properties/:idUpdate a property
DELETE/properties/:idDelete a property

Common Headers

Every request must include:

HeaderValue
AuthorizationBearer <your-api-key>
Content-Typeapplication/json

Response Conventions

Sending endpoints return 202 Accepted with the message ID. Use this ID with the status endpoints to track delivery progress.

{
"id": "01957e3a-4b5c-7d8e-9f0a-1b2c3d4e5f6a"
}

Create endpoints return 201 Created. Campaign create endpoints return { id } only — use GET /:id to fetch the full record. Other create endpoints return the full created resource.

List endpoints return 200 OK with cursor-paginated results:

{
"object": "list",
"has_more": true,
"data": []
}

See Pagination for cursor parameters (limit, after, before) and walking strategies.

Error responses follow a consistent format across all endpoints. See Errors for details.