{
    "variable": [
        {
            "id": "baseUrl",
            "key": "baseUrl",
            "type": "string",
            "name": "string",
            "value": "https:\/\/your-workspace.example"
        }
    ],
    "info": {
        "name": "IntelliSend Developers",
        "_postman_id": "bb149015-7392-4d4b-b774-92dea96f4ee9",
        "description": "Send transactional and marketing SMS, manage OTP verification, and track campaign delivery through IntelliSend.",
        "schema": "https:\/\/schema.getpostman.com\/json\/collection\/v2.1.0\/collection.json"
    },
    "item": [
        {
            "name": "Developer SMS",
            "description": "",
            "item": [
                {
                    "name": "Send SMS",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/messages",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/messages"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Idempotency-Key",
                                "value": "sms-20260912-001"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"recipients\":[\"+61400000000\"],\"message\":\"Your order 1042 is confirmed.\",\"message_purpose\":\"transactional\",\"reference\":\"order-1042\"}"
                        },
                        "description": "Requires the `messages:send` ability. Send to 1\u20131,000 distinct E.164 recipients.\n\nOmitted routing uses the API key's routing, which defaults to IntelliSend. Explicit request routing overrides the key; workspace Quick SMS defaults do not apply.\n\nA `202` response records the request, not handset delivery. Inspect `data.queue.success`: when false, check the message status before retrying. Use the same Idempotency-Key for retries of the same send. See [routing](#routing) and [safe retries](#reference)."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 202,
                            "body": "{\n  \"message\": \"SMS queued.\",\n  \"data\": {\n    \"message\": {\n      \"id\": 123,\n      \"reference\": \"order-1042\",\n      \"status\": \"queued\",\n      \"total_recipients\": 1,\n      \"queued_count\": 1,\n      \"sent_count\": 0,\n      \"failed_count\": 0,\n      \"created_at\": \"2026-09-12T10:00:00+00:00\",\n      \"completed_at\": null\n    },\n    \"queue\": {\n      \"success\": true,\n      \"campaign_id\": 123,\n      \"batch_id\": \"97d7b8db-45cc-4498-92bf-a9739436c287\",\n      \"total_recipients\": 1,\n      \"requested_recipients\": 1,\n      \"excluded_recipients\": 0,\n      \"message\": \"Campaign queued for sending\"\n    }\n  }\n}\n",
                            "name": "Queued"
                        },
                        {
                            "header": [],
                            "code": 202,
                            "body": "{\n  \"message\": \"SMS request saved. Check the campaign status.\",\n  \"data\": {\n    \"message\": {\n      \"id\": 123,\n      \"reference\": \"order-1042\",\n      \"status\": \"paused\",\n      \"total_recipients\": 1,\n      \"queued_count\": 1,\n      \"sent_count\": 0,\n      \"failed_count\": 0,\n      \"created_at\": \"2026-09-12T10:00:00+00:00\",\n      \"completed_at\": null\n    },\n    \"queue\": {\n      \"success\": false,\n      \"campaign_id\": 123,\n      \"message\": \"Queue dispatch could not be confirmed. Review this campaign before resuming.\"\n    }\n  }\n}\n",
                            "name": "Saved; check status"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\":\"A request with this Idempotency-Key is still being processed. Retry with the same key shortly.\"}",
                            "name": "Still processing"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\":\"The given data was invalid.\",\"errors\":{\"recipients\":[\"The recipients field is required.\"]}}",
                            "name": "Validation error"
                        }
                    ]
                },
                {
                    "name": "Get message status",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/messages\/:campaign",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/messages\/:campaign",
                            "variable": [
                                {
                                    "id": "campaign",
                                    "key": "campaign",
                                    "value": 123,
                                    "description": "IntelliSend campaign ID."
                                }
                            ]
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Requires the `messages:read` ability and access to the campaign. Returns the campaign's current send counters.\n\n`sent_count` means provider submission, not confirmed handset delivery. Use [webhooks](#webhooks) for delivery updates where supported. Use this endpoint to inspect a send that returned `data.queue.success: false`."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"data\": {\n    \"message\": {\n      \"id\": 123,\n      \"reference\": \"order-1042\",\n      \"status\": \"completed\",\n      \"total_recipients\": 1,\n      \"queued_count\": 0,\n      \"sent_count\": 1,\n      \"failed_count\": 0,\n      \"created_at\": \"2026-09-12T10:00:00+00:00\",\n      \"completed_at\": \"2026-09-12T10:00:03+00:00\"\n    }\n  }\n}\n",
                            "name": "Completed"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\"title\":\"Resource not found\",\"detail\":\"The requested resource was not found\",\"instance\":\"https:\/\/your-workspace.example\/api\/v1\/messages\/123\",\"code\":\"NOT-404\",\"link\":\"\"}",
                            "name": "Not found"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Developer OTP",
            "description": "",
            "item": [
                {
                    "name": "Send OTP",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/otp\/send",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/otp\/send"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Idempotency-Key",
                                "value": "otp-20260912-001"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"recipient\":\"+61400000000\",\"service_slug\":\"0195f798-5a50-7bc7-a1b5-36e303be0024\"}"
                        },
                        "description": "Requires the `otp:send` ability. Sends through IntelliSend using tenant credits, or a connected customer-funded provider. An approved custom sender or the tenant's configured IntelliSend sender can be used.\n\nThe API stores only the code hash and never returns the plaintext code. A new code invalidates the previous code for the same user, recipient, and purpose. Use the same Idempotency-Key when retrying this send. See [provider requirements](#routing).\n\nUse service_slug to load a saved OTP service's current settings, or provide purpose and optional settings explicitly. Do not mix service_slug with purpose, code_length, expires_in_minutes, template_slug, message_template, provider_slug, sender_id, routing_type, or failover_route_slug. See the [OTP service guide](#otp). Save data.request_id to verify independently of later service edits."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 202,
                            "body": "{\"message\":\"OTP submitted.\",\"data\":{\"request_id\":\"0195f79a-c230-748b-b868-2792aa113579\",\"status\":\"accepted\",\"expires_at\":\"2026-09-24T12:05:00+00:00\",\"provider\":\"intellisend\",\"sender_id\":\"61485900180\",\"billing\":{\"source\":\"intellisend_credits\",\"status\":\"charged\",\"credits_charged\":1}}}",
                            "name": "Submitted"
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\"message\":\"A request with this Idempotency-Key is still being processed. Retry with the same key shortly.\"}",
                            "name": "Still processing"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\":\"The given data was invalid.\",\"errors\":{\"recipient\":[\"The recipient field is required.\"]}}",
                            "name": "Validation error"
                        }
                    ]
                },
                {
                    "name": "Verify OTP",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/v1\/otp\/verify",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/v1\/otp\/verify"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"recipient\":\"+61400000000\",\"request_id\":\"0195f79a-c230-748b-b868-2792aa113579\",\"code\":\"012345\"}"
                        },
                        "description": "Requires the `otp:verify` ability. Use the same user and recipient as the send request, with its returned request_id. Existing integrations can supply the original purpose instead. Never supply both selectors.\n\nA code is valid once only. It is rejected after expiry or five failed verification attempts within 15 minutes. Resending does not reset that count. Send the code as a string to preserve leading zeroes."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\"message\":\"OTP verified.\"}",
                            "name": "Verified"
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\"message\":\"The verification code is invalid or expired.\"}",
                            "name": "Invalid or expired code"
                        }
                    ]
                }
            ]
        }
    ],
    "auth": {
        "type": "bearer",
        "bearer": [
            {
                "key": "token",
                "type": "string",
                "value": "{{apiKey}}"
            }
        ]
    }
}