{"componentChunkName":"component---src-templates-docs-js","path":"/api-externa/sms/api-http/integration_tips","result":{"data":{"site":{"siteMetadata":{"title":"broadcaster","docsLocation":"https://github.com","docsLocationType":"github","editable":false}},"mdx":{"fields":{"id":"2306bd5c-524f-55ed-b0de-489b6ad94724","title":"Integration tips","slug":"/api-externa/sms/api-http/integration_tips"},"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Integration tips\",\n  \"order\": 4\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"section\", {\n    \"id\": \"integrationtips\"\n  }, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"Integration tips\"), mdx(\"ul\", null, mdx(\"li\", null, mdx(\"b\", null, \"Cache the token:\"), \" cache the token and reuse it during its ~10-minute lifetime. Do not request a new one for every send.\"), mdx(\"li\", null, mdx(\"b\", null, \"Handle 401:\"), \" if the token expired, request a new one and retry the request once.\"), mdx(\"li\", null, mdx(\"b\", null, \"Handle 500 with retries:\"), \" use exponential backoff (e.g. 1s, 2s, 4s) with a maximum of 3 attempts.\"), mdx(\"li\", null, mdx(\"b\", null, \"Store the mailingId:\"), \" store the \", mdx(\"code\", null, \"mailingId\"), \" of every successful send \\u2014 it is the unique identifier to track or report the message.\"), mdx(\"li\", null, mdx(\"b\", null, \"Do not expose the Secret:\"), \" do not publish it in source code, logs, or front-end environment variables. Keep it on the server side.\"), mdx(\"li\", null, mdx(\"b\", null, \"Always send country:\"), \" it speeds up carrier resolution and reduces \", mdx(\"code\", null, \"-40\"), \" errors.\")), mdx(\"br\", null)), mdx(\"section\", {\n    \"id\": \"frequentlyaskedquestions\"\n  }, mdx(\"h2\", {\n    parentName: \"section\"\n  }, \"Frequently asked questions\"), mdx(\"b\", null, \"Is the token I use to send SMS the same one I use to manage keys in the portal?\"), mdx(\"br\", null), \"No. The portal token is a user token (realm `broadcaster`). The token to send SMS is a machine token (realm `broadcaster-api-external`) that you obtain with the `client_credentials` flow and your API key.\", mdx(\"br\", null), mdx(\"br\", null), mdx(\"b\", null, \"Can I send the same message to several numbers at the same time?\"), mdx(\"br\", null), \"This endpoint accepts one destination number per call (`msisdn` is a single number). For bulk sending, make multiple calls or ask your account executive about the campaign flow.\", mdx(\"br\", null), mdx(\"br\", null), mdx(\"b\", null, \"How do I know whether the SMS reached the recipient?\"), mdx(\"br\", null), \"Enable the DLR (see \", mdx(\"a\", {\n    href: \"/api-externa/sms/api-http/http#h-deliveryreport(dlr)\"\n  }, \"Delivery report (DLR)\"), \"). The notification is delivered to the webhook or queue configured for your account. If you do not have a receiver configured, contact support.\", mdx(\"br\", null), mdx(\"br\", null), mdx(\"b\", null, \"What happens if my token expires in the middle of a burst of sends?\"), mdx(\"br\", null), \"You will receive a 401 from the server. Request a new token (\", mdx(\"a\", {\n    href: \"/api-externa/sms/api-http/authentication\"\n  }, \"Step 1\"), \") and retry the messages that failed.\", mdx(\"br\", null), mdx(\"br\", null), mdx(\"b\", null, \"Is there a messages-per-second limit?\"), mdx(\"br\", null), \"It depends on your account configuration. If you receive `-109` errors (balance limit reached) or high response times, check with your account executive.\", mdx(\"br\", null), mdx(\"br\", null), mdx(\"b\", null, \"How do I report an error or technical issue?\"), mdx(\"br\", null), \"Contact the support team with: the `mailingId` (if you have it), the request body (without the secret), the response received, and the date/time of the attempt.\"));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#integration-tips","title":"Integration tips"},{"url":"#frequently-asked-questions","title":"Frequently asked questions"}]},"timeToRead":1,"parent":{"__typename":"File","relativePath":"api-externa/sms/api-http/integration_tips.md","fields":{"gitLogLatestAuthorName":"Irais Aguirre","gitLogLatestAuthorEmail":"irais.aguirre@conceptomovil.com","gitLogLatestDate":"4 days ago"}},"frontmatter":{"metaTitle":null,"showMetadata":null,"editable":null,"showPreviousNext":null,"showToc":null}},"gitBranch":{"name":"20211019-2FACTOR_AUTH"},"gitCommit":{"hash":"9713e1925aeb8cad930f91b6bf05d0b5937b2bb5","date":"2026-11-13 06:39"}},"pageContext":{"id":"2306bd5c-524f-55ed-b0de-489b6ad94724"}},"staticQueryHashes":["12478684","12478684","2882937274","2882937274","353167761","353167761"]}