{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"a1b0591a-04ab-44b8-8a04-fb09f2e00ba3","name":"MackSMS Developer API","description":"# **GETTING STARTED**\n\nThe MackSMS API offers a possible way of making seamless bulk messaging solution integration for developers who are eager to intergrate their software projects with our bulk messaging solutions.\n\n# API END POINT\n\nThe base URL endpoint for this API is\n\n```\nhttps://macksms.co.tz/portal/api/\n\n ```\n\nFor test environment use this base URL (This will just help test data validation, payload arrangements and simulate live results)\n\n```\nhttps://macksms.co.tz/portal/api/test/\n\n ```\n\n# AUTHENTICATION\n\nRequest authentication is done via a `base64 encoded string` API key added to request header as `Authorization` on every request pointed to any of this API's endpoint.\n\nA `base64 encoded string` is created by encoding `secret key` as username and `secret code` as password from your MackSMS account found at `Settings > Developer Info`\n\nThe `Basic Auth` authentication methodology is applied; Therefore, before writing an API key, start with `Basic`\n\nHere-under is what any request headers should contain:  \n`\"Authorization: Basic base64 encoded string\",`\n\n`\"Accept: application/json\",`\n\n`\"Content-Type: application/json\"`\n\n# API STATUS CODES\n\nBesides standard HTTP status code, status object may be  \nreturned as part of the API response message, delivery report or message  \nlog.\n\nStatus json object example (Sent message):\n\n``` json\n{  \n   \"groupId\": 18,\n   \"groupName\": \"PENDING\",\n   \"id\": 51,\n   \"name\": \"ENROUTE (SENT)\",\n   \"description\": \"Message sent to next instance\"\n}\n\n ```\n\n  \n\n### GROUP 1: PENDING | GROUP ID: 18\n\nMessage has been processed , sent to the next instance and acknowledged by the next instance i.e. mobile network operator.\n\n| Id | Status |\n| --- | --- |\n| 50 | **PENDING_WAITING_DELIVERY** - Message has been processed and sent to the next instance i.e. mobile operator with request acknowledgment from their platform. Delivery report has not yet been received, and is awaited thus the status is still pending. |\n| 51 | **ENROUTE (SENT)** - Message has been processed, sent to the next instance and acknowledged by next instance i.e. mobile network operator, whatsapp server, android SIM. |\n| 52 | **ACCEPTED** - Message has been accepted and processed, and is ready to be sent to the next instance i.e. mobile network operator, whatsapp server, android SIM |\n| 88 | **PENDING_DISPATCHED** - Message has been processed, and sent to the next instance i.e. mobile network operator, whatsapp server, android SIM |\n\n### GROUP 2: DELIVERY | GROUP ID: 20\n\nDelivery report received from mobile operators.\n\n| Id | Status |\n| --- | --- |\n| 73 | **DELIVERED** - The message was successfully delivered. |\n| 74 | **EXPIRED -**  <br>1\\. The SMS was delivered and othe perators' system returned incorrect status.  <br>2\\. The SMSC was unable to deliver the message in a specified amount of time, such as when the phone was turned off. |\n| 75 | **DELETED** - The message was deleted. |\n| 76 | **UNDELIVERABLE** -  <br>1\\. The SMS was delivered and othe perators' system returned incorrect status.  <br>2\\. The SMS was unable to deliver the message.For instance, when the number does not exist. This status is also returned when SMSC does not send accurate status. |\n| 77 | **ACCEPTED** - The SMS was accepted and will be send. |\n| 78 | **UNKNOWN** - Unknown error occured. |\n| 79 | **REJECTED** - The message was rejected.The provider could have blocked phonenumbers in this range. |\n| 80 | **SKIPPED** - The message was skipped and not sent due to other reasons including operators' downtime. |\n| 108 | **READ** - The message has been read (This only applies to whatsapp). |\n| 109 | **SENT** - The message has been sent. |\n\n### GROUP 3: FAILED | GROUP ID: 22\n\nMessage has not been processed , failed with one of the following table.\n\n| Id | Status |\n| --- | --- |\n| 57 | FAILED_NOT_ENOUGH_CREDITS - Message has failed due to lack of credits. |\n| 58 | FAILED_SENDER - Sender Address Not Registered On Network. |\n\n### GROUP 4: REJECTED | GROUP ID: 19\n\nMessage has been received, but has either been rejected by our system, or the operator has reverted Rejected as final status.\n\n| Id | Status |\n| --- | --- |\n| 53 | **REJECTED_NETWORK** - Message has been received, but the network is either out of our coverage or not setup on your account. Your account manager can inform you on the coverage status or setup the network in question. |\n| 54 | **REJECTED_PREFIX_MISSING** - Message has been received, but has been rejected as the number is not recognized due to either incorrect number prefix or number length. This information is different for each network and is regularly updated. |\n| 55 | **REJECTED_DND** - Message has been received, and rejected due to the user being subscribed to DND (Do Not Disturb) services, disabling any service traffic to their number. |\n| 56 | **REJECTED_SOURCE** - Your account is set to accept only registered sender ID-s while the sender ID defined in the request has not been registered on your account. |\n| 57 | **REJECTED_NOT_ENOUGH_CREDITS** - Your account is out of credits for further submission - please top up your account. For further assistance in topping up or applying for online account topup service you may contact your account manager. |\n| 59 | **REJECTED_DESTINATION** - The destination number has been blacklisted either at the operator request or on your account - please contact Support for more information. |\n| 60 | **REJECTED_PREPAID_PACKAGE_EXPIRED** - Account credits have been expired past their validity period - please topup your subaccount with credits to extend the validity period. |\n| 61 | **REJECTED_DESTINATION_NOT_REGISTERED** - Your account has been setup for submission only to a single number for testing purposes - kindly contact your manager to remove the limitation. |\n| 62 | **REJECTED_ROUTE_NOT_AVAILABLE** - Mesage has been received on the system, however your account has not been setup to send messages i.e. no routes on your account are available for further submission. Your account manager will be able to setup your account based on your preference. |\n| 63 | **REJECTED_FLOODING_FILTER** - Message has been rejected due to a anti-flooding mechanism. By default, a single number can only receive 20 varied messages and 6 identical messages per hour. If there is a requirement, the limitation can be extended per account on request to your account manager. |\n| 64 | **REJECTED_SYSTEM_ERROR** - The request has been rejected due to an expected system system error, please retry submission or contact our technical support team for more details. |\n| 65 | **REJECTED_DUPLICATE_MESSAGE_ID** -The request has been rejected due to a duplicate message ID specified in the submit request, while message ID-s should be a unique value |\n| 66 | **REJECTED_INVALID_UDH** - Message has been received, while our system detected the message was formatted incorrectly because of either an invalid ESM class parameter (fully featured binary message API method) or an inaccurate amount of characters when using esmclass:64 (UDH). For more information feel free to visit the below articles or contact our Support team for clarification. [https://en.wikipedia.org/wiki/User_Data_Header](https://en.wikipedia.org/wiki/User_Data_Header), [https://en.wikipedia.org/wiki/Concatenated_SMS](https://en.wikipedia.org/wiki/Concatenated_SMS) |\n| 67 | **REJECTED_MESSAGE_TOO_LONG** - Message has been received, but the total message length is more than 25 parts or message text which exceeds 4000 bytes as per our system limitation. |\n| 68 | **MISSING_TO** - The request has been received, however the \"to\" parameter has not been set or it is empty, i.e. there must be valid recipients to send the message. |\n| 69 | **REJECTED_INVALID_DESTINATION** - The request has been received, however the destination is invalid - the number prefix is not correct as it does not match a valid number prefix by any mobile operator. Number length is also taken into consideration in verifying number number validity. |\n| 110 | **REJECTED_EXCEEDED_MESSAGE_LIMIT** - Number of messages sent withing specified period of time has exceeded the accepted limit. |\n| 111 | **REJECTED_MISSING_OUTLET** - Message can not be dispatched. If it is Whatsapp SMS, there is no active whatsapp account and template registered. If it is Mobile SMS, there is no active gateway account and mobile sim card registered. |","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"41324507","collectionId":"a1b0591a-04ab-44b8-8a04-fb09f2e00ba3","publishedId":"2sAYkHpe7i","public":true,"publicUrl":"https://documenter-api.postman.tech/view/41324507/2sAYkHpe7i","privateUrl":"https://go.postman.co/documentation/41324507-a1b0591a-04ab-44b8-8a04-fb09f2e00ba3","customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"0000FF"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":"MackSMS is a bulk messaging solution for businesses in Tanzania; With MackSMS you can register your own sender name as of a business name and send customized SMS to your customers easily. We also offer API service for external integration | Here is an official MackSMS API documentation"},{"name":"title","value":"MackSMS API"}],"appearance":{"default":"light","themes":[{"name":"dark","logo":"https://content.pstmn.io/84fc43c6-f08e-44ef-811a-dd2ecf4c6f0a/bG9nby5wbmc=","colors":{"top-bar":"212121","right-sidebar":"303030","highlight":"0000FF"}},{"name":"light","logo":"https://content.pstmn.io/84fc43c6-f08e-44ef-811a-dd2ecf4c6f0a/bG9nby5wbmc=","colors":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"0000FF"}}]}},"version":"8.11.6","publishDate":"2025-03-24T08:46:23.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"MackSMS API","description":"MackSMS is a bulk messaging solution for businesses in Tanzania; With MackSMS you can register your own sender name as of a business name and send customized SMS to your customers easily. We also offer API service for external integration | Here is an official MackSMS API documentation"},"logos":{"logoLight":"https://content.pstmn.io/84fc43c6-f08e-44ef-811a-dd2ecf4c6f0a/bG9nby5wbmc=","logoDark":"https://content.pstmn.io/84fc43c6-f08e-44ef-811a-dd2ecf4c6f0a/bG9nby5wbmc="}},"statusCode":200},"environments":[{"name":"Production","id":"4230b32b-997f-447d-8273-eaf7fabc4063","owner":"41324507","values":[{"key":"token","value":"","type":"default","enabled":true},{"key":"collectionName","value":"","type":"default","enabled":true},{"key":"collectionSchemaUrl","value":"","type":"default","enabled":true},{"key":"accessKey","value":"","type":"default","enabled":true},{"key":"workspaceId","value":"","type":"default","enabled":true},{"key":"collectionId","value":"","type":"default","enabled":true}],"published":true}],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/768118b36f06c94b0306958b980558e6915839447e859fe16906e29d683976f0","favicon":""},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"},{"label":"Production","value":"41324507-4230b32b-997f-447d-8273-eaf7fabc4063"}],"canonicalUrl":"https://documenter.gw.postman.com/view/metadata/2sAYkHpe7i"}