MassMailer REST API
Professional email campaign API. All endpoints return JSON. Auth via Laravel Sanctum Bearer tokens.
Base URL: http://excel.local/api/v1
Laravel
Sanctum
Rate Limited
๐ How to Authenticate
Step 1 โ Login
POST /auth/login
{"email":"admin@mail.com","password":"password"}
// Response โ {"data":{"token":"1|abc..."}}
Step 2 โ Send token in every request
Authorization: Bearer 1|abc... Accept: application/json
๐ Authentication
POST/auth/loginGet Bearer tokenโผ
Request Body
| Field | Type | |
|---|---|---|
| string | required | |
| password | string | required |
Response 200
{"success":true,"data":{"id":1,"name":"Admin","email":"admin@mail.com","token":"1|abc..."}}
POST/auth/registerRegister new userโผ
Request Body
| Field | Type | |
|---|---|---|
| name | string | required |
| string | required | |
| password | string | required |
| password_confirmation | string | required |
POST/auth/logoutRevoke current tokenโผ
๐ Bearer Token Required
๐ฎ SMTP Senders
GET/smtps?search=&per_page=15โผ
๐ Bearer Token Required
POST/smtpsCreate SMTPโผ
๐ Bearer Token Required
Request Body
| Field | Type | Example | |
|---|---|---|---|
| display_name | string | required | Newsletter |
| smtp_host | string | required | smtp.gmail.com |
| port | integer | required | 587 |
| username | string | required | sender@gmail.com |
| password | string | required | apppassword |
| encryption | tls|ssl|none | optional | tls |
| daily_limit | integer | optional | 1990 |
| hourly_limit | integer | optional | 490 |
GET/smtps/{id}โผ
๐ Bearer Token Required
PUT/smtps/{id}All fields
optionalโผ
๐ Bearer Token Required
DEL/smtps/{id}โผ
๐ Bearer Token Required
POST/smtps/testSend test emailโผ
๐ Bearer Token Required
Body
{"smtp_id":1,"recipient_email":"test@mail.com"}
POST/smtps/{id}/duplicateClone
entryโผ
๐ Bearer Token Required
๐ค Senders
GET/sendersโผ
๐ Bearer Token Required
POST/sendersCreate senderโผ
๐ Bearer Token Required
Body
{"name":"Ahmed","email":"ahmed@mail.com","password":"pass","phone":"+201001234567"}
GET/senders/{id}โผ
๐ Bearer Token Required
PUT/senders/{id}โผ
๐ Bearer Token Required
DEL/senders/{id}โผ
๐ Bearer Token Required
๐ง Messages
GET/messagesโผ
๐ Bearer Token Required
POST/messagesSend Now OR Scheduleโผ
๐ Bearer Token Required
Send Now (mode: "now")
{"subject":"Campaign","content":"<h1>Hello!</h1>","smtp_sender_id":[1,2],"data_excel_id":[1,2,3],"mode":"now"}
Schedule (mode: "schedule")
{"subject":"Campaign","content":"<h1>Hello!</h1>","smtp_sender_id":[1],"data_excel_id":[1,2,3],"mode":"schedule","start_at":"2024-06-01 09:00:00","duration_value":3,"duration_unit":"days","label":"Summer"}
duration_unit: minutes ยท hours ยท days ยท weeks
Response 201
{"success":true,"message":"Emails are being dispatched.","total_queued":1980,"skipped":20}
GET/messages/{id}โผ
๐ Bearer Token Required
PUT/messages/{id}Update
subject/labelโผ
๐ Bearer Token Required
Body
{"subject":"New Subject","label":"My Campaign"}
DEL/messages/{id}โผ
๐ Bearer Token Required
GET/messages/receivers?category_ids[]=1โผ
๐ Bearer Token Required
POST/messages/calculate-durationโผ
๐ Bearer Token Required
Body
{"sender_count":3,"receiver_count":10000}
// Response โ {"data":{"value":2,"unit":"days"}}
POST/messages/queue/{id}/pauseโผ
๐ Bearer Token Required
POST/messages/queue/{id}/resumeโผ
๐ Bearer Token Required
POST/messages/queue/{id}/cancelโผ
๐ Bearer Token Required
GET/messages/{id}/scheduleโผ
๐ Bearer Token Required
POST/messages/{id}/schedule/cancelโผ
๐ Bearer Token Required
POST/messages/reset-statussent โ pendingโผ
๐ Bearer Token Required
POST/messages/reset-failedfailed โ pendingโผ
๐ Bearer Token Required
๐ Contacts
GET/contactsโผ
๐ Bearer Token Required
POST/contactsBulk create from phone listโผ
๐ Bearer Token Required
Body
{"phones":"+201001234567\n+201009876543","names":"Ali\nMohamed","group_id":1}
Response 201
{"data":{"summary":{"saved_count":2,"duplicate_count":0,"invalid_count":0}}}
GET/contacts/search?query=ahmedโผ
๐ Bearer Token Required
POST/contacts/excelImport xlsx/csv (multipart)โผ
๐ Bearer Token Required
Form Data (multipart/form-data)
| Field | Type |
|---|---|
| file | file (xlsx/csv) |
| group_id | integer |
DEL/contacts/bulkBulk delete by IDsโผ
๐ Bearer Token Required
Body
{"ids":[1,2,3,4]}
GET/contacts/{id}โผ
๐ Bearer Token Required
PUT/contacts/{id}โผ
๐ Bearer Token Required
DEL/contacts/{id}โผ
๐ Bearer Token Required
๐ฅ Groups
GET/groupsโผ
๐ Bearer Token Required
POST/groupsCreate groupโผ
๐ Bearer Token Required
Body
{"name":"VIP Clients","description":"High value customers"}
GET/groups/{id}โผ
๐ Bearer Token Required
PUT/groups/{id}โผ
๐ Bearer Token Required
DEL/groups/{id}โผ
๐ Bearer Token Required
GET/groups/{id}/contactsContacts in this
groupโผ
๐ Bearer Token Required
โ๏ธ Settings
GET/settingsGet all grouped settingsโผ
๐ Bearer Token Required
POST/settingsUpdate settingsโผ
๐ Bearer Token Required
Body
{"daily_limit":1990,"hourly_limit":490,"batch_size":200}
๐ Templates
GET/templatesโผ
๐ Bearer Token Required
POST/templatesCreate templateโผ
๐ Bearer Token Required
Body
{"name":"Welcome Email","subject":"Welcome!","content":"<h1>Hello!</h1>"}
GET/templates/{id}โผ
๐ Bearer Token Required
PUT/templates/{id}โผ
๐ Bearer Token Required
DEL/templates/{id}โผ
๐ Bearer Token Required
โ Error Codes
| Code | Meaning | When |
|---|---|---|
| 200 | OK | Success |
| 201 | Created | Resource created |
| 401 | Unauthenticated | Missing / invalid token |
| 403 | Forbidden | Not authorized |
| 404 | Not Found | Route / resource missing |
| 422 | Validation Error | Invalid input fields |
| 429 | Too Many Requests | Rate limit hit |
| 500 | Server Error | Unexpected error |
Standard Error Response
{"success":false,"message":"Validation failed.","errors":{"email":["The email field is required."]}}