{"info":{"_postman_id":"c3be9000-61d6-4eac-b378-63c368d3c72a","name":"SmartSMSSolutions API","description":"<html><head></head><body><h5 id=\"home--pricing--login--sign-up--blog\"><a href=\"https://smartsmssolutions.com\">HOME</a> | <a href=\"https://smartsmssolutions.com/pricing\">PRICING</a> | <a href=\"https://app.smartsmssolutions.com/login\">LOGIN</a> | <a href=\"https://app.smartsmssolutions.com/register?urm=developer-page\">SIGN UP</a> | <a href=\"https://smartsmssolutions.com/blog\">BLOG</a></h5>\n<img src=\"https://smartsmssolutions.com/images/developer_documentation/smartsms_logo_top.jpg\">\n\n<p>Welcome to SmartSMSSolution API documentation. We have made every effort to make very useful API endpoints available to ensure ease of access to our products and services.</p>\n<h1 id=\"api-token\">API Token</h1>\n<p>You need an access token when sending requests. You can obtain one at <a href=\"https://app.smartsmssolutions.com/developer-api-tokens\">the API-x token management page</a>. Your API token is like a password. Kindly keep it safe. If you feel the token is compromised, you can delete it at <a href=\"https://app.smartsmssolutions.com/developer-api-tokens\">the API-x token management page</a>.</p>\n<h1 id=\"need-help\">Need Help?</h1>\n<p>Should you need any help with any part of the documentation or the API endpoint, kindly send a mail to <a href=\"https://mailto:support@smartsmssolutions.com\">support@smartsmssolutions.com</a>. Our team will get back to you with the needed assistance. Suggestions and recommendations can be sent to the same email address.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"API Token","slug":"api-token"},{"content":"Need Help?","slug":"need-help"}],"owner":"15261322","collectionId":"c3be9000-61d6-4eac-b378-63c368d3c72a","publishedId":"2sBY4Mv1zY","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-07-15T19:25:40.000Z"},"item":[{"name":"SMS","item":[{"name":"Send SMS","id":"60f3d5e9-e2db-46a0-8659-21771936fe0c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"your-apix-token","description":"<p>Your API-x token.</p>\n","type":"text"},{"key":"sender","value":"sender-id","description":"<p>The Sender ID. </p>\n","type":"text"},{"key":"to","value":"080xxxxxxxx","description":"<p>The recipient. Multiple recipients should be separated with a comma</p>\n","type":"text"},{"key":"message","value":"message-content","description":"<p>The mesage content</p>\n","type":"text"},{"key":"type","value":"mesasge-type","description":"<p>This specify the type of message you want\nto send. Valid types are:</p>\n<p>0 = Plain Text</p>\n<p>1 = Flash Plain Text</p>\n<p>2 = Unicode SMS</p>\n<p>6 = Unicode Flash SMS</p>\n<p>Note: 70 characters makes a page of 1- page Unicode SMS, while 63 characters makes a page for multiple pages Unicode SMS</p>\n","type":"text"},{"key":"routing","value":"routing","description":"<p>Set how you want the phone numbers on DND to be handled.</p>\n<p>Valid options are:</p>\n<p>2 = Send all messages via the Basic Route. DND phone numbers are not charged</p>\n<p>3= Send message via the Basic route but send to those on DND via the Corporate\nRoute.</p>\n<p>4= Use corporate route for all the phone\nnumbers</p>\n<p>5 = DISCONTINUED. Use the SIM server for all the phone\nnumbers Note: Note that the pricing of the\ncorporate route is different from the basic route.</p>\n<p>6 = DISCONTINUED. This option allows sending of SMS to all numbers on DND only via the Hosted SIM</p>\n<p>7 = DISCONTINUED. Use the hosted SIM for international delivery</p>\n<p>8 = Use the international route for Nigerian phone numbers on DND</p>\n<p>9 = Use the international route for all Nigerian phone numbers</p>\n","type":"text"},{"key":"ref_id","value":"unique-ref-id","description":"<p>Optional. This is the client specified reference id for the message. This is returned when pushing the DLR to the\nclient’s pre-specified PUSH DLR API.</p>\n","type":"text"},{"key":"simserver_token","value":"simserver-token","description":"<p>Optional. The token of the SIM server to be used when sending messages via the\nhosted SIM server</p>\n","type":"text"},{"key":"dlr_timeout","value":"dlr-timeout","description":"<p>Optional. The maximum duration to hold a message which has not been delivered\nbefore discarding in hours. The maximum value is 48 hours.</p>\n","type":"text"},{"key":"schedule","value":"time-in-future","description":"<p>Optional. Set the message to be scheduled for future\ndelivery. Accepted format are below:</p>\n<ul>\n<li>YYYY-MM-DD HH:MM eg 2018-01-01</li>\n</ul>\n<p>08:10 (24 hour format)</p>\n<ul>\n<li>DD Month YYYY HH:MM e.g 01 January</li>\n</ul>\n<p>2018 15:30 (24 hour format)</p>\n","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/sms/","description":"<p>The following endpoint can be used to submit an SMS for termination.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","sms",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"13a2733c-7c2b-4b54-a90a-2c3e711ff93d","name":"Send SMS Example","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"your-apix-token","description":"Your API-x token.","type":"text"},{"key":"sender","value":"sender-id","description":"The Sender ID. ","type":"text"},{"key":"to","value":"080xxxxxxxx","description":"The recipient. Multiple recipients should be separated with a comma","type":"text"},{"key":"message","value":"message-content","description":"The mesage content","type":"text"},{"key":"type","value":"mesasge-type","description":"This specify the type of message you want\nto send. Valid types are:\n0: Plain Text\n1: Flash Plain Text\n2: Unicode SMS\n6: Unicode Flash SMS\nNote: 70 characters makes a page of 1- page Unicode SMS, while 63 characters makes a page for multiple pages Unicode SMS","type":"text"},{"key":"routing","value":"routing","description":"Set how you want the phone numbers on DND to be handled.\n\nValid options are:\n2 = Send all messages via the Basic Route. DND phone numbers are not charged\n\n3= Send message via the Basic route but send to those on DND via the Corporate\nRoute.\n\n4= Use corporate route for all the phone\nnumbers\n\n5 = Use the SIM server for all the phone\nnumbers Note: Note that the pricing of the\ncorporate route is different from the basic route.\n\n6. This option allows sending of SMS to all numbers on DND only via the Hosted SIM","type":"text"},{"key":"ref_id","value":"unique-ref-id","description":"Optional. This is the client specified reference id for the message. This is returned when pushing the DLR to the\nclient’s pre-specified PUSH DLR API.","type":"text"},{"key":"simserver_token","value":"simserver-token","description":"Optional. The token of the SIM server to be used when sending messages via the\nhosted SIM server","type":"text"},{"key":"dlr_timeout","value":"dlr-timeout","description":"Optional. The maximum duration to hold a message which has not been delivered\nbefore discarding in hours. The maximum value is 48 hours.","type":"text"},{"key":"schedule","value":"time-in-future","description":"Optional. Set the message to be scheduled for future\ndelivery. Accepted format are below:\n\n- YYYY-MM-DD HH:MM eg 2018-01-01\n\n\n08:10 (24 hour format)\n- DD Month YYYY HH:MM e.g 01 January\n\n\n2018 15:30 (24 hour format)","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/sms/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 27 Apr 2021 20:58:57 GMT"},{"key":"Server","value":"Apache"},{"key":"Expires","value":"Thu, 19 Nov 1981 08:52:00 GMT"},{"key":"Cache-Control","value":"no-store, no-cache, must-revalidate, post-check=0, pre-check=0"},{"key":"Pragma","value":"no-cache"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Vary","value":"Accept-Encoding,User-Agent"},{"key":"Content-Encoding","value":"gzip"},{"key":"Content-Length","value":"328"},{"key":"Keep-Alive","value":"timeout=5, max=100"},{"key":"Connection","value":"Keep-Alive"},{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"code\": 1000,\n    \"successful\": \"2348000000000\",\n    \"basic_successful\": \"2348000000000\",\n    \"corp_successful\": \"\",\n    \"simserver_successful\": \"\",\n    \"simserver_shared\": \"\",\n    \"simserver_failed\": \"\",\n    \"simserver_distribution\": [],\n    \"failed\": \"\",\n    \"flooding\": \"\",\n    \"insufficient_unit\": \"\",\n    \"invalid\": \"\",\n    \"all_numbers\": \"2348000000000\",\n    \"nondnd_numbers\": \"2348000000000\",\n    \"dnd_numbers\": \"\",\n    \"units_used\": 1,\n    \"units_calculated\": 1,\n    \"basic_units\": 0,\n    \"corp_units\": 0,\n    \"units_before\": \"9996.4000\",\n    \"units_after\": \"9995.4000\",\n    \"sms_pages\": 1,\n    \"simhost\": \"\",\n    \"message_id\": \"msg-20210427-KXZvZTXUicwVeKu2HSHVMjpWcdOmIzduUVw16SZ4\",\n    \"ref_id\": \"20039834008203\",\n    \"comment\": \"Completed Successfully\"\n}"}],"_postman_id":"60f3d5e9-e2db-46a0-8659-21771936fe0c"},{"name":"Balance","id":"158a8706-d534-47b9-8312-04734cd4771f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"your-apix-token","description":"<p>Your API-x token.</p>\n","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/balance/?token=your-apix-token","description":"<p>To get your current wallet balance, use the endpoint and the parameters below.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","balance",""],"host":["app","smartsmssolutions","com"],"query":[{"description":{"content":"<p>Your API-x Token</p>\n","type":"text/plain"},"key":"token","value":"your-apix-token"}],"variable":[]}},"response":[{"id":"73505e03-1f46-4c76-b297-8203da917a4c","name":"Balance Example","originalRequest":{"method":"GET","header":[],"url":{"raw":"http://app.smartsmssolutions.com/io/api/client/v1/balance/?token=your-apix-token","protocol":"http","host":["app","smartsmssolutions","com"],"path":["io","api","client","v1","balance",""],"query":[{"key":"token","value":"your-apix-token","description":"Your API-x Token"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"19291674.86"}],"_postman_id":"158a8706-d534-47b9-8312-04734cd4771f"},{"name":"Submit Sender ID","id":"41379f64-8194-490f-9deb-a2fccee9ed4b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"your-apix-token","description":"<p>Your API token.</p>\n","type":"text"},{"key":"senderid","value":"sender-id","description":"<p>The Sender ID to be submitted for whitelisting on the promotional bind</p>\n","type":"text"},{"key":"message","value":"message-content","description":"<p>A valid sample of the message that will be sent with the Sender ID</p>\n","type":"text"},{"key":"organisation","value":"organisation-name","description":"<p>The registered name of the business that owns the Sender ID</p>\n","type":"text"},{"key":"regno","value":"registration-number","description":"<p>The government issued registration of the organisation</p>\n","type":"text"},{"key":"address","value":"business-address","description":"<p>The valid operating address of the business.</p>\n","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/senderid/create/","description":"<p>To terminate your messages through the promotional bind, Sender ID submission for whitelisting is now a requirement. Use the endpoint below to submit your Sender IDs for whitelisting.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","senderid","create",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"da001d94-e2e2-4af3-95f4-80c7e47e22c0","name":"Submit Sender ID Example","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"your-apix-token","description":"Your API token.","type":"text"},{"key":"senderid","value":"sender-id","description":"The Sender ID to be submitted for whitelisting on the promotional bind","type":"text"},{"key":"message","value":"message-content","description":"A valid sample of the message that will be sent with the Sender ID","type":"text"},{"key":"organisation","value":"organisation-name","description":"The registered name of the business that owns the Sender ID","type":"text"},{"key":"regno","value":"registration-number","description":"The government issued registration of the organisation","type":"text"},{"key":"address","value":"business-address","description":"The valid operating address of the business.","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/senderid/create/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Tue, 25 May 2021 15:13:44 GMT"},{"key":"Server","value":"Apache"},{"key":"Expires","value":"Thu, 19 Nov 1981 08:52:00 GMT"},{"key":"Cache-Control","value":"no-store, no-cache, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Set-Cookie","value":"PHPSESSID=79d17e77449dad15cf7b47919af11a3f; path=/"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Vary","value":"Accept-Encoding,User-Agent"},{"key":"Content-Encoding","value":"gzip"},{"key":"Content-Length","value":"85"},{"key":"Keep-Alive","value":"timeout=5, max=100"},{"key":"Connection","value":"Keep-Alive"},{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"comment\": \"Sender ID has been submitted successfully\"\n}"}],"_postman_id":"41379f64-8194-490f-9deb-a2fccee9ed4b"},{"name":"Push DLR","id":"f8db35b6-160d-41c8-ab7c-c6583326e99e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"[\r\n    {\r\n        \"sender\": \"SENDER ID\",\r\n        \"mobile\": \"2348060000000\",\r\n        \"message\": \"You are welcome to our portal.\",\r\n        \"messagetype\": \"Plain Text\",\r\n        \"status\": \"DELIVERED\",\r\n        \"desc\": \"Message delivered to phone\",\r\n        \"smscount\": \"1\",\r\n        \"cost\": \"1.85\",\r\n        \"senttime\": \"2021-08-17 14:35:18\",\r\n        \"done\": \"2021-08-17 14:35:45\",\r\n        \"ref_id\": \"02608407318\",\r\n        \"xmxid\": \"msg-20210817-bhYwtdaeo66CfUXas74v9r7jpqbG2xRfvA7FfvE\"\r\n    },\r\n    {\r\n        \"sender\": \"My App\",\r\n        \"mobile\": \"2347080000000\",\r\n        \"message\": \"Your order has been successfully delivered.\",\r\n        \"messagetype\": \"Plain Text\",\r\n        \"status\": \"DELIVERED\",\r\n        \"desc\": \"Message delivered to phone\",\r\n        \"smscount\": \"1\",\r\n        \"cost\": \"2.85\",\r\n        \"senttime\": \"2021-08-17 14:35:05\",\r\n        \"done\": \"2021-08-17 14:35:47\",\r\n        \"ref_id\": \"06179684629192533\",\r\n        \"xmxid\": \"msg-20210817-SvHhqzaPcyFBV2cVIIDNMIOO1iZrhZ7zrPmge1px5n\"\r\n    }\r\n]"},"url":"https://example.com/dlr-callback-url","description":"<p>You can receive the delivery report of your messages directly into your app at the DLR callback URL you specify at <a href=\"https://app.smartsmssolutions.com/developer-dlr-callback-url\">https://app.smartsmssolutions.com/developer-dlr-callback-url</a>. The delivery report is delivered as a multi-dimensional JSON object</p>\n<p>The DLR data contains the following parameters:</p>\n<ul>\n<li><strong>SENDER</strong>: The sender ID of the message</li>\n<li><strong>MOBILE</strong>: The phone number the message was sent</li>\n<li><strong>MESSAGE</strong>: The content of the message</li>\n<li><strong>MESSAGETYPE</strong>: The type of the message. This can be any of the following: Plain Text, Flash Text, Unicode, or Unicode Flash</li>\n<li><strong>STATUS</strong>: The delivery status</li>\n<li><strong>DESC</strong>: Additional information about the delivery status</li>\n<li><strong>SMSCOUNT</strong>: The number of pages of the message</li>\n<li><strong>SENTTIME</strong>: The time the message was pushed</li>\n<li><strong>DONE</strong>: The time message was delivered or response was received from the MTO</li>\n<li><strong>REF_ID</strong>: If a custom ref_id was supplied when the message was submitted, this will be returned here</li>\n<li><strong>XMXID</strong>: Our custom id for the message group</li>\n</ul>\n","urlObject":{"protocol":"https","path":["dlr-callback-url"],"host":["example","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"f8db35b6-160d-41c8-ab7c-c6583326e99e"},{"name":"Phone Info","id":"b962dd10-1600-4d7c-a3ff-0820ef6d9fb8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://app.smartsmssolutions.com/io/api/client/v1/phone/info/?token=your-apix-token&phone=080xxxxxxxx&type=phone_info_type","description":"<p>The <strong>Phone Info</strong> endpoint provides phone extraction and separation tools. The endpoint extracts phone numbers from a string, separates phone numbers by networks, by the DND status and separates both by the network and the DND status. The pricing per phone number is on the <a href=\"https://smartsmssolutions.com/pricing\">Pricing Page</a> and <a href=\"https://app.smartsmssolutions.com/wallet-my-pricelist\">Pricelist Page</a>.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","phone","info",""],"host":["app","smartsmssolutions","com"],"query":[{"description":{"content":"<p>Your API token. You need an access token when sending requests. You can obtain one at the <a href=\"https://app.smartsmssolutions.com/developer-api-tokens\">API-x token management page</a>.</p>\n","type":"text/plain"},"key":"token","value":"your-apix-token"},{"description":{"content":"<p>The phone numbers you will like to retrieve their information.</p>\n","type":"text/plain"},"key":"phone","value":"080xxxxxxxx"},{"description":{"content":"<p>The type of information you will like to obtain. The <em>type</em> variable can be any of the values below: </p>\n<p><strong>0</strong> = Extract the phone numbers from a string without any classification.</p>\n<p><strong>1</strong> = Extract the phone numbers from a string and separate them by the network.</p>\n<p><strong>2</strong> = Extract the phone numbers from a string and separate them by their DND status</p>\n<p><strong>3</strong> = Extract the phone numbers from a string and separate them by both the network and the DND status</p>\n","type":"text/plain"},"key":"type","value":"phone_info_type"}],"variable":[]}},"response":[{"id":"22931f9c-e34a-4120-8830-f7f00a3d4116","name":"Phone Info","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://app.smartsmssolutions.com/io/api/client/v1/phone/info/?token=your-apix-token&phone=080xxxxxxxx&type=phone_info_type","protocol":"https","host":["app","smartsmssolutions","com"],"path":["io","api","client","v1","phone","info",""],"query":[{"key":"token","value":"your-apix-token","description":"Your API token. You need an access token when sending requests. You can obtain one at the [API-x token management page](https://app.smartsmssolutions.com/developer-api-tokens)."},{"key":"phone","value":"080xxxxxxxx","description":"The phone numbers you will like to retrieve their information. Multiple phone numbers can be supplied separated by commas."},{"key":"type","value":"phone_info_type","description":"The type of information you will like to obtain. The *type* variable can be any of the values below: \n\n**0** = Extract the phone numbers from a string without any classification.\n\n**1** = Extract the phone numbers from a string and separate them by the network.\n\n**2** = Extract the phone numbers from a string and separate them by their DND status\n\n**3** = Extract the phone numbers from a string and separate them by both the network and the DND status"}]}},"status":"OK","code":200,"_postman_previewlanguage":"html","header":[{"key":"Date","value":"Wed, 02 Feb 2022 09:16:43 GMT"},{"key":"Server","value":"Apache"},{"key":"Expires","value":"Thu, 19 Nov 1981 08:52:00 GMT"},{"key":"Cache-Control","value":"no-store, no-cache, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Vary","value":"Accept-Encoding,User-Agent"},{"key":"Content-Encoding","value":"gzip"},{"key":"Content-Length","value":"121"},{"key":"Keep-Alive","value":"timeout=5, max=100"},{"key":"Connection","value":"Keep-Alive"},{"key":"Content-Type","value":"text/html; charset=UTF-8"}],"cookie":[],"responseTime":null,"body":"{\"success\":true,\"comment\":\"Phone number extraction\\/separation successful\",\"data\":{\"9mobile\":[\"234809xxxxxxxx\"], \"mtn\":[\"234803xxxxxxx\",\"234703xxxxxxx\"], \"glo\":[\"234805xxxxxxx\", \"234705xxxxxxx\"]}}"}],"_postman_id":"b962dd10-1600-4d7c-a3ff-0820ef6d9fb8"}],"id":"6e802eb1-f121-4708-b4ef-ec17b8fa12e3","description":"<p>The following endpoints relate to the SMS products and services.</p>\n","_postman_id":"6e802eb1-f121-4708-b4ef-ec17b8fa12e3"},{"name":"SMS OTP","item":[{"name":"Send SMS OTP","id":"59e542ff-308f-49ea-849c-204666e8085e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"your-apix-token","description":"<p>You API token. If do not have one yet, kindly generate one at <a href=\"https://app.smartsmssolutions.com/developer-api-tokens\">https://app.smartsmssolutions.com/developer-api-tokens</a></p>\n","type":"text"},{"key":"phone","value":"080xxxxxxxx","description":"<p>The phone number of recipient of the OTP as SMS</p>\n","type":"text"},{"key":"otp","value":"xxxx","description":"<p>The OTP to be delivered to the recipient. Numeric values only.</p>\n","type":"text"},{"key":"sender","value":"sender-id","description":"<p>The Sender ID that will be used for the SMS OTP. This must be one of the approved Sender IDs for the SMS OTP. This can be found at <a href=\"https://app.smartsmssolutions.com/sms-otp-sender-ids\">https://app.smartsmssolutions.com/sms-otp-sender-ids</a></p>\n","type":"text"},{"key":"app_name_code","value":"0123456789","description":"<p>The 10-digit APP name code that identifies your app or your company. You can register a new one at <a href=\"https://app.smartsmssolutions.com/sms-otp-app-names\">https://app.smartsmssolutions.com/sms-otp-app-names</a></p>\n","type":"text"},{"key":"template_code","value":"10-digit-template-code","description":"<p>The 10-digit message content template code. The template code determines message content and how the OTP will be delivered. For the list of the template codes, please visit <a href=\"https://app.smartsmssolutions.com/sms-otp-message-templates\">https://app.smartsmssolutions.com/sms-otp-message-templates</a></p>\n","type":"text"},{"key":"ref_id","value":"unique-ref-id","description":"<p>Your custom reference id to uniquely identify the message. This will be returned on successful delivery and on DLR push.</p>\n","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/smsotp/send/","urlObject":{"protocol":"https","path":["io","api","client","v1","smsotp","send",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"60d4c99d-3cca-484e-9202-b25ea1704b1a","name":"Send SMS OTP","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"your-apix-token","description":"You API token. If do not have one yet, kindly generate one at https://app.smartsmssolutions.com/developer-api-tokens","type":"text"},{"key":"phone","value":"080xxxxxxxx","description":"The phone number of recipient of the OTP as SMS","type":"text"},{"key":"otp","value":"xxxx","description":"The OTP to be delivered to the recipient. Numeric values only.","type":"text"},{"key":"sender","value":"sender-id","description":"The Sender ID that will be used for the SMS OTP. This must be one of the approved Sender IDs for the SMS OTP. This can be found at https://app.smartsmssolutions.com/sms-otp-sender-ids","type":"text"},{"key":"template_code","value":"10-digit-template-code","description":"The 10-digit message content template code. The template code determines message content and how the OTP will be delivered. For the list of the template codes, please visit https://app.smartsmssolutions.com/sms-otp-message-templates","type":"text"},{"key":"ref_id","value":"unique-ref-id","description":"Your custom reference id to uniquely identify the message. This will be returned on successful delivery and on DLR push.","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/smsotp/send/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 09 Sep 2021 14:47:57 GMT"},{"key":"Server","value":"Apache"},{"key":"Expires","value":"Thu, 19 Nov 1981 08:52:00 GMT"},{"key":"Cache-Control","value":"no-store, no-cache, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Vary","value":"Accept-Encoding,User-Agent"},{"key":"Content-Encoding","value":"gzip"},{"key":"Content-Length","value":"139"},{"key":"Keep-Alive","value":"timeout=5, max=100"},{"key":"Connection","value":"Keep-Alive"},{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"comment\": \"SMS OTP sent successfully\",\n    \"log_id\": \"sotp-20210909-LEeKK6EMVYDg3kuCQ2FBS4U5kx\",\n    \"ref_id\": \"2003854034008203\"\n}"}],"_postman_id":"59e542ff-308f-49ea-849c-204666e8085e"}],"id":"a46c3c08-e533-4d47-9223-4af11cb78ac2","_postman_id":"a46c3c08-e533-4d47-9223-4af11cb78ac2","description":""},{"name":"VoiceOTP","item":[{"name":"Submit a VoiceOTP Request","id":"e4763a4e-9f33-49cf-81ea-1d6fe88928b4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"your-apix-token","description":"<p>Your API-x token from SmartSMS</p>\n","type":"text"},{"key":"phone","value":"080xxxxxxxx","description":"<p>The phone number you'll like to send the voice otp</p>\n","type":"text"},{"key":"otp","value":"xxxx","description":"<p>The 4-6 digits code you'd like to send. The length of the code is determine by the voice OTP class. You can learn more at ##</p>\n","type":"text"},{"key":"class","value":"XXXXXXXXXX","description":"<p>Optional. The voice OTP class. You find the list of available OTP classes at <a href=\"https://app.smartsmssolutions.com/voiceotp-otp-classes\">https://app.smartsmssolutions.com/voiceotp-otp-classes</a></p>\n","type":"text"},{"key":"ref_id","value":"","description":"<p>Optional. Your unique refca_id</p>\n","type":"text"},{"key":"call_channel","value":"","description":"<p>Optional. A 10-character string assigned to those delivering VoiceOTP with dedicated phone number. <a href=\"https://app.smartsmssolutions.com/voiceotp-custom-call-channel\">https://app.smartsmssolutions.com/voiceotp-custom-call-channel</a></p>\n","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/voiceotp/send/","description":"<p>Use this end point to send a VoiceOTP request</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","voiceotp","send",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"2e94e778-9315-4f36-85bc-baed1427fe9f","name":"Submit a VoiceOTP Request Example","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"your-apix-token","description":"Your API-x token from SmartSMS","type":"text"},{"key":"phone","value":"080xxxxxxxx","description":"The phone number you'll like to send the voice otp","type":"text"},{"key":"otp","value":"xxxx","description":"The 4-6 digits code you'd like to send. The length of the code is determine by the voice OTP class. You can learn more at ##","type":"text"},{"key":"class","value":"","description":"Optional. The voice OTP class","type":"text"},{"key":"ref_id","value":"","description":"Optional. Your unique ref_id","type":"text"}]},"url":"https://smartsmssolutions.com/io/client/v1/voiceotp/send/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"X-Frame-Options","value":"SAMEORIGIN"},{"key":"Vary","value":"User-Agent"},{"key":"Keep-Alive","value":"timeout=5, max=100"},{"key":"Connection","value":"Keep-Alive"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"comment\": \"Voice OTP submitted successfully\",\n    \"log_id\": \"votp-20210406-U3LyMSC5iB6JRbeaDe7whj0gNv\"\n}"}],"_postman_id":"e4763a4e-9f33-49cf-81ea-1d6fe88928b4"},{"name":"Get VoiceOTP Delivery Status","id":"72348b30-d2b7-4fc7-93a7-8ce3d269c726","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://app.smartsmssolutions.com/io/api/client/v1/voiceotp/status/?ref_id=72012291&log_id=votp-xxxxxxxx-yyyyyyyyyyyyyyyy&token=your-apix-token","description":"<p>This endpoint provides the status of VoiceOTP requests. You can requery the delivery status using either the <em><strong>ref_id</strong></em> you supplied or the <em><strong>log_id</strong></em> returned when a successful request is made.</p>\n<p>The returned json data provides insight to the status of the VoiceOTP.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","voiceotp","status",""],"host":["app","smartsmssolutions","com"],"query":[{"description":{"content":"<p>Optional. The ref_id you supplied when making the VoiceOTP request. </p>\n","type":"text/plain"},"key":"ref_id","value":"36631062"},{"description":{"content":"<p>Optional. The log_id that was returned on successful submission of the VoiceOTP request</p>\n","type":"text/plain"},"key":"log_id","value":"votp-xxxxxxxx-yyyyyyyyyyyyyyyy"},{"description":{"content":"<p>Required. Your API-x token from SmartSMS</p>\n","type":"text/plain"},"key":"token","value":"your-apix-token"}],"variable":[]}},"response":[{"id":"64f83cc6-2449-4ef8-b8d3-3539f249dc84","name":"Get VoiceOTP Delivery Status","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://app.smartsmssolutions.com/io/api/client/v1/voiceotp/status/?ref_id=66584060&log_id=votp-xxxxxxxx-yyyyyyyyyyyy&token=your-apix-token","protocol":"https","host":["app","smartsmssolutions","com"],"path":["io","api","client","v1","voiceotp","status",""],"query":[{"key":"ref_id","value":"00040163","description":"Optional. The ref_id you supplied when making the VoiceOTP request. "},{"key":"log_id","value":"votp-xxxxxxxx-yyyyyyyyyyyy","description":"Optional. The log_id that was returned on successful submission of the VoiceOTP request"},{"key":"token","value":"your-apix-token","description":"Required. Your API-x token from SmartSMS"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Mon, 21 Aug 2023 19:30:51 GMT"},{"key":"Server","value":"Apache"},{"key":"Expires","value":"Thu, 19 Nov 1981 08:52:00 GMT"},{"key":"Cache-Control","value":"no-store, no-cache, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Vary","value":"Accept-Encoding,User-Agent"},{"key":"Content-Encoding","value":"gzip"},{"key":"Content-Length","value":"223"},{"key":"Keep-Alive","value":"timeout=5, max=100"},{"key":"Connection","value":"Keep-Alive"},{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"comment\": \"VoiceOTP DLR query successful\",\n    \"dlr_status\": \"answered\",\n    \"dlr_comment\": \"VoiceOTP delivered successfully, recipient answered the call\",\n    \"bill\": \"1.80\",\n    \"phone\": \"2348030000000\",\n    \"wallet_before\": \"145007.48\",\n    \"wallet_after\": \"125005.68\",\n    \"submitted\": \"2023-08-21 20:17:10\",\n    \"sent\": \"2023-08-21 20:17:10\",\n    \"done\": \"2023-08-21 19:17:12\",\n    \"log_id\":\"xxxxxxxxxx\",\n    \"ref_id\":\"yyyyyyyy\"\n}"}],"_postman_id":"72348b30-d2b7-4fc7-93a7-8ce3d269c726"}],"id":"7a39d66d-e6f8-4059-a128-a7a336470189","description":"<p>VoiceOTP from SmartSMSSolutions makes it possible for you to submit a one-time password to be delivered to any phone number by voice. This improves deliverability and removes the issues with DND.</p>\n<h3 id=\"voiceotp-templates\">VoiceOTP Templates</h3>\n<p>When delivering VoiceOTP, there are audio template classes that can be used. Public template classes can be found at <a href=\"https://smartsmssolutions.com/sms/voiceotp?layout=otpclasses\">the VoiceOTP classes page</a>. The page also provides information about the average length of the VoiceOTP and the pricing.</p>\n<p>If you desire a custom audio template to be used for your VoiceOTPs, kindly submit a request at <a href=\"https://smartsmssolutions.com/sms/voiceotp?layout=customrequest\">the custom VoiceOTP request page.</a></p>\n","_postman_id":"7a39d66d-e6f8-4059-a128-a7a336470189"},{"name":"SIMHosting","item":[{"name":"Inbox Forwarding","id":"a2de28cd-777b-4352-8662-a7c7457a7a01","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"data","value":"[\n   {\n      \"from\":\"+2348020000000\",\n      \"message\":\"This is the inbox message\",\n      \"server_name\":\"YOUR_CUSTOM_SERVER_NAME\",\n      \"server_number\":\"2349020000000\",\n      \"server_token\":\"YOUR_UNIQUE_SERVER_TOKEN\",\n      \"received_time\":\"2021-08-16 15:45:30\"\n   }\n]","description":"<p>A JSON data contain the details of the SMS inbox. The JSON is a multi-dimensional object. Each object contains the following:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>FROM: The phone number of the sender    \nMESSAGE: The message content    \nSERVER_NAME: The name of the server i.e. the hosted SIM phone number that the message was sent    \nSERVER_TOKEN: The unique 20-character string. Also refers to as the SIMSERVER_TOKEN. This might be required if you would like to send a reply via the same SIM    \nTIME: The time the message was received\n</code></pre>","type":"text"}]},"url":"https://example.com/your-simhosting-inbox-forwarding-end-point","description":"<p>When you have a hosted SIM, messages sent to the hosted SIM phone number can be forwarded to an end-point you specify. Immediately an SMS is received, the data will be sent to the endpoint as POST data. </p>\n<p>To specify your Inbox Forwarding PUSH URL kindly visit <a href=\"https://app.smartsmssolutions.com/simhosting-inbox-forwarding\">https://app.smartsmssolutions.com/simhosting-inbox-forwarding</a>. The URL must return a header with “200 OK” to be accepted. </p>\n<p>The inbox data is a multi-dimensional JSON object. A sample response can be found below.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>[ \n  {\n      \"from\":\"+2348020000000\",\n      \"message\":\"This is the inbox message\",\n      \"server_name\":\"YOUR_CUSTOM_SERVER_NAME\",\n      \"Server_number\":\"2349020000000\",\n      \"server_token\":\"YOUR_UNIQUE_SERVER_TOKEN\",\n      \"received_time\":\"2021-08-16 15:45:30\"    \n   }    \n]\n</code></pre><p><strong>FROM:</strong> The phone number of the sender </p>\n<p><strong>MESSAGE</strong>: The message content </p>\n<p><strong>SERVER_NAME</strong>: The name of the server i.e. the hosted SIM phone number that the message was sent </p>\n<p><strong>SERVER_TOKEN</strong>: The unique 20-character string. Also refers to as the \nSIMSERVER_TOKEN. This might be required if you would like to send a reply via the same SIM </p>\n<p><strong>TIME</strong>: The time the message was received</p>\n","urlObject":{"protocol":"https","path":["your-simhosting-inbox-forwarding-end-point"],"host":["example","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"a2de28cd-777b-4352-8662-a7c7457a7a01"}],"id":"d1552095-ac2f-4165-8a4a-21685cf915f1","_postman_id":"d1552095-ac2f-4165-8a4a-21685cf915f1","description":""},{"name":"Airtime","item":[{"name":"Buy Airtime","id":"d7ffab7e-9f31-4298-8d16-33c0fa458d29","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"phone","value":"080xxxxxxxx","description":"<p>The phone number to be recharged with airtime</p>\n","type":"text"},{"key":"amount","value":"airtime_amount","description":"<p>The amount to be recharged in NGN. MInimum is NGN50 and the maximum is NGN200,000</p>\n","type":"text"},{"key":"token","value":"your-apix-token","description":"<p>Your API token. You can generate one at <a href=\"https://app.smartsmssolutions.com/developer-api-tokens\">https://app.smartsmssolutions.com/developer-api-tokens</a>.</p>\n","type":"text"},{"key":"ref_id","value":"custom_ref_id","description":"<p>STRING. Your custom reference. Only alphabets and numerals allowed.  This will be returned with the result.</p>\n","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/airtime/buy/","urlObject":{"protocol":"https","path":["io","api","client","v1","airtime","buy",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"6927a870-8cd9-4496-93eb-043891fc7043","name":"Buy Airtime","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"phone","value":"080xxxxxxxx","description":"The phone number to be recharged with airtime","type":"text"},{"key":"amount","value":"airtime_amount","description":"The amount to be recharged in NGN. MInimum is NGN50 and the maximum is NGN200,000","type":"text"},{"key":"token","value":"your-apix-token","description":"Your API token. You can generate one at https://app.smartsmssolutions.ng/developer-api-tokens.","type":"text"},{"key":"ref_id","value":"custom_ref_id","description":"Your custom reference  This will be returned with the result.","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/airtime/buy/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 22 Dec 2021 10:33:52 GMT"},{"key":"Server","value":"Apache"},{"key":"Expires","value":"Thu, 19 Nov 1981 08:52:00 GMT"},{"key":"Cache-Control","value":"no-store, no-cache, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Set-Cookie","value":"PHPSESSID=32155b550d6fbbdcfc384756f9a77b29; path=/"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Vary","value":"Accept-Encoding,User-Agent"},{"key":"Content-Encoding","value":"gzip"},{"key":"Content-Length","value":"169"},{"key":"Keep-Alive","value":"timeout=5, max=100"},{"key":"Connection","value":"Keep-Alive"},{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"comment\": \"Purchase successful\",\n    \"data\": {\n        \"id\": \"299020211222113353765869\",\n        \"value\": \"100.0000\",\n        \"billed\": \"100.0000\",\n        \"balance\": \"46703.5010\",\n        \"description\": \"Purchase of NGN100.00 9mobile Airtime at NGN100.00 on 23480xxxxxx\",\n        \"ref_id\": \"ABCDE12345\"\n    }\n}"}],"_postman_id":"d7ffab7e-9f31-4298-8d16-33c0fa458d29"}],"id":"a5909d35-5049-4160-bd6e-ee1c0438bbc1","_postman_id":"a5909d35-5049-4160-bd6e-ee1c0438bbc1","description":""},{"name":"Internet Data","item":[{"name":"Buy Internet Data","id":"68eb7dd1-24b1-41a2-8218-15bc6ca79167","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"phone","value":"your-apix-token","description":"<p>The phone number to be recharged with the internet data</p>\n","type":"text"},{"key":"product_name","value":"data_product_name","description":"<p>The name of the data product to be purchased. The list of available data products, and their prices can be obtained by calling the  <strong>internet_data/products</strong> endpoint.</p>\n","type":"text"},{"key":"token","value":"your-apix-token","description":"<p>Your API token. You can generate one at <a href=\"https://app.smartsmssolutions.com/developer-api-tokens\">https://app.smartsmssolutions.com/developer-api-tokens</a>.</p>\n","type":"text"},{"key":"ref_id","value":"ref_id","description":"<p>Your custom reference. Only alphabets and numerals are allowed.</p>\n","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/internet_data/buy/","description":"<p>This endpoint allows you to purchase internet data. You will need to specify the product_name. This can be assessed at the endpoint - <a href=\"https://app.smartsmssolutions.com/io/api/client/v1/internet_data/products/\">https://app.smartsmssolutions.com/io/api/client/v1/internet_data/products/</a></p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","internet_data","buy",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"abeba552-fe69-4e63-a5cd-ace425accfe0","name":"Buy Internet Data","originalRequest":{"method":"POST","header":[],"body":{"mode":"urlencoded","urlencoded":[{"key":"phone","value":"080xxxxxxxx","description":"The phone number to be recharged with the internet data","type":"text"},{"key":"product_name","value":"data_product_name","description":"The name of the data product to be purchased. The list of available data products, and their prices can be obtained by calling the  **internet_data/prodcts** endpoint.","type":"text"},{"key":"token","value":"your-apix-token","description":"Your API token. You can generate one at https://app.smartsmssolutions.ng/developer-api-tokens.","type":"text"},{"key":"ref_id","value":"ref_id","description":"Your custom reference. Only alphabets and numerals are allowed.","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/internet_data/buy/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 22 Dec 2021 12:39:33 GMT"},{"key":"Server","value":"Apache"},{"key":"Expires","value":"Thu, 19 Nov 1981 08:52:00 GMT"},{"key":"Cache-Control","value":"no-store, no-cache, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Set-Cookie","value":"PHPSESSID=1712a1d591fd5e24c6a2721cd93987b0; path=/"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Vary","value":"Accept-Encoding,User-Agent"},{"key":"Content-Encoding","value":"gzip"},{"key":"Content-Length","value":"221"},{"key":"Keep-Alive","value":"timeout=5, max=100"},{"key":"Connection","value":"Keep-Alive"},{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"comment\": \"Purchase successful\",\n    \"data\": {\n        \"id\": \"291220219237433933192760\",\n        \"value\": \"5000.0000\",\n        \"billed\": \"5000.0000\",\n        \"balance\": \"56703.5010\",\n        \"description\": \"Purchase of  PRODUCT_NAME at NGN50.00 on 23480xxxxxxxx\",\n        \"ref_id\": \"20211444113243829982\"\n    }\n}"}],"_postman_id":"68eb7dd1-24b1-41a2-8218-15bc6ca79167"},{"name":"Data Products List","id":"68d34e7f-90e8-443e-b9d4-de25748bb5be","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://app.smartsmssolutions.com/io/api/client/v1/internet_data/products/?phone=080xxxxxxxx&token=your-apix-token","description":"<p>Use this endpoint to find the available data products, their prices, validity, and discounts/surcharges. One of the product names may then be used to make a purchase using the endpoint <a href=\"https://app.smartsmssolutions.com/io/api/client/v1/internet_data/buy/\">https://app.smartsmssolutions.com/io/api/client/v1/internet_data/buy/</a></p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","internet_data","products",""],"host":["app","smartsmssolutions","com"],"query":[{"description":{"content":"<p>The phone number that products list is required.</p>\n","type":"text/plain"},"key":"phone","value":"080xxxxxxxx"},{"description":{"content":"<p>Your API token. You can generate one at <a href=\"https://app.smartsmssolutions.com/developer-api-tokens\">https://app.smartsmssolutions.com/developer-api-tokens</a>.</p>\n","type":"text/plain"},"key":"token","value":"your-apix-token"}],"variable":[]}},"response":[{"id":"5019754a-3956-4593-9e87-0b548cb838b9","name":"Data Products List","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://app.smartsmssolutions.com/io/api/client/v1/internet_data/products/?phone=080xxxxxxxx&token=your-apix-token","protocol":"https","host":["app","smartsmssolutions","com"],"path":["io","api","client","v1","internet_data","products",""],"query":[{"key":"phone","value":"080xxxxxxxx","description":"The phone number that products list is required."},{"key":"token","value":"your-apix-token","description":"Your API token. You can generate one at https://app.smartsmssolutions.com/developer-api-tokens."}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Wed, 22 Dec 2021 13:42:48 GMT"},{"key":"Server","value":"Apache"},{"key":"Expires","value":"Thu, 19 Nov 1981 08:52:00 GMT"},{"key":"Cache-Control","value":"no-store, no-cache, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Vary","value":"Accept-Encoding,User-Agent"},{"key":"Content-Encoding","value":"gzip"},{"key":"Content-Length","value":"561"},{"key":"Keep-Alive","value":"timeout=5, max=100"},{"key":"Connection","value":"Keep-Alive"},{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"success\": true,\n    \"comment\": \"Data products loaded successfully\",\n    \"data\": {\n        \"phone\": \"+234803xxxxxxx\",\n        \"product_type\": \"MTN Data\",\n        \"products\": [\n            {\n                \"product_name\": \"MTN DATA - 100MB (1 DAY)\",\n                \"value\": \"NGN 100.0000\",\n                \"validity\": \"1 Days\",\n                \"volume\": \"100 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 200MB (2 DAYS)\",\n                \"value\": \"NGN 200.0000\",\n                \"validity\": \"2 Days\",\n                \"volume\": \"200 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 2.5GB (2 DAYS)\",\n                \"value\": \"NGN 500.0000\",\n                \"validity\": \"2 Days\",\n                \"volume\": \"2500 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 350MB (7 DAYS)\",\n                \"value\": \"NGN 300.0000\",\n                \"validity\": \"7 Days\",\n                \"volume\": \"350 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 750MB (7 DAYS)\",\n                \"value\": \"NGN 500.0000\",\n                \"validity\": \"7 Days\",\n                \"volume\": \"750 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 1GB (7 DAYS)\",\n                \"value\": \"NGN 500.0000\",\n                \"validity\": \"7 Days\",\n                \"volume\": \"1000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 6GB (7 DAYS)\",\n                \"value\": \"NGN 1500.0000\",\n                \"validity\": \"7 Days\",\n                \"volume\": \"6000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 750MB (14 DAYS)\",\n                \"value\": \"NGN 500.0000\",\n                \"validity\": \"14 Days\",\n                \"volume\": \"750 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 1.5GB (30 DAYS)\",\n                \"value\": \"NGN 1000.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"1500 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 2GB (30 DAYS)\",\n                \"value\": \"NGN 1200.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"2000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 3GB (30 DAYS)\",\n                \"value\": \"NGN 1500.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"3000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 4.5GB (30 DAYS)\",\n                \"value\": \"NGN 2000.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"4500 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 6GB (30 DAYS)\",\n                \"value\": \"NGN 2500.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"6000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 10GB (30 DAYS)\",\n                \"value\": \"NGN 3000.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"10000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 12GB (30 DAYS)\",\n                \"value\": \"NGN 3500.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"12000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 15GB (30 DAYS)\",\n                \"value\": \"NGN 5000.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"15000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 20GB (30 DAYS)\",\n                \"value\": \"NGN 5000.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"20000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 25GB (30 DAYS)\",\n                \"value\": \"NGN 6000.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"25000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 30GB (30 DAYS)\",\n                \"value\": \"NGN 10000.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"30000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 40GB (30 DAYS)\",\n                \"value\": \"NGN 10000.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"40000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 50GB (30 DAYS)\",\n                \"value\": \"NGN 15000.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"50000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 70GB (30 DAYS)\",\n                \"value\": \"NGN 20000.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"70000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 75GB (30 DAYS)\",\n                \"value\": \"NGN 15000.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"75000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 90GB (30 DAYS)\",\n                \"value\": \"NGN 40000.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"90000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 110GB (30 DAYS)\",\n                \"value\": \"NGN 20000.0000\",\n                \"validity\": \"30 Days\",\n                \"volume\": \"110000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 30GB (60 DAYS)\",\n                \"value\": \"NGN 8000.0000\",\n                \"validity\": \"60 Days\",\n                \"volume\": \"30000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 75GB (60 DAYS)\",\n                \"value\": \"NGN 20000.0000\",\n                \"validity\": \"60 Days\",\n                \"volume\": \"75000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 120GB (60 DAYS)\",\n                \"value\": \"NGN 30000.0000\",\n                \"validity\": \"60 Days\",\n                \"volume\": \"120000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 150GB (90 DAYS)\",\n                \"value\": \"NGN 50000.0000\",\n                \"validity\": \"90 Days\",\n                \"volume\": \"150000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 250GB (90 DAYS)\",\n                \"value\": \"NGN 75000.0000\",\n                \"validity\": \"90 Days\",\n                \"volume\": \"250000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 325GB (180 DAYS)\",\n                \"value\": \"NGN 100000.0000\",\n                \"validity\": \"180 Days\",\n                \"volume\": \"325000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 400GB (365 DAYS)\",\n                \"value\": \"NGN 120000.0000\",\n                \"validity\": \"365 Days\",\n                \"volume\": \"400000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 1TB (365 DAYS)\",\n                \"value\": \"NGN 100000.0000\",\n                \"validity\": \"365 Days\",\n                \"volume\": \"1000000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            },\n            {\n                \"product_name\": \"MTN DATA - 1.5TB (365 DAYS)\",\n                \"value\": \"NGN 450000.0000\",\n                \"validity\": \"365 Days\",\n                \"volume\": \"1500000 MB\",\n                \"percent\": \"0.0000\",\n                \"fixed\": \"0.0000\"\n            }\n        ]\n    }\n}"}],"_postman_id":"68d34e7f-90e8-443e-b9d4-de25748bb5be"}],"id":"bd9e65a5-f2f6-4db3-86e1-2b58cf804b0d","description":"<p>This collection of endpoints allows you to make internet data purchases through your API.</p>\n","_postman_id":"bd9e65a5-f2f6-4db3-86e1-2b58cf804b0d"},{"name":"Email","item":[{"name":"0. Getting Started","item":[],"id":"039929dd-ba65-42c4-baf7-bae165155014","description":"<p>Welcome to the SmartSMS Email API collection v4.</p>\n<p>SETUP:</p>\n<ol>\n<li>Import this collection</li>\n<li>Import the environment file SmartSMS Email API - Environment</li>\n<li>Select the environment in the top-right dropdown</li>\n<li>Set email_token to your real API token from Settings → API Tokens in your dashboard</li>\n<li>Set test_email to a real inbox you can check</li>\n</ol>\n<p>API Base URL: <a href=\"https://app.smartsmssolutions.com/io/api/client/v1/email/\">https://app.smartsmssolutions.com/io/api/client/v1/email/</a>\nAll endpoints: POST with application/x-www-form-urlencoded body.\nToken: always in POST body field named token — never as a query string parameter.</p>\n<p>AUTHENTICATION:\nAll endpoints require a valid client API token in the POST body.\nObtain tokens from: <a href=\"https://app.smartsmssolutions.com/developer-api-tokens\">https://app.smartsmssolutions.com/developer-api-tokens</a></p>\n<p>RESPONSE FORMAT:\nAll responses return application/json.\nSuccess: { \"status\": \"success\", \"data\": { ... } }\nError:   { \"status\": \"error\",   \"message\": \"...\" }\nHTTP 200 for all responses. Status communicated via the status field.</p>\n<p>RESPONSE FIELDS:\nAll response fields use clean public names — no database column prefixes.\nField mapping reference:\n  message_id      — unique ID of the sent email (use with message/status/)\n  template_id     — unique ID of a template\n  sender_id       — unique ID of a sender identity\n  profile_id      — unique ID of a brand profile\n  domain_id       — unique ID of a registered sending domain\n  verification_status — pending | verified</p>\n<p>COMPLAINT RATE:\ncomplaint_rate &gt; 0.08 triggers a deliverability warning on your dashboard.\nMonitor via the stats endpoint and act on complaint events via webhooks.</p>\n","_postman_id":"039929dd-ba65-42c4-baf7-bae165155014"},{"name":"1. Send Email","item":[{"name":"Send - OTP authentication (template)","event":[{"listen":"test","script":{"exec":["pm.test(\"Status is success\", function() {","    var j = pm.response.json();","    pm.expect(j.status).to.eql(\"success\");","});","pm.test(\"ems_id returned\", function() {","    var j = pm.response.json();","    pm.expect(j.data.ems_id).to.be.a(\"number\");","    pm.environment.set(\"last_ems_id\", j.data.ems_id);","});"],"type":"text/javascript","id":"044f1c24-08f6-4a73-a37b-8fcab808b4bb"}}],"id":"56f0105d-8db4-4488-a536-f81ff4588783","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"to_email","value":"test@example.com","type":"text","description":"<p>Recipient email address</p>\n"},{"key":"to_name","value":"Test User","type":"text","description":"<p>Recipient display name</p>\n"},{"key":"message_type","value":"authentication","type":"text","description":"<p>authentication / transactional / operational</p>\n"},{"key":"template_id","value":"1","type":"text","description":"<p>etm_id of active OTP template</p>\n"},{"key":"variables","value":"{\"otp_code\":\"847291\",\"expiry_minutes\":\"10\"}","type":"text","description":"<p>JSON substitution values</p>\n"},{"key":"idempotency_key","value":"user-456-login-1","type":"text","description":"<p>Optional. Dedup key for authentication type only</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/","description":"<p>Send an OTP email using a platform template. The variables parameter is JSON-encoded substitutions. The OTP code is never stored in the database. Test script auto-saves last_ems_id to the environment.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","send",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"e2a5167f-81b0-43dc-962d-4916c7f09370","name":"Send OTP template - success","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"to_email","value":"test@example.com","type":"text"},{"key":"message_type","value":"authentication","type":"text"},{"key":"template_id","value":"1","type":"text"},{"key":"variables","value":"{\"otp_code\":\"847291\",\"expiry_minutes\":\"10\"}","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": {\n    \"message_id\": 5842\n  }\n}"}],"_postman_id":"56f0105d-8db4-4488-a536-f81ff4588783"},{"name":"Send - OTP authentication (inline)","event":[{"listen":"test","script":{"exec":["pm.test(\"Status is success\", function() {","    var j = pm.response.json();","    pm.expect(j.status).to.eql(\"success\");","});","pm.test(\"ems_id returned\", function() {","    var j = pm.response.json();","    pm.expect(j.data.ems_id).to.be.a(\"number\");","    pm.environment.set(\"last_ems_id\", j.data.ems_id);","});"],"type":"text/javascript","id":"242f3fda-f66a-40bc-9ebd-451fd6696455"}}],"id":"2f48f0a0-4125-4bb5-ae41-523b77f63c09","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"to_email","value":"test@example.com","type":"text","description":"<p>Recipient email address</p>\n"},{"key":"message_type","value":"authentication","type":"text"},{"key":"subject","value":"Your verification code","type":"text","description":"<p>Required for inline sends</p>\n"},{"key":"html","value":"<h2>Your OTP is <strong>847291</strong></h2><p>Expires in 10 minutes.</p>","type":"text","description":"<p>HTML body - required for inline sends</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/","description":"<p>Send an authentication email with inline subject and HTML body instead of a template.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","send",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"6c0c1430-d71b-476e-95ab-c2dc5c2c43fb","name":"Send OTP inline - success","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"to_email","value":"test@example.com","type":"text"},{"key":"message_type","value":"authentication","type":"text"},{"key":"subject","value":"Your verification code","type":"text"},{"key":"html","value":"<h2>Your OTP is <strong>847291</strong></h2>","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": {\n    \"message_id\": 5842\n  }\n}"}],"_postman_id":"2f48f0a0-4125-4bb5-ae41-523b77f63c09"},{"name":"Send - Transactional (template)","event":[{"listen":"test","script":{"exec":["pm.test(\"Status is success\", function() {","    var j = pm.response.json();","    pm.expect(j.status).to.eql(\"success\");","});","pm.test(\"ems_id returned\", function() {","    var j = pm.response.json();","    pm.expect(j.data.ems_id).to.be.a(\"number\");","    pm.environment.set(\"last_ems_id\", j.data.ems_id);","});"],"type":"text/javascript","id":"c67c98d7-c3a7-4513-8eb1-74bbde00ab77"}}],"id":"ab1b9e05-20b1-4025-bc01-248b86b836bd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"to_email","value":"test@example.com","type":"text","description":"<p>Recipient email address</p>\n"},{"key":"to_name","value":"Test User","type":"text","description":"<p>Recipient display name</p>\n"},{"key":"message_type","value":"transactional","type":"text","description":"<p>transactional for receipts and order updates</p>\n"},{"key":"template_id","value":"2","type":"text","description":"<p>etm_id of active transactional template</p>\n"},{"key":"variables","value":"{\"order_id\":\"ORD-1234\",\"amount\":\"N15500\",\"item\":\"Samsung A55\"}","type":"text","description":"<p>JSON substitution values</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/","description":"<p>Send a transactional email using a template. An unsubscribe footer is automatically appended to all non-authentication sends.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","send",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"8a1120f6-392c-40e2-8394-5b82d5e51074","name":"Send transactional template - success","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"to_email","value":"test@example.com","type":"text"},{"key":"message_type","value":"transactional","type":"text"},{"key":"template_id","value":"2","type":"text"},{"key":"variables","value":"{\"order_id\":\"ORD-1234\"}","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": {\n    \"message_id\": 5842\n  }\n}"}],"_postman_id":"ab1b9e05-20b1-4025-bc01-248b86b836bd"},{"name":"Send - Transactional (inline)","id":"48c925b9-a845-485e-b0f2-6b0accc08fce","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"to_email","value":"test@example.com","type":"text","description":"<p>Recipient email address</p>\n"},{"key":"message_type","value":"transactional","type":"text"},{"key":"subject","value":"Your order #1234 has shipped","type":"text"},{"key":"html","value":"<h2>Your order has shipped</h2><p>Order #1234 is on its way.</p>","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/","description":"<p>Send a transactional email with inline subject and HTML body.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","send",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"5e4bb75b-c039-494b-b582-55c7b03b0b9d","name":"Send transactional inline - success","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"to_email","value":"test@example.com","type":"text"},{"key":"message_type","value":"transactional","type":"text"},{"key":"subject","value":"Your order has shipped","type":"text"},{"key":"html","value":"<h2>Your order has shipped</h2>","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": {\n    \"message_id\": 5842\n  }\n}"}],"_postman_id":"48c925b9-a845-485e-b0f2-6b0accc08fce"},{"name":"Send - Operational (inline)","id":"ae9b504a-02ec-4541-ad7a-fd1857681624","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"to_email","value":"test@example.com","type":"text","description":"<p>Recipient email address</p>\n"},{"key":"message_type","value":"operational","type":"text","description":"<p>operational for system alerts and account notices</p>\n"},{"key":"subject","value":"Scheduled maintenance - 2026-04-01 02:00 WAT","type":"text"},{"key":"html","value":"<p>We will perform scheduled maintenance on 1 April 2026 from 02:00 to 04:00 WAT.</p>","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/","description":"<p>Send an operational email for system alerts and maintenance notices.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","send",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"3256ab82-3e47-4237-a420-febcb497ccee","name":"Send operational - success","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"to_email","value":"test@example.com","type":"text"},{"key":"message_type","value":"operational","type":"text"},{"key":"subject","value":"Scheduled maintenance notice","type":"text"},{"key":"html","value":"<p>Maintenance scheduled.</p>","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": {\n    \"message_id\": 5842\n  }\n}"}],"_postman_id":"ae9b504a-02ec-4541-ad7a-fd1857681624"},{"name":"Send - with idempotency key","id":"e66f7f61-53bc-4662-a0c5-94275c69c57b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"to_email","value":"test@example.com","type":"text"},{"key":"message_type","value":"authentication","type":"text","description":"<p>Idempotency only works for authentication type</p>\n"},{"key":"template_id","value":"1","type":"text"},{"key":"variables","value":"{\"otp_code\":\"123456\",\"expiry_minutes\":\"5\"}","type":"text"},{"key":"idempotency_key","value":"user-456-password-reset-1","type":"text","description":"<p>Unique key per send attempt. Same key returns original result without re-sending.</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/","description":"<p>Idempotency: sending the same idempotency_key for a non-failed message returns the original ems_id without re-sending. Idempotency is supported for authentication type only.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","send",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"66afa387-e5dd-4ab1-9482-8150644e5fd3","name":"Idempotency hit - success","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"to_email","value":"test@example.com","type":"text"},{"key":"message_type","value":"authentication","type":"text"},{"key":"template_id","value":"1","type":"text"},{"key":"variables","value":"{\"otp_code\":\"123456\"}","type":"text"},{"key":"idempotency_key","value":"user-456-password-reset-1","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": {\n    \"message_id\": 5842\n  }\n}"}],"_postman_id":"e66f7f61-53bc-4662-a0c5-94275c69c57b"},{"name":"Send - ERROR: missing token","event":[{"listen":"test","script":{"exec":["pm.test(\"Returns 401 for missing token\", function() {","    pm.response.to.have.status(401);","});"],"type":"text/javascript","id":"3c9ed2eb-1ec9-4938-90e8-7f59dbecf8ff"}}],"id":"6bd481c5-d55c-4c97-bbaf-0926ec2a52f7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"","type":"text","description":"<p>Intentionally blank to trigger 401</p>\n"},{"key":"to_email","value":"test@example.com","type":"text"},{"key":"message_type","value":"authentication","type":"text"},{"key":"template_id","value":"1","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/","description":"<p>Expected result: 401 Unauthorized - API token is required.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","send",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"788ffc73-216b-40bc-bf42-771f117d004b","name":"ERROR: token absent","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"","type":"text"},{"key":"to_email","value":"test@example.com","type":"text"},{"key":"message_type","value":"authentication","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/"},"status":"Unauthorized","code":401,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"error\",\n    \"message\": [\n        \"API token is required.\"\n    ]\n}"}],"_postman_id":"6bd481c5-d55c-4c97-bbaf-0926ec2a52f7"},{"name":"Send - ERROR: invalid email","id":"12bd5447-e11f-4a18-bc5a-cb542d10c04d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"to_email","value":"not-a-valid-email","type":"text","description":"<p>Intentionally invalid to trigger validation error</p>\n"},{"key":"message_type","value":"authentication","type":"text"},{"key":"template_id","value":"1","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/","description":"<p>Expected result: error - Recipient email address is invalid.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","send",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"8034c34b-0413-497e-9341-e5246371da01","name":"ERROR: invalid email","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"to_email","value":"not-a-valid-email","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"error\",\n    \"message\": [\n        \"Recipient email address is invalid.\"\n    ]\n}"}],"_postman_id":"12bd5447-e11f-4a18-bc5a-cb542d10c04d"},{"name":"Send - ERROR: suppressed address","id":"54f1bd36-17c9-4506-a208-832e73ebb090","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"to_email","value":"suppressed@example.com","type":"text","description":"<p>An address that has hard bounced or complained - suppressed platform-wide</p>\n"},{"key":"message_type","value":"transactional","type":"text"},{"key":"subject","value":"Test suppression","type":"text"},{"key":"html","value":"<p>Test</p>","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/","description":"<p>Expected result: error - Email address is suppressed. Addresses are suppressed platform-wide after a hard bounce or spam complaint.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","send",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"ea8449b5-3d99-4892-a1af-116f2779956b","name":"ERROR: suppressed address","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"to_email","value":"suppressed@example.com","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"error\",\n    \"message\": [\n        \"Email address is suppressed.\"\n    ]\n}"}],"_postman_id":"54f1bd36-17c9-4506-a208-832e73ebb090"},{"name":"Send - ERROR: marketing blocked","id":"1e6d4bdd-45a0-41ed-bf6c-08695d31f7fd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"to_email","value":"test@example.com","type":"text"},{"key":"message_type","value":"marketing","type":"text","description":"<p>marketing is blocked in Stage 1</p>\n"},{"key":"subject","value":"Big sale!","type":"text"},{"key":"html","value":"<p>Special offer inside</p>","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/","description":"<p>Expected result: error - Marketing sends are not available in Stage 1.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","send",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"b35a9e45-d6bf-4023-bf4a-ca968a1e7517","name":"ERROR: marketing blocked","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"message_type","value":"marketing","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/send/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"error\",\n    \"message\": [\n        \"Marketing sends are not available in Stage 1.\"\n    ]\n}"}],"_postman_id":"1e6d4bdd-45a0-41ed-bf6c-08695d31f7fd"}],"id":"059ef1db-1f77-4c9f-a4af-4bfa9387797f","description":"<p>Send transactional, authentication, and operational emails via POST /email/send/</p>\n<p>message_type determines which product and sending subdomain is used:\n  authentication  → Smart Verify   (auth.smartsmssolutions.com)\n  transactional   → Smart Notify   (notify.smartsmssolutions.com)\n  operational     → Smart Notify   (notify.smartsmssolutions.com)\n  marketing       → Smart Reach    (BLOCKED in Stage 1 — not yet available)</p>\n<p>BODY SOURCE — one of the following must be supplied:\n  template_id + variables (JSON)   — use a saved template with variable substitution\n  subject + html                   — inline body with optional text fallback</p>\n<p>OPTIONAL:\n  to_name, sender_id, contact_id, idempotency_key</p>\n<p>SUCCESS RESPONSE:\n  { \"message_id\": 5842 }</p>\n<p>Use message_id with the Message Status endpoint to track delivery.</p>\n<p>UNSUBSCRIBE HANDLING (July 2026): all non-authentication sends carry a signed unsubscribe link. If your template or inline HTML contains the reserved {{unsubscribe_url}} placeholder, the link is positioned there inside your design; otherwise a small footer is appended automatically. Recipients who unsubscribe are suppressed for YOUR account only (client-scoped) — subsequent sends to that address return the \"Email address is suppressed\" error. unsubscribe_url must not be listed in variables_schema or supplied in the variables parameter.</p>\n","_postman_id":"059ef1db-1f77-4c9f-a4af-4bfa9387797f"},{"name":"2. Message Status","item":[{"name":"Check status - delivered","event":[{"listen":"test","script":{"exec":["pm.test(\"Status is success\", function() {","    pm.expect(pm.response.json().status).to.eql(\"success\");","});","pm.test(\"No vendor key in response\", function() {","    pm.expect(pm.response.json().data).to.not.have.property(\"ems_vendor_key\");","});"],"type":"text/javascript","id":"05f5442f-cbe8-40d3-a582-838ec2178d61"}}],"id":"3d28f5ff-1c4e-42da-8fdd-722a259ad297","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"message_id","value":"","type":"text","description":"<p>The ems_id from a send response</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/message/status/","description":"<p>Check delivery status of a sent message. BREAKING CHANGE March 2026: This endpoint changed from GET to POST. token and message_id must be in the POST body. Note: ems_vendor_key is NOT in this response - removed in March 2026.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","message","status",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"e52463a9-1de7-49a1-81b9-bd5e1bffdff8","name":"Status: delivered","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"Your API token"},{"key":"message_id","value":"","type":"text","description":"The ems_id from a send response"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/message/status/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": {\n    \"message_id\": 5842,\n    \"to_email\": \"customer@example.com\",\n    \"to_name\": \"Jane Doe\",\n    \"from_email\": \"noreply@send.yourdomain.com\",\n    \"from_name\": \"Your Company\",\n    \"subject\": \"Your OTP code\",\n    \"message_type\": \"authentication\",\n    \"template_id\": 1,\n    \"status\": \"delivered\",\n    \"price\": \"0.600000\",\n    \"sent_at\": \"2026-03-24 10:00:00\"\n  }\n}"}],"_postman_id":"3d28f5ff-1c4e-42da-8fdd-722a259ad297"},{"name":"Check status - sent/in transit","id":"a146d803-1e90-4d6b-bdb7-01e0f8650041","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"message_id","value":"","type":"text","description":"<p>The ems_id from a send response</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/message/status/","description":"<p>Status will be sent while the message is in transit. Recommended polling: every 10 seconds for up to 5 minutes.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","message","status",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"dc931647-6513-41a0-b582-efbe6b0ae7ef","name":"Status: sent","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"Your API token"},{"key":"message_id","value":"","type":"text","description":"The ems_id from a send response"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/message/status/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": {\n    \"message_id\": 5842,\n    \"to_email\": \"customer@example.com\",\n    \"to_name\": \"Jane Doe\",\n    \"from_email\": \"noreply@send.yourdomain.com\",\n    \"from_name\": \"Your Company\",\n    \"subject\": \"Your OTP code\",\n    \"message_type\": \"authentication\",\n    \"template_id\": 1,\n    \"status\": \"sent\",\n    \"price\": \"0.600000\",\n    \"sent_at\": \"2026-03-24 10:00:00\"\n  }\n}"}],"_postman_id":"a146d803-1e90-4d6b-bdb7-01e0f8650041"},{"name":"Check status - bounced","id":"73b880c3-dc7d-4b42-b5a6-cab0560d960b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"message_id","value":"","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/message/status/","description":"<p>A bounced message. Hard bounces trigger global suppression platform-wide.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","message","status",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"b3920a56-b38e-4bf1-9b1c-bfe23f894495","name":"Status: bounced","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"Your API token"},{"key":"message_id","value":"","type":"text","description":"The ems_id from a send response"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/message/status/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": {\n    \"message_id\": 5842,\n    \"to_email\": \"invalid@bounced.example.com\",\n    \"to_name\": \"Jane Doe\",\n    \"from_email\": \"noreply@send.yourdomain.com\",\n    \"from_name\": \"Your Company\",\n    \"subject\": \"Your OTP code\",\n    \"message_type\": \"authentication\",\n    \"template_id\": 1,\n    \"status\": \"bounced\",\n    \"price\": \"0.600000\",\n    \"sent_at\": \"2026-03-24 10:00:00\"\n  }\n}"}],"_postman_id":"73b880c3-dc7d-4b42-b5a6-cab0560d960b"},{"name":"Check status - ERROR: not found","id":"f1934e0a-96a6-4fc7-ae7f-f0030a3f12bf","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"message_id","value":"999999","type":"text","description":"<p>A message_id that does not exist or belongs to a different client</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/message/status/","description":"<p>Expected: error - Message not found. Scope isolation: you can only retrieve your own messages.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","message","status",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"04c5faef-47cc-42ff-90a6-48ee36072883","name":"ERROR: not found","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"message_id","value":"999999","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/message/status/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"error\",\n    \"message\": [\n        \"Message not found.\"\n    ]\n}"}],"_postman_id":"f1934e0a-96a6-4fc7-ae7f-f0030a3f12bf"}],"id":"1bd641c5-50e9-4263-ba0d-e5de19e94d05","description":"<p>Check delivery status of a sent email via POST /email/message/status/</p>\n<p>Required: token, message_id (from the send response)</p>\n<p>STATUS VALUES (in order):\n  queued     — accepted, not yet dispatched\n  sent       — dispatched to provider\n  delivered  — confirmed delivery to recipient inbox\n  bounced    — delivery failed (check webhook for bounce_type: hard | soft)\n  complained — recipient marked as spam\n  failed     — internal dispatch failure</p>\n<p>FIELDS RETURNED:\n  message_id, to_email, to_name, from_email, from_name,\n  subject, message_type, template_id, status, price, sent_at</p>\n","_postman_id":"1bd641c5-50e9-4263-ba0d-e5de19e94d05"},{"name":"3. Delivery Statistics","item":[{"name":"Stats - current month","event":[{"listen":"test","script":{"exec":["pm.test(\"Status is success\", function() {","    pm.expect(pm.response.json().status).to.eql(\"success\");","});","pm.test(\"No by_vendor in response\", function() {","    pm.expect(pm.response.json().data).to.not.have.property(\"by_vendor\");","});"],"type":"text/javascript","id":"c50e4a30-5538-41db-82ba-3427d6e3ce1d"}}],"id":"34c440be-5495-4bda-950f-cb8fffa85a21","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token - all other params optional</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/stats/","description":"<p>Aggregate stats for the current calendar month, all message types. BREAKING CHANGE March 2026: changed from GET to POST. Complaint rate alert threshold: 0.08 percent. Note: by_vendor was REMOVED from the response in March 2026.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","stats",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"08308fe2-faa8-4494-bace-157d3d1c4493","name":"Stats: current month","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/stats/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"success\",\n    \"data\": {\n        \"date_from\": \"2026-03-01\",\n        \"date_to\": \"2026-03-31\",\n        \"totals\": {\n            \"sent\": 1200,\n            \"delivered\": 1150,\n            \"bounced\": 30,\n            \"complained\": 5,\n            \"cost\": \"720.000000\"\n        },\n        \"delivery_rate\": 95.83,\n        \"bounce_rate\": 2.5,\n        \"complaint_rate\": 0.42,\n        \"daily\": [\n            {\n                \"date\": \"2026-03-01\",\n                \"sent\": 40,\n                \"delivered\": 38,\n                \"bounced\": 1,\n                \"complained\": 0,\n                \"cost\": \"24.000000\"\n            }\n        ],\n        \"by_message_type\": [\n            {\n                \"message_type\": \"authentication\",\n                \"sent\": 500,\n                \"delivered\": 490,\n                \"bounced\": 5,\n                \"complained\": 1,\n                \"cost\": \"300.000000\"\n            },\n            {\n                \"message_type\": \"transactional\",\n                \"sent\": 700,\n                \"delivered\": 660,\n                \"bounced\": 25,\n                \"complained\": 4,\n                \"cost\": \"420.000000\"\n            }\n        ]\n    }\n}"}],"_postman_id":"34c440be-5495-4bda-950f-cb8fffa85a21"},{"name":"Stats - date range","event":[{"listen":"test","script":{"exec":["pm.test(\"Status is success\", function() {","    pm.expect(pm.response.json().status).to.eql(\"success\");","});","pm.test(\"No by_vendor in response\", function() {","    pm.expect(pm.response.json().data).to.not.have.property(\"by_vendor\");","});"],"type":"text/javascript","id":"7cb130c2-fea1-497b-bec0-fd10d2508842"}}],"id":"6695b8a5-51af-4e0b-b370-9404b1612d19","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"date_from","value":"2026-01-01","type":"text","description":"<p>YYYY-MM-DD</p>\n"},{"key":"date_to","value":"2026-12-31","type":"text","description":"<p>YYYY-MM-DD</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/stats/","description":"<p>Filter statistics to a specific date range.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","stats",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"73b77e4e-f5bb-45bd-8bd8-6c07dd481c23","name":"Stats: date range","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"date_from","value":"2026-01-01","type":"text"},{"key":"date_to","value":"2026-03-31","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/stats/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"success\",\n    \"data\": {\n        \"date_from\": \"2026-03-01\",\n        \"date_to\": \"2026-03-31\",\n        \"totals\": {\n            \"sent\": 1200,\n            \"delivered\": 1150,\n            \"bounced\": 30,\n            \"complained\": 5,\n            \"cost\": \"720.000000\"\n        },\n        \"delivery_rate\": 95.83,\n        \"bounce_rate\": 2.5,\n        \"complaint_rate\": 0.42,\n        \"daily\": [\n            {\n                \"date\": \"2026-03-01\",\n                \"sent\": 40,\n                \"delivered\": 38,\n                \"bounced\": 1,\n                \"complained\": 0,\n                \"cost\": \"24.000000\"\n            }\n        ],\n        \"by_message_type\": [\n            {\n                \"message_type\": \"authentication\",\n                \"sent\": 500,\n                \"delivered\": 490,\n                \"bounced\": 5,\n                \"complained\": 1,\n                \"cost\": \"300.000000\"\n            },\n            {\n                \"message_type\": \"transactional\",\n                \"sent\": 700,\n                \"delivered\": 660,\n                \"bounced\": 25,\n                \"complained\": 4,\n                \"cost\": \"420.000000\"\n            }\n        ]\n    }\n}"}],"_postman_id":"6695b8a5-51af-4e0b-b370-9404b1612d19"},{"name":"Stats - authentication only","event":[{"listen":"test","script":{"exec":["pm.test(\"Status is success\", function() {","    pm.expect(pm.response.json().status).to.eql(\"success\");","});","pm.test(\"No by_vendor in response\", function() {","    pm.expect(pm.response.json().data).to.not.have.property(\"by_vendor\");","});"],"type":"text/javascript","id":"27f0f4fd-4709-4c67-b74f-59a3bdb3e2db"}}],"id":"a66a1ee8-c1a4-466c-b887-505f4d87cfe6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"date_from","value":"2026-01-01","type":"text"},{"key":"date_to","value":"2026-12-31","type":"text"},{"key":"message_type","value":"authentication","type":"text","description":"<p>Filter to authentication sends only</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/stats/","description":"<p>Filter statistics to authentication (OTP/Smart Verify) messages only.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","stats",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"364e6cbf-0f40-41cc-b2e0-c9a1fbd2cd6a","name":"Stats: authentication only","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"message_type","value":"authentication","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/stats/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"success\",\n    \"data\": {\n        \"date_from\": \"2026-03-01\",\n        \"date_to\": \"2026-03-31\",\n        \"totals\": {\n            \"sent\": 1200,\n            \"delivered\": 1150,\n            \"bounced\": 30,\n            \"complained\": 5,\n            \"cost\": \"720.000000\"\n        },\n        \"delivery_rate\": 95.83,\n        \"bounce_rate\": 2.5,\n        \"complaint_rate\": 0.42,\n        \"daily\": [\n            {\n                \"date\": \"2026-03-01\",\n                \"sent\": 40,\n                \"delivered\": 38,\n                \"bounced\": 1,\n                \"complained\": 0,\n                \"cost\": \"24.000000\"\n            }\n        ],\n        \"by_message_type\": [\n            {\n                \"message_type\": \"authentication\",\n                \"sent\": 500,\n                \"delivered\": 490,\n                \"bounced\": 5,\n                \"complained\": 1,\n                \"cost\": \"300.000000\"\n            },\n            {\n                \"message_type\": \"transactional\",\n                \"sent\": 700,\n                \"delivered\": 660,\n                \"bounced\": 25,\n                \"complained\": 4,\n                \"cost\": \"420.000000\"\n            }\n        ]\n    }\n}"}],"_postman_id":"a66a1ee8-c1a4-466c-b887-505f4d87cfe6"},{"name":"Stats - transactional only","event":[{"listen":"test","script":{"exec":["pm.test(\"Status is success\", function() {","    pm.expect(pm.response.json().status).to.eql(\"success\");","});","pm.test(\"No by_vendor in response\", function() {","    pm.expect(pm.response.json().data).to.not.have.property(\"by_vendor\");","});"],"type":"text/javascript","id":"ec610a16-3b03-484a-aac0-be080dfe79c9"}}],"id":"209c5984-a897-4e00-8cfd-e7d1a8f67c6f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"date_from","value":"2026-01-01","type":"text"},{"key":"date_to","value":"2026-12-31","type":"text"},{"key":"message_type","value":"transactional","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/stats/","description":"<p>Filter statistics to transactional messages only.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","stats",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"686b21b3-700d-417e-aef8-f9d0227a9828","name":"Stats: transactional only","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"message_type","value":"transactional","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/stats/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"success\",\n    \"data\": {\n        \"date_from\": \"2026-03-01\",\n        \"date_to\": \"2026-03-31\",\n        \"totals\": {\n            \"sent\": 1200,\n            \"delivered\": 1150,\n            \"bounced\": 30,\n            \"complained\": 5,\n            \"cost\": \"720.000000\"\n        },\n        \"delivery_rate\": 95.83,\n        \"bounce_rate\": 2.5,\n        \"complaint_rate\": 0.42,\n        \"daily\": [\n            {\n                \"date\": \"2026-03-01\",\n                \"sent\": 40,\n                \"delivered\": 38,\n                \"bounced\": 1,\n                \"complained\": 0,\n                \"cost\": \"24.000000\"\n            }\n        ],\n        \"by_message_type\": [\n            {\n                \"message_type\": \"authentication\",\n                \"sent\": 500,\n                \"delivered\": 490,\n                \"bounced\": 5,\n                \"complained\": 1,\n                \"cost\": \"300.000000\"\n            },\n            {\n                \"message_type\": \"transactional\",\n                \"sent\": 700,\n                \"delivered\": 660,\n                \"bounced\": 25,\n                \"complained\": 4,\n                \"cost\": \"420.000000\"\n            }\n        ]\n    }\n}"}],"_postman_id":"209c5984-a897-4e00-8cfd-e7d1a8f67c6f"},{"name":"Stats - ERROR: invalid token","event":[{"listen":"test","script":{"exec":["pm.test(\"Returns 401\", function() {","    pm.response.to.have.status(401);","});"],"type":"text/javascript","id":"d105dff4-2ca0-4833-b775-b3fea8aaf3cc"}}],"id":"b16aded1-4921-49e3-9ee3-57233be72d29","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"INVALID_TOKEN_HERE","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/stats/","description":"<p>Expected: 401 - Invalid or inactive API token.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","stats",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"fd3ecf6a-7a7c-429f-876e-6c3105ccb857","name":"ERROR: invalid token","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"INVALID_TOKEN_HERE","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/stats/"},"status":"Unauthorized","code":401,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"error\",\n    \"message\": [\n        \"Invalid or inactive API token.\"\n    ]\n}"}],"_postman_id":"b16aded1-4921-49e3-9ee3-57233be72d29"}],"id":"81d16607-36a0-49ee-9dc2-25e1fcd00e58","description":"<p>Aggregate email statistics with daily and per-type breakdowns via POST /email/stats/</p>\n<p>All parameters are optional — omitting date_from and date_to defaults to current month.</p>\n<p>PARAMETERS:\n  token         — required\n  date_from     — YYYY-MM-DD (defaults to first day of current month)\n  date_to       — YYYY-MM-DD (defaults to today)\n  message_type  — filter by type: authentication | transactional | operational | marketing</p>\n<p>RESPONSE INCLUDES:\n  totals         — sent, delivered, bounced, complained, cost for the period\n  delivery_rate  — percentage delivered of sent\n  bounce_rate    — percentage bounced of sent\n  complaint_rate — percentage complained of sent (warning threshold: &gt; 0.08)\n  daily          — per-day breakdown array\n  by_message_type — breakdown by message type (always unfiltered even when message_type param is set)</p>\n<p>NOTE: complaint_rate &gt; 0.08 signals deliverability risk. Monitor this field.</p>\n","_postman_id":"81d16607-36a0-49ee-9dc2-25e1fcd00e58"},{"name":"4. Webhooks","item":[{"name":"[DEPRECATED] Register webhook - all events","event":[{"listen":"test","script":{"exec":["pm.test(\"Status is success\", function() {","    pm.expect(pm.response.json().status).to.eql(\"success\");","});","pm.test(\"ewh_id saved\", function() {","    var j = pm.response.json();","    pm.expect(j.data.ewh_id).to.be.a(\"number\");","    pm.environment.set(\"last_ewh_id\", j.data.ewh_id);","});"],"type":"text/javascript","id":"4762d7e6-36ab-4426-b8f6-d880a95cd457"}}],"id":"7f14578e-761d-4486-9504-5a995501a571","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"url","value":"https://your-server.com/webhooks/smartsms","type":"text","description":"<p>Must start with https:// - HTTP is rejected</p>\n"},{"key":"secret","value":"your-signing-secret-min-16-chars","type":"text","description":"<p>Minimum 16 characters. Store securely - cannot be retrieved after creation.</p>\n"},{"key":"events","value":"[\"delivery\",\"open\",\"click\",\"bounce\",\"complaint\",\"unsubscribe\"]","type":"text","description":"<p>JSON array of event types to subscribe to</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/webhook/add/","description":"<p>ENDPOINT CLOSED (July 2026). Webhook registration is a one-time setup action and is dashboard-only: log in at app.smartsmssolutions.com and go to Email &gt; Webhooks. Add your HTTPS endpoint URL, select the events to receive, and copy your signing secret — it is shown once at creation. Webhook DELIVERIES to your endpoint are unchanged: see folder \"9. Webhook Payload Reference\" for the payload format and signature verification.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","webhook","add",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"d1696eaf-5bed-43aa-b813-d3716d8ba5d2","name":"Endpoint disabled (410 Gone)","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"url","value":"https://yourapp.com/webhooks/email","type":"text"},{"key":"secret","value":"your-signing-secret-min-16-chars","type":"text"},{"key":"events","value":"[\"delivery\",\"open\",\"click\",\"bounce\",\"complaint\",\"unsubscribe\"]","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/webhook/add/"},"status":"Gone","code":410,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"error\",\n    \"message\": [\n        \"Webhook registration is not available via the API. Please manage webhooks via the web interface: log in at app.smartsmssolutions.com and go to Email > Webhooks. Your signing secret is shown once at creation - save it immediately.\"\n    ]\n}"}],"_postman_id":"7f14578e-761d-4486-9504-5a995501a571"},{"name":"[DEPRECATED] Register webhook - delivery and bounce only","event":[{"listen":"test","script":{"exec":["pm.test(\"Status is success\", function() {","    pm.expect(pm.response.json().status).to.eql(\"success\");","});","pm.test(\"ewh_id saved\", function() {","    var j = pm.response.json();","    pm.expect(j.data.ewh_id).to.be.a(\"number\");","    pm.environment.set(\"last_ewh_id\", j.data.ewh_id);","});"],"type":"text/javascript","id":"c66dc0cf-d8b7-4d33-bc0a-154f63db15c1"}}],"id":"560ec2ec-7a2f-4f19-8339-f976b9ce1cce","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"url","value":"https://your-server.com/webhooks/smartsms","type":"text"},{"key":"secret","value":"your-signing-secret-min-16-chars","type":"text"},{"key":"events","value":"[\"delivery\",\"bounce\",\"complaint\"]","type":"text","description":"<p>Subscribe to critical events only</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/webhook/add/","description":"<p>ENDPOINT CLOSED (July 2026). Webhook registration is a one-time setup action and is dashboard-only: log in at app.smartsmssolutions.com and go to Email &gt; Webhooks. Add your HTTPS endpoint URL, select the events to receive, and copy your signing secret — it is shown once at creation. Webhook DELIVERIES to your endpoint are unchanged: see folder \"9. Webhook Payload Reference\" for the payload format and signature verification.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","webhook","add",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"91d9477c-54c0-4908-8660-f1952dae3751","name":"Endpoint disabled (410 Gone)","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"url","value":"https://yourapp.com/webhooks/email","type":"text"},{"key":"secret","value":"your-signing-secret-min-16-chars","type":"text"},{"key":"events","value":"[\"delivery\",\"bounce\",\"complaint\"]","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/webhook/add/"},"status":"Gone","code":410,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"error\",\n    \"message\": [\n        \"Webhook registration is not available via the API. Please manage webhooks via the web interface: log in at app.smartsmssolutions.com and go to Email > Webhooks. Your signing secret is shown once at creation - save it immediately.\"\n    ]\n}"}],"_postman_id":"560ec2ec-7a2f-4f19-8339-f976b9ce1cce"},{"name":"[DEPRECATED] Register webhook - ERROR: HTTP url","id":"17757937-3242-4626-9dd5-32c2ad9f9bad","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"url","value":"http://yourapp.com/webhooks/email","type":"text","description":"<p>HTTP - will be rejected</p>\n"},{"key":"secret","value":"your-signing-secret-min-16-chars","type":"text"},{"key":"events","value":"[\"delivery\"]","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/webhook/add/","description":"<p>ENDPOINT CLOSED (July 2026). Webhook registration is a one-time setup action and is dashboard-only: log in at app.smartsmssolutions.com and go to Email &gt; Webhooks. Add your HTTPS endpoint URL, select the events to receive, and copy your signing secret — it is shown once at creation. Webhook DELIVERIES to your endpoint are unchanged: see folder \"9. Webhook Payload Reference\" for the payload format and signature verification. (HTTPS is enforced on the dashboard form as well.)</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","webhook","add",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"7181c633-f106-4934-9687-344428ca4dc4","name":"Endpoint disabled (410 Gone)","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"url","value":"http://yourapp.com/webhooks/email","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/webhook/add/"},"status":"Gone","code":410,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"error\",\n    \"message\": [\n        \"Webhook registration is not available via the API. Please manage webhooks via the web interface: log in at app.smartsmssolutions.com and go to Email > Webhooks. Your signing secret is shown once at creation - save it immediately.\"\n    ]\n}"}],"_postman_id":"17757937-3242-4626-9dd5-32c2ad9f9bad"}],"id":"ec5d8c09-0211-4a44-a6f6-7a51532c5301","description":"<p>DEPRECATED FOLDER (July 2026): webhook registration moved to the dashboard (app.smartsmssolutions.com &gt; Email &gt; Webhooks) and is no longer available via the API. The requests below are retained so existing readers understand the change — each returns HTTP 410. Webhook DELIVERIES to your registered endpoint are unchanged; see \"9. Webhook Payload Reference\" for the payload format, headers, and HMAC signature verification.</p>\n","_postman_id":"ec5d8c09-0211-4a44-a6f6-7a51532c5301"},{"name":"5. Domain Management","item":[{"name":"[DEPRECATED] Domain - add custom domain","event":[{"listen":"test","script":{"exec":["pm.test(\"Status is success\", function() {","    pm.expect(pm.response.json().status).to.eql(\"success\");","});","pm.test(\"Save domain ID\", function() {","    pm.environment.set(\"last_domain_id\", pm.response.json().data.domain.eds_id);","});","pm.test(\"dns_records is flat array\", function() {","    pm.expect(Array.isArray(pm.response.json().data.dns_records)).to.be.true;","});"],"type":"text/javascript","id":"db77176e-fffe-4d61-af91-ba07aa40473e"}}],"id":"2f6cb90b-7ac8-4603-bbc6-c415edfd0671","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"domain","value":"send.yourdomain.com","type":"text","description":"<p>Must start with send. - all other prefixes are rejected</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/domain/add/","description":"<p>ENDPOINT CLOSED (July 2026). Domain registration is a one-time, human-in-the-loop task (you must edit DNS records manually regardless), so it is now dashboard-only: log in at app.smartsmssolutions.com and go to Email &gt; Sending Domain. Account limits apply: maximum 3 sending domains per account, and only 1 unverified domain at a time (complete DNS verification before registering another). The read-side endpoints remain open: use \"Domain - get DNS records\" and \"Domain - refresh verification status\" with the domain ID shown in the ID column on the Sending Domain page. This endpoint now returns HTTP 410 with the message below.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","domain","add",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"5b415f16-86ee-48f4-a096-6e0993892b04","name":"Endpoint disabled (410 Gone)","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"domain","value":"send.yourdomain.com","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/domain/add/"},"status":"Gone","code":410,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"error\",\n    \"message\": [\n        \"This endpoint has been disabled. Please add a new sending domain via the web interface: log in at app.smartsmssolutions.com and go to Email > Sending Domain. Once added, you can retrieve DNS records and trigger verification via the domain/dns and domain/verify API endpoints using the domain ID shown on that page.\"\n    ]\n}"}],"_postman_id":"2f6cb90b-7ac8-4603-bbc6-c415edfd0671"},{"name":"Domain - get DNS records","id":"8ca49538-2104-4a41-8144-fa62b4770a6b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"domain_id","value":"","type":"text","description":"<p>The eds_id from domain/add response</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/domain/dns/","description":"<p>Retrieve DNS records for a previously registered domain. BREAKING CHANGES March 2026: method changed from GET to POST, dns_records changed from keyed object to flat array.</p>\n<p>The domain_id is shown in the ID column on the Sending Domain page (Email &gt; Sending Domain).</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","domain","dns",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"6d87ad21-ed46-4bb7-8377-a3c70c4cba34","name":"DNS records","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"domain_id","value":"14","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/domain/dns/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": {\n    \"domain_id\": 14,\n    \"domain\": \"send.yourdomain.com\",\n    \"dns_records\": [\n      {\n        \"record_type\": \"TXT\",\n        \"name\": \"send.yourdomain.com\",\n        \"value\": \"v=spf1 include:emailspf.smartsmssolutions.com ~all\",\n        \"status\": \"pending\"\n      },\n      {\n        \"record_type\": \"TXT\",\n        \"name\": \"api._domainkey.send.yourdomain.com\",\n        \"value\": \"k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ...\",\n        \"status\": \"pending\"\n      },\n      {\n        \"record_type\": \"CNAME\",\n        \"name\": \"tracking.send.yourdomain.com\",\n        \"value\": \"links.smartsmssolutions.com\",\n        \"status\": \"pending\"\n      }\n    ]\n  }\n}"}],"_postman_id":"8ca49538-2104-4a41-8144-fa62b4770a6b"},{"name":"Domain - refresh verification status","id":"d8338c8e-43b9-4962-bb5a-35c1aeabdd40","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"domain_id","value":"","type":"text","description":"<p>The eds_id to verify</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/domain/status/","description":"<p>Trigger a verification re-check and return current status. Call this after adding DNS records. DNS propagation takes up to 48 hours. BREAKING CHANGE March 2026: method changed from GET to POST.</p>\n<p>The domain_id is shown in the ID column on the Sending Domain page (Email &gt; Sending Domain).</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","domain","status",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"954523c1-03be-46d8-8403-d0618ec7047b","name":"Domain verified","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"domain_id","value":"14","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/domain/status/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": {\n    \"domain_id\": 14,\n    \"domain\": \"send.yourdomain.com\",\n    \"verification_status\": \"verified\",\n    \"dns_records\": [\n      {\n        \"record_type\": \"TXT\",\n        \"name\": \"send.yourdomain.com\",\n        \"value\": \"v=spf1 include:emailspf.smartsmssolutions.com ~all\",\n        \"status\": \"verified\"\n      },\n      {\n        \"record_type\": \"TXT\",\n        \"name\": \"api._domainkey.send.yourdomain.com\",\n        \"value\": \"k=rsa; t=s; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQ...\",\n        \"status\": \"verified\"\n      },\n      {\n        \"record_type\": \"CNAME\",\n        \"name\": \"tracking.send.yourdomain.com\",\n        \"value\": \"links.smartsmssolutions.com\",\n        \"status\": \"verified\"\n      }\n    ]\n  }\n}"}],"_postman_id":"d8338c8e-43b9-4962-bb5a-35c1aeabdd40"}],"id":"81fd027c-1457-4a54-acfa-00ff4edcf946","description":"<p>Custom sending domains. CREATION IS DASHBOARD-ONLY (July 2026): add domains at app.smartsmssolutions.com &gt; Email &gt; Sending Domain. Limits: 3 domains per account, max 1 unverified at a time. The domain ID needed by the endpoints below is shown in the ID column on that page. The read/verify endpoints (get DNS records, refresh verification status) remain open for integrations that poll setup progress.</p>\n","_postman_id":"81fd027c-1457-4a54-acfa-00ff4edcf946"},{"name":"6. Sender Identities","item":[{"name":"Sender - add identity","id":"210c14b5-eec2-4784-9373-f2a099d01cc9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"from_email","value":"noreply@send.yourdomain.com","type":"text","description":"<p>Sender email - domain must match domain_id verified domain</p>\n"},{"key":"from_name","value":"Your Company Name","type":"text","description":"<p>Display name in recipient email client</p>\n"},{"key":"domain_id","value":"","type":"text","description":"<p>eds_id of a VERIFIED domain</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/sender/add/","description":"<p>Create a sender identity on a verified domain. The from_email domain must match the domain_id - prevents spoofing.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","sender","add",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"55d4ca43-ce76-400b-815f-f763c10fcade","name":"Sender added","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"from_email","value":"noreply@send.yourdomain.com","type":"text"},{"key":"from_name","value":"Your Company Name","type":"text"},{"key":"domain_id","value":"14","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/sender/add/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": {\n    \"sender_id\": 3,\n    \"from_email\": \"noreply@send.yourdomain.com\",\n    \"from_name\": \"Your Company Name\",\n    \"domain_id\": 14,\n    \"status\": \"active\",\n    \"created_at\": \"2026-03-29 10:00:00\"\n  }\n}"}],"_postman_id":"210c14b5-eec2-4784-9373-f2a099d01cc9"},{"name":"Sender - list identities","id":"aefacbe2-eeb7-41a8-bc09-3121562ef4f9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token - POST body</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/sender/list/","description":"<p>List all sender identities for your account. BREAKING CHANGES March 2026: method changed from GET to POST, sat_status bug fixed - endpoint was non-functional before.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","sender","list",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"dfe94a95-339d-42e7-88dc-4d9de6977bc6","name":"Sender list","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/sender/list/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": [\n    {\n      \"sender_id\": 3,\n      \"from_email\": \"noreply@send.yourdomain.com\",\n      \"from_name\": \"Your Company Name\",\n      \"domain_id\": 14,\n      \"status\": \"active\",\n      \"created_at\": \"2026-03-29 10:00:00\"\n    }\n  ]\n}"}],"_postman_id":"aefacbe2-eeb7-41a8-bc09-3121562ef4f9"}],"id":"943f8752-c406-430a-b01f-c978a8e35be0","description":"<p>Manage From: sender identities for your sending domains.</p>\n<p>A sender identity links a from_email address to a verified domain.\nThe from_email must belong to your registered sending domain.</p>\n<p>Example: if your domain is send.yourdomain.com\n         a valid from_email is <a href=\"mailto:noreply@send.yourdomain.com\">noreply@send.yourdomain.com</a></p>\n<p>ENDPOINTS:\n  POST /email/sender/add/    — create a new sender identity\n  POST /email/sender/list/   — list all sender identities for your account</p>\n<p>FIELDS RETURNED:\n  sender_id, from_email, from_name, domain_id, status, created_at</p>\n<p>Use sender_id in the send endpoint (optional sender_id parameter) to control\nwhich From: address appears on outgoing emails.</p>\n","_postman_id":"943f8752-c406-430a-b01f-c978a8e35be0"},{"name":"7. Brand Profiles","item":[{"name":"[DEPRECATED] Brand - add profile","id":"d46f7752-b089-40bf-9c19-10904678afdd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"company_name","value":"Acme Corp","type":"text","description":"<p>Company or brand name</p>\n"},{"key":"primary_colour","value":"#1a73e8","type":"text","description":"<p>Hex colour for brand-consistent email rendering</p>\n"},{"key":"logo_url","value":"https://yourcompany.com/logo.png","type":"text","description":"<p>Optional. URL to your logo</p>\n"},{"key":"footer_text","value":"2026 Acme Corp. All rights reserved.","type":"text","description":"<p>Optional. Footer text for emails</p>\n"},{"key":"reply_to_email","value":"support@yourdomain.com","type":"text","description":"<p>Optional. Reply-to address</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/brand/add/","description":"<p>ENDPOINT CLOSED (July 2026). Brand profile setup is an infrequent, visual task (logo, colours, footer text) best performed in the dashboard where the result can be seen: log in at app.smartsmssolutions.com and go to Email &gt; Brand Profile. This endpoint now returns HTTP 410.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","brand","add",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"91f2935e-9206-4d45-8df6-9280863d86dd","name":"Endpoint disabled (410 Gone)","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"company_name","value":"Acme Corp","type":"text"},{"key":"primary_colour","value":"#1a73e8","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/brand/add/"},"status":"Gone","code":410,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"error\",\n    \"message\": [\n        \"This endpoint has been disabled. Please manage brand profiles via the web interface: log in at app.smartsmssolutions.com and go to Email > Brand Profile.\"\n    ]\n}"}],"_postman_id":"d46f7752-b089-40bf-9c19-10904678afdd"},{"name":"[DEPRECATED] Brand - update profile","id":"bf2159d4-dfdc-43f3-ba54-52f35f867cd9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"brand_id","value":"5","type":"text","description":"<p>The ebp_id of the brand to update</p>\n"},{"key":"company_name","value":"Acme Corp Updated","type":"text","description":"<p>Only supplied fields are updated</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/brand/update/","description":"<p>ENDPOINT CLOSED (July 2026). Brand profile changes are infrequent and visual — manage them in the dashboard: log in at app.smartsmssolutions.com and go to Email &gt; Brand Profile. This endpoint now returns HTTP 410.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","brand","update",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"88e94ba9-0c1c-482c-8a61-7290bb7516c3","name":"Endpoint disabled (410 Gone)","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"brand_id","value":"5","type":"text"},{"key":"company_name","value":"Acme Corp Updated","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/brand/update/"},"status":"Gone","code":410,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n    \"status\": \"error\",\n    \"message\": [\n        \"This endpoint has been disabled. Please manage brand profiles via the web interface: log in at app.smartsmssolutions.com and go to Email > Brand Profile.\"\n    ]\n}"}],"_postman_id":"bf2159d4-dfdc-43f3-ba54-52f35f867cd9"}],"id":"94ef6158-30e9-4403-8184-c8576b6d1901","description":"<p>DEPRECATED FOLDER (July 2026): brand profile management moved to the dashboard (app.smartsmssolutions.com &gt; Email &gt; Brand Profile). The requests below are retained for reference — each returns HTTP 410.</p>\n","_postman_id":"94ef6158-30e9-4403-8184-c8576b6d1901"},{"name":"8. Templates","item":[{"name":"Template - list","event":[{"listen":"test","script":{"exec":["pm.test(\"Status is success\", function() {","    pm.expect(pm.response.json().status).to.eql(\"success\");","});"],"type":"text/javascript","id":"b8712c5e-230e-4256-bd7a-6b6dce6322d3"}}],"id":"7a761c85-b452-4334-8933-afd672d6f9be","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/template/list/","description":"<p>List platform templates and your own client templates. Platform templates have etm_is_platform_template: 1 and cannot be modified. BUG FIX March 2026: was non-functional due to sat_status bug - now fixed.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","template","list",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"33b31566-f899-483a-8edf-ff0c8ceb81bf","name":"Template list","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/template/list/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": [\n    {\n      \"template_id\": 1,\n      \"name\": \"OTP Authentication\",\n      \"message_type\": \"authentication\",\n      \"subject\": \"Your verification code\",\n      \"html_body\": \"...\",\n      \"text_body\": \"...\",\n      \"variables\": [\n        \"otp_code\",\n        \"expiry_minutes\"\n      ],\n      \"is_platform_template\": true,\n      \"status\": \"active\",\n      \"review_note\": null,\n      \"created_at\": \"2026-03-01 10:00:00\"\n    },\n    {\n      \"template_id\": 8,\n      \"name\": \"Order Confirmation\",\n      \"message_type\": \"transactional\",\n      \"subject\": \"Your order is confirmed\",\n      \"html_body\": \"...\",\n      \"text_body\": \"...\",\n      \"variables\": [\n        \"order_id\",\n        \"customer_name\"\n      ],\n      \"is_platform_template\": false,\n      \"status\": \"active\",\n      \"review_note\": null,\n      \"created_at\": \"2026-03-15 14:22:00\"\n    }\n  ]\n}"}],"_postman_id":"7a761c85-b452-4334-8933-afd672d6f9be"},{"name":"Template - add","id":"521a4bc9-2de7-4a89-aae8-5ef74f24e62f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"name","value":"Order Shipped Notification","type":"text","description":"<p>Internal template name</p>\n"},{"key":"message_type","value":"transactional","type":"text","description":"<p>authentication / transactional / operational</p>\n"},{"key":"subject","value":"Your order #{{order_id}} has shipped","type":"text","description":"<p>Subject with {{variable_name}} substitution markers</p>\n"},{"key":"html_body","value":"<h2>Hi {{customer_name}}!</h2><p>Order #{{order_id}} shipped.</p>","type":"text","description":"<p>HTML body with {{variable_name}} substitution markers</p>\n"},{"key":"variables_schema","value":"[\"order_id\",\"customer_name\"]","type":"text","description":"<p>JSON array of all variable names used in subject and html_body</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/template/add/","description":"<p>Create a new email template. Use {{variable_name}} markers in subject and html_body. variables_schema must list all variable names used.</p>\n<p>LIMIT: maximum 10 templates per account (all statuses count, including drafts and rejected). Cloning a platform template also counts toward the limit. RESERVED: do not use unsubscribe_url as a variable name or in variables_schema — it is populated automatically by the platform on non-authentication sends.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","template","add",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"ce2f9bdd-8fe7-446e-8281-8cc6060f2960","name":"Template added","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"name","value":"Order Shipped Notification","type":"text"},{"key":"message_type","value":"transactional","type":"text"},{"key":"subject","value":"Your order #{{order_id}} has shipped","type":"text"},{"key":"html_body","value":"<h2>Order shipped</h2>","type":"text"},{"key":"variables_schema","value":"[\"order_id\"]","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/template/add/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": {\n    \"template_id\": 9\n  }\n}"}],"_postman_id":"521a4bc9-2de7-4a89-aae8-5ef74f24e62f"},{"name":"Template - update","id":"60911e6c-bd4f-4f8b-8f26-7c216e16ca23","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text","description":"<p>Your API token</p>\n"},{"key":"template_id","value":"9","type":"text","description":"<p>etm_id of your template - platform templates cannot be updated</p>\n"},{"key":"subject","value":"Your order #{{order_id}} is on its way!","type":"text","description":"<p>Only supplied fields are updated</p>\n"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/template/update/","description":"<p>Update an existing template. Platform templates cannot be updated by clients - clone them first.</p>\n","urlObject":{"protocol":"https","path":["io","api","client","v1","email","template","update",""],"host":["app","smartsmssolutions","com"],"query":[],"variable":[]}},"response":[{"id":"520f602b-c2e7-4499-9db4-d4ef4c2e03bc","name":"Template updated","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"token","value":"YOUR_API_TOKEN_HERE","type":"text"},{"key":"template_id","value":"9","type":"text"},{"key":"subject","value":"Updated subject line","type":"text"}]},"url":"https://app.smartsmssolutions.com/io/api/client/v1/email/template/update/"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"Cache-Control","value":"no-cache"},{"key":"Connection","value":"Keep-Alive"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"success\",\n  \"data\": true\n}"}],"_postman_id":"60911e6c-bd4f-4f8b-8f26-7c216e16ca23"}],"id":"6ec84717-dd0d-4c58-afce-896d6b8276ac","description":"<p>Email templates. Template IDs are shown in the ID column on the Templates page (app.smartsmssolutions.com &gt; Email &gt; Templates) and are required by the send endpoint. Account limit: 10 templates per account (all statuses count, including drafts). RESERVED VARIABLE: {{unsubscribe_url}} — place it in your template HTML/text to position the unsubscribe link inside your design (non-authentication sends only). It is populated automatically by the platform; never list it in variables_schema and never supply it in the send variables parameter (any supplied value is ignored).</p>\n","_postman_id":"6ec84717-dd0d-4c58-afce-896d6b8276ac"},{"name":"9. Webhook Payload Reference","item":[{"name":"Payload: delivery event","id":"ea7a7a29-f585-4c63-be7b-0ff78ce19c55","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-SmartSMS-Signature","value":"hmac-sha256-signature"},{"key":"X-SmartSMS-Timestamp","value":"1743000000"}],"body":{"mode":"raw","raw":"{\n    \"event_type\": \"delivery\",\n    \"ems_id\": 5842,\n    \"to_email\": \"customer@example.com\",\n    \"message_type\": \"authentication\",\n    \"processed_at\": \"2026-03-26T10:00:45Z\",\n    \"bounce_type\": null\n}","options":{"raw":{"language":"json"}}},"url":"https://your-server.com/webhooks/smartsms","description":"<p>Sent when the provider confirms delivery. Update your records to mark message as delivered. Signature: hash_hmac('sha256', timestamp . '.' . body, secret). Always return HTTP 200.</p>\n","urlObject":{"protocol":"https","path":["webhooks","smartsms"],"host":["your-server","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"ea7a7a29-f585-4c63-be7b-0ff78ce19c55"},{"name":"Payload: bounce hard","id":"9ab82679-bd5c-47ed-8544-c3017bec3c5f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-SmartSMS-Signature","value":"hmac-sha256-signature"},{"key":"X-SmartSMS-Timestamp","value":"1743000000"}],"body":{"mode":"raw","raw":"{\n    \"event_type\": \"bounce\",\n    \"ems_id\": 5843,\n    \"to_email\": \"invalid@bounced.example.com\",\n    \"message_type\": \"transactional\",\n    \"processed_at\": \"2026-03-26T10:05:12Z\",\n    \"bounce_type\": \"hard\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-server.com/webhooks/smartsms","description":"<p>Hard bounce: address does not exist. Triggers GLOBAL SUPPRESSION platform-wide. Action: mark address as invalid and remove from future send lists.</p>\n","urlObject":{"protocol":"https","path":["webhooks","smartsms"],"host":["your-server","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"9ab82679-bd5c-47ed-8544-c3017bec3c5f"},{"name":"Payload: bounce soft","id":"01d39d4e-328a-46b9-9e29-d8260dd9541a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-SmartSMS-Signature","value":"hmac-sha256-signature"},{"key":"X-SmartSMS-Timestamp","value":"1743000000"}],"body":{"mode":"raw","raw":"{\n    \"event_type\": \"bounce\",\n    \"ems_id\": 5844,\n    \"to_email\": \"full@example.com\",\n    \"message_type\": \"transactional\",\n    \"processed_at\": \"2026-03-26T10:05:30Z\",\n    \"bounce_type\": \"soft\"\n}","options":{"raw":{"language":"json"}}},"url":"https://your-server.com/webhooks/smartsms","description":"<p>Soft bounce: temporary failure (mailbox full). Does NOT trigger suppression.</p>\n","urlObject":{"protocol":"https","path":["webhooks","smartsms"],"host":["your-server","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"01d39d4e-328a-46b9-9e29-d8260dd9541a"},{"name":"Payload: complaint event","id":"e3f213a8-4016-4420-b03f-9001e8f0b6b5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-SmartSMS-Signature","value":"hmac-sha256-signature"},{"key":"X-SmartSMS-Timestamp","value":"1743000000"}],"body":{"mode":"raw","raw":"{\n    \"event_type\": \"complaint\",\n    \"ems_id\": 5845,\n    \"to_email\": \"annoyed@example.com\",\n    \"message_type\": \"transactional\",\n    \"processed_at\": \"2026-03-26T10:10:00Z\",\n    \"bounce_type\": null\n}","options":{"raw":{"language":"json"}}},"url":"https://your-server.com/webhooks/smartsms","description":"<p>Complaint: recipient marked as spam. Triggers GLOBAL SUPPRESSION. Monitor complaint_rate via stats API. Rate above 0.08 percent indicates deliverability risk.</p>\n","urlObject":{"protocol":"https","path":["webhooks","smartsms"],"host":["your-server","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"e3f213a8-4016-4420-b03f-9001e8f0b6b5"},{"name":"Payload: open event","id":"ae706c5f-51e7-4750-8e83-c7a4a1d46555","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-SmartSMS-Signature","value":"hmac-sha256-signature"},{"key":"X-SmartSMS-Timestamp","value":"1743000000"}],"body":{"mode":"raw","raw":"{\n    \"event_type\": \"open\",\n    \"ems_id\": 5846,\n    \"to_email\": \"customer@example.com\",\n    \"message_type\": \"transactional\",\n    \"processed_at\": \"2026-03-26T10:15:00Z\",\n    \"bounce_type\": null\n}","options":{"raw":{"language":"json"}}},"url":"https://your-server.com/webhooks/smartsms","description":"<p>Open: recipient opened the email. Does not trigger suppression or update ems_status.</p>\n","urlObject":{"protocol":"https","path":["webhooks","smartsms"],"host":["your-server","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"ae706c5f-51e7-4750-8e83-c7a4a1d46555"},{"name":"Payload: click event","id":"4b0b8a9f-688e-43e9-9581-379a404816b9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-SmartSMS-Signature","value":"hmac-sha256-signature"},{"key":"X-SmartSMS-Timestamp","value":"1743000000"}],"body":{"mode":"raw","raw":"{\n    \"event_type\": \"click\",\n    \"ems_id\": 5847,\n    \"to_email\": \"customer@example.com\",\n    \"message_type\": \"transactional\",\n    \"processed_at\": \"2026-03-26T10:16:30Z\",\n    \"bounce_type\": null\n}","options":{"raw":{"language":"json"}}},"url":"https://your-server.com/webhooks/smartsms","description":"<p>Click: recipient clicked a tracked link. Does not trigger suppression.</p>\n","urlObject":{"protocol":"https","path":["webhooks","smartsms"],"host":["your-server","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"4b0b8a9f-688e-43e9-9581-379a404816b9"},{"name":"Payload: unsubscribe event","id":"230b4af7-1010-4453-8bba-141f7b90c3a2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-SmartSMS-Signature","value":"hmac-sha256-signature"},{"key":"X-SmartSMS-Timestamp","value":"1743000000"}],"body":{"mode":"raw","raw":"{\n    \"event_type\": \"unsubscribe\",\n    \"ems_id\": 5848,\n    \"to_email\": \"optout@example.com\",\n    \"message_type\": \"transactional\",\n    \"processed_at\": \"2026-03-26T10:20:00Z\",\n    \"bounce_type\": null\n}","options":{"raw":{"language":"json"}}},"url":"https://your-server.com/webhooks/smartsms","description":"<p>Unsubscribe: recipient clicked unsubscribe link. Does not trigger global suppression. Handle in your application to respect the preference. Field reference v2: event_type, ems_id, processed_at. REMOVED: vendor_key, provider_message_id.</p>\n","urlObject":{"protocol":"https","path":["webhooks","smartsms"],"host":["your-server","com"],"query":[],"variable":[]}},"response":[],"_postman_id":"230b4af7-1010-4453-8bba-141f7b90c3a2"}],"id":"75430c34-3f3d-4efa-b64f-219deae7ba19","description":"<h1 id=\"email-webhooks--setup-guide\">Email Webhooks — Setup Guide</h1>\n<p>Receive real-time notifications at your own endpoint when something happens to\nan email you sent through SmartSMS Solutions: delivered, opened, clicked,\nbounced, complained, or unsubscribed.</p>\n<hr />\n<h2 id=\"1-create-your-receiving-endpoint\">1. Create your receiving endpoint</h2>\n<p>Your endpoint must:</p>\n<ul>\n<li>Be served over <strong>HTTPS</strong> (HTTP URLs are rejected at registration and skipped\nat dispatch time)</li>\n<li>Respond with a <strong>2xx status code within 5 seconds</strong> — do any heavy\nprocessing after responding, not before</li>\n<li>Verify the signature on every request (Section 4)</li>\n</ul>\n<h2 id=\"2-register-the-webhook\">2. Register the webhook</h2>\n<p>Webhook registration is done through the dashboard (it is a one-time setup\naction and is not available via the API):</p>\n<ol>\n<li>Log in at app.smartsmssolutions.com</li>\n<li>Go to <strong>Email → Webhooks</strong></li>\n<li>Add your endpoint URL (HTTPS required) and select the events you want to\nreceive</li>\n<li>Copy your <strong>signing secret</strong> — it is shown <strong>once, at creation</strong>. Store it\nsecurely; it is used to verify every delivery (Section 4). Never commit it\nto your codebase. If you lose it, delete the webhook and register a new\none.</li>\n</ol>\n<p>You can return to the Webhooks page at any time to change your subscribed\nevents or disable the webhook.</p>\n<h2 id=\"3-delivery-format\">3. Delivery format</h2>\n<p>Events are delivered as an HTTP <strong>POST</strong> with a JSON body:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"event_type\":   \"delivery\",\n  \"ems_id\":       12345,\n  \"to_email\":     \"customer@example.com\",\n  \"message_type\": \"transactional\",\n  \"processed_at\": \"2026-07-11T21:35:25Z\",\n  \"bounce_type\":  null\n}\n</code></pre>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Field</th>\n<th>Type</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>event_type</code></td>\n<td>string</td>\n<td>One of the event types below</td>\n</tr>\n<tr>\n<td><code>ems_id</code></td>\n<td>integer</td>\n<td>The <code>message_id</code> returned by the send API — join key back to your records</td>\n</tr>\n<tr>\n<td><code>to_email</code></td>\n<td>string</td>\n<td>Recipient address</td>\n</tr>\n<tr>\n<td><code>message_type</code></td>\n<td>string</td>\n<td><code>authentication</code> | <code>transactional</code> | <code>operational</code> | <code>marketing</code></td>\n</tr>\n<tr>\n<td><code>processed_at</code></td>\n<td>string</td>\n<td>Event time, ISO 8601, UTC (<code>Z</code>)</td>\n</tr>\n<tr>\n<td><code>bounce_type</code></td>\n<td>string|null</td>\n<td><code>hard</code> | <code>soft</code> | <code>transient</code> on bounce events; <code>null</code> otherwise</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Headers on every delivery:</strong></p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Header</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>Content-Type</code></td>\n<td><code>application/json</code></td>\n</tr>\n<tr>\n<td><code>X-SmartSMS-Signature</code></td>\n<td>HMAC-SHA256 signature (Section 4)</td>\n</tr>\n<tr>\n<td><code>X-SmartSMS-Timestamp</code></td>\n<td>Unix timestamp used in the signature</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"event-types\">Event types</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><code>event_type</code></th>\n<th>Meaning</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>delivery</code></td>\n<td>Recipient's mail server accepted the email</td>\n</tr>\n<tr>\n<td><code>open</code></td>\n<td>Recipient opened the email</td>\n</tr>\n<tr>\n<td><code>click</code></td>\n<td>Recipient clicked a link in the email</td>\n</tr>\n<tr>\n<td><code>bounce</code></td>\n<td>Delivery failed — see <code>bounce_type</code> for severity</td>\n</tr>\n<tr>\n<td><code>complaint</code></td>\n<td>Recipient marked the email as spam</td>\n</tr>\n<tr>\n<td><code>unsubscribe</code></td>\n<td>Recipient unsubscribed</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"4-verify-the-signature\">4. Verify the signature</h2>\n<p>Every delivery is signed so you can confirm it genuinely came from SmartSMS\nSolutions. The signature is:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>HMAC-SHA256( timestamp + \".\" + raw_request_body,  your_webhook_secret )\n</code></pre><p>hex-encoded, where <code>timestamp</code> is the value of <code>X-SmartSMS-Timestamp</code> and\n<code>raw_request_body</code> is the exact bytes received — compute over the raw body\n<strong>before</strong> any JSON parsing or re-encoding.</p>\n<p><strong>PHP:</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-php\">$secret = 'your_webhook_secret';\n\n$raw = file_get_contents('php://input');\n$sig = $_SERVER['HTTP_X_SMARTSMS_SIGNATURE'] ?? '';\n$ts  = $_SERVER['HTTP_X_SMARTSMS_TIMESTAMP'] ?? '';\n\n// Reject stale deliveries (replay protection)\nif (abs(time() - (int) $ts) &gt; 300) {\n    http_response_code(400);\n    exit;\n}\n\n$expected = hash_hmac('sha256', $ts . '.' . $raw, $secret);\nif (!hash_equals($expected, $sig)) {\n    http_response_code(401);\n    exit;\n}\n\nhttp_response_code(200); // respond first, process after\n$event = json_decode($raw, true);\n// ... your processing ...\n</code></pre>\n<p><strong>Node.js (Express):</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-javascript\">const crypto = require('crypto');\nconst SECRET = process.env.SMARTSMS_WEBHOOK_SECRET;\n\n// Capture the raw body — signature must be computed over exact bytes\napp.post('/webhooks/smartsms-email',\n  express.raw({ type: 'application/json' }),\n  (req, res) =&gt; {\n    const sig = req.header('X-SmartSMS-Signature') || '';\n    const ts  = req.header('X-SmartSMS-Timestamp') || '';\n\n    if (Math.abs(Date.now() / 1000 - Number(ts)) &gt; 300) {\n      return res.sendStatus(400);\n    }\n\n    const expected = crypto\n      .createHmac('sha256', SECRET)\n      .update(`${ts}.${req.body}`)\n      .digest('hex');\n\n    const valid = expected.length === sig.length &amp;&amp;\n      crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig));\n    if (!valid) return res.sendStatus(401);\n\n    res.sendStatus(200); // respond first\n    const event = JSON.parse(req.body);\n    // ... your processing ...\n  });\n</code></pre>\n<h2 id=\"5-delivery-behaviour-and-best-practices\">5. Delivery behaviour and best practices</h2>\n<ul>\n<li><strong>At-most-once delivery, no retries.</strong> If your endpoint is down or times\nout, that event is not redelivered. For state you must not miss, poll\n<code>message/status</code> as a reconciliation backstop rather than relying solely on\nwebhooks.</li>\n<li><strong>Duplicates are possible.</strong> The same <code>(ems_id, event_type)</code> pair can\noccasionally arrive more than once — make your processing idempotent, e.g.\nupsert keyed on <code>ems_id</code> + <code>event_type</code> + <code>processed_at</code>.</li>\n<li><strong>Ordering is not guaranteed.</strong> An <code>open</code> can arrive before its <code>delivery</code>.\nTreat each event independently rather than as a strict sequence.</li>\n<li><strong>Respond fast.</strong> Queue the payload and return 200 immediately; the\n5-second timeout includes your network latency.</li>\n<li><strong>Keep the secret out of your codebase.</strong> Environment variable or secrets\nmanager, never committed.</li>\n</ul>\n<hr />\n<h2 id=\"testing-with-the-requests-in-this-folder\">Testing with the requests in this folder</h2>\n<p>The requests below are example payloads for every event type. POST them directly to your endpoint to test your handler before going live. Note the placeholder signature header in these examples will (correctly) fail your verification — to test the happy path, compute a real signature with your secret over <code>timestamp + \".\" + body</code>, or temporarily log-and-continue on signature failure in your development environment.</p>\n","_postman_id":"75430c34-3f3d-4efa-b64f-219deae7ba19"}],"id":"28656c02-23a8-48a4-a4fc-7fa7104748e7","description":"<p>SmartSMS Email API v4 — 18 endpoints across 9 categories.\nAll endpoints use POST with application/x-www-form-urlencoded. Token always in POST body.</p>\n","_postman_id":"28656c02-23a8-48a4-a4fc-7fa7104748e7"}],"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":[""],"id":"080a9966-6ad9-4a6b-a0a0-c8930bafe2eb"}},{"listen":"test","script":{"type":"text/javascript","exec":[""],"id":"6216882a-1f85-4aea-98b6-2ddd35956004"}}],"variable":[{"key":"token","value":"your-apix-token"},{"key":"phone","value":"080xxxxxxxx"},{"key":"otp","value":"xxxx"},{"key":"class","value":"XXXXXXXXXX"},{"key":"sms_sender","value":"sender-id"},{"key":"sms_routing","value":"routing"},{"key":"sms_content","value":"message-content"},{"key":"sms_messagetype","value":"mesasge-type"},{"key":"sms_ref_id","value":"unique-ref-id"},{"key":"sms_simserver_token","value":"simserver-token"},{"key":"sms_dlr_timeout","value":"dlr-timeout"},{"key":"sms_schedule","value":"time-in-future"},{"key":"sms_token","value":"your-apix-token"},{"key":"organisation","value":"organisation-name"},{"key":"address","value":"business-address"},{"key":"regno","value":"registration-number"},{"key":"template_code","value":"10-digit-template-code"},{"key":"sms_otp_sender","value":"sender-id"},{"key":"airtime_amount","value":"airtime_amount"},{"key":"airtime_ref_id","value":"custom_ref_id"},{"key":"data_product_name","value":"data_product_name"},{"key":"data_ref_id","value":"ref_id"},{"key":"phone_info_type","value":"phone_info_type"},{"key":"smsotp_app_name_code","value":"0123456789"},{"key":"email_token","value":"YOUR_API_TOKEN_HERE"},{"key":"test_email","value":"test@example.com"},{"key":"test_name","value":"Test User"},{"key":"last_ems_id","value":""},{"key":"last_domain_id","value":""},{"key":"last_ewh_id","value":""},{"key":"webhook_url","value":"https://your-server.com/webhooks/smartsms"},{"key":"webhook_secret","value":"your-signing-secret-min-16-chars"},{"key":"date_from","value":"2026-01-01"},{"key":"date_to","value":"2026-12-31"}]}