{
  "info": {
    "_postman_id": "00000000-0000-4000-8000-000000000002",
    "name": "SMS Gateway RC1",
    "description": "Placeholder-only requests for the frozen RC1 API contract.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": { "type": "bearer", "bearer": [{ "key": "token", "value": "{{api_token}}", "type": "string" }] },
  "variable": [],
  "item": [
    {
      "name": "Send message",
      "event": [{ "listen": "test", "script": { "exec": ["if (pm.response.code === 202) { pm.environment.set('message_id', pm.response.json().message_id); }"] } }],
      "request": {
        "method": "POST",
        "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "X-Correlation-ID", "value": "{{correlation_id}}" }, { "key": "Idempotency-Key", "value": "{{idempotency_key}}" }],
        "body": { "mode": "raw", "raw": "{\n  \"recipient\": \"{{recipient}}\",\n  \"message\": \"<MESSAGE_TEXT>\",\n  \"sender_id\": \"<APPROVED_SENDER>\",\n  \"client_reference\": \"<CLIENT_REFERENCE>\"\n}" },
        "url": "{{base_url}}/api/v1/messages"
      }
    },
    {
      "name": "Replay message",
      "request": {
        "method": "POST",
        "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "X-Correlation-ID", "value": "<REPLAY_CORRELATION_ID>" }, { "key": "Idempotency-Key", "value": "{{idempotency_key}}" }],
        "body": { "mode": "raw", "raw": "{\n  \"recipient\": \"{{recipient}}\",\n  \"message\": \"<MESSAGE_TEXT>\",\n  \"sender_id\": \"<APPROVED_SENDER>\",\n  \"client_reference\": \"<CLIENT_REFERENCE>\"\n}" },
        "url": "{{base_url}}/api/v1/messages"
      }
    },
    {
      "name": "Bulk send",
      "request": {
        "method": "POST",
        "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "X-Correlation-ID", "value": "{{correlation_id}}" }, { "key": "Idempotency-Key", "value": "{{bulk_idempotency_key}}" }],
        "body": { "mode": "raw", "raw": "{\n  \"client_reference\": \"<BATCH_REFERENCE>\",\n  \"messages\": [\n    {\"recipient\": \"{{recipient}}\", \"message\": \"<MESSAGE_TEXT_1>\"},\n    {\"recipient\": \"+<E164_RECIPIENT_2>\", \"message\": \"<MESSAGE_TEXT_2>\"}\n  ]\n}" },
        "url": "{{base_url}}/api/v1/messages/bulk"
      }
    },
    {
      "name": "Get message",
      "request": {
        "method": "GET",
        "header": [{ "key": "X-Correlation-ID", "value": "{{correlation_id}}" }],
        "url": "{{base_url}}/api/v1/messages/{{message_id}}"
      }
    },
    {
      "name": "Get status",
      "event": [{
        "listen": "test",
        "script": {
          "exec": [
            "pm.test('Response is JSON', function () { pm.response.to.be.json; });",
            "pm.test('Correlation response header is current', function () { pm.expect(pm.response.headers.get('X-Correlation-ID')).to.eql(pm.variables.replaceIn('{{correlation_id}}')); });",
            "if (pm.response.code === 200) {",
            "  const body = pm.response.json();",
            "  pm.test('Compact status identity is stable', function () { pm.expect(body.message_id).to.eql(pm.variables.replaceIn('{{message_id}}')); });",
            "  pm.test('Compact status has required fields only', function () {",
            "    pm.expect(body).to.have.all.keys(Object.prototype.hasOwnProperty.call(body, 'client_reference') ? ['message_id', 'status', 'occurred_at', 'client_reference', 'correlation_id'] : ['message_id', 'status', 'occurred_at', 'correlation_id']);",
            "    pm.expect(body.correlation_id).to.eql(pm.response.headers.get('X-Correlation-ID'));",
            "  });",
            "} else {",
            "  const body = pm.response.json();",
            "  pm.test('Approved error envelope is present', function () {",
            "    pm.expect(body).to.have.all.keys('error');",
            "    pm.expect(body.error).to.include.all.keys('code', 'message', 'details', 'correlation_id');",
            "  });",
            "}"
          ]
        }
      }],
      "request": {
        "method": "GET",
        "header": [{ "key": "X-Correlation-ID", "value": "{{correlation_id}}" }],
        "url": "{{base_url}}/api/v1/messages/{{message_id}}/status"
      }
    },
    { "name": "Get webhook", "request": { "method": "GET", "header": [{ "key": "X-Correlation-ID", "value": "{{correlation_id}}" }], "url": "{{base_url}}/api/v1/webhook" } },
    {
      "name": "Put webhook",
      "request": {
        "method": "PUT",
        "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "X-Correlation-ID", "value": "{{correlation_id}}" }],
        "body": { "mode": "raw", "raw": "{\n  \"url\": \"{{webhook_url}}\",\n  \"secret\": \"{{webhook_secret}}\",\n  \"enabled\": true\n}" },
        "url": "{{base_url}}/api/v1/webhook"
      }
    }
  ]
}
