{"id":214404,"date":"2026-10-29T16:18:18","date_gmt":"2026-10-29T16:18:18","guid":{"rendered":"https:\/\/sinch.com\/blog\/send-sms-conversation-api-curl-nodejs-python-2\/"},"modified":"2026-10-29T16:18:19","modified_gmt":"2026-10-29T16:18:19","slug":"send-sms-conversation-api-curl-nodejs-python","status":"publish","type":"blog","link":"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/","title":{"rendered":"SMS mit der Sinch Conversation API in curl, Node.js und Python versenden"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/\">Conversation API<\/a> is how you send SMS with Sinch. Every message goes through one endpoint, <code>POST https:\/\/{region}.conversation.api.sinch.com\/v1\/projects\/{project_id}\/messages:send<\/code>, and the same endpoint covers RCS, WhatsApp, and the other messaging channels. The request you write for a text message today is the same shape you&#8217;ll use when you add a second channel later. This post sets up a Conversation API app with the SMS channel and sends a message three ways: With <code>curl<\/code>, with the Node.js SDK, and with the Python SDK. Pick the one that matches your stack. Each is a single short script you can run from your terminal.<\/p>\n\r\n    <nav data-content-type=\"longform\" class=\"toc-block longform-spacings px-5 py-6 px-md-6 px-lg-7 py-md-7 bg-light fs-sm rounded-lg\" aria-labelledby=\"toc-title-9544\"><p class=\"h5 m-0\" id=\"toc-title-9544\">Inhaltsverzeichnis<\/p><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">01<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#youll-need\">You&#8217;ll need<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">02<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#set-up-a-conversation-api-app\">Set up a Conversation API app<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">03<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#send-an-sms-with-curl\">Send an SMS with curl<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">04<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#send-an-sms-with-node-js\">Send an SMS with Node.js<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">05<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#send-an-sms-with-python\">Send an SMS with Python<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">06<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#accepted-isnt-delivered\">Accepted isn&#8217;t delivered<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">07<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#why-the-request-looks-like-this\">Why the request looks like this<\/a><a class=\"scrollme link-body-color\" href=\"#oauth-2-0-instead-of-basic-auth\">OAuth 2.0 instead of Basic auth<\/a><a class=\"scrollme link-body-color\" href=\"#identified_by-instead-of-contact_id\">identified_by instead of contact_id<\/a><a class=\"scrollme link-body-color\" href=\"#setting-sms_sender-every-time\">Setting SMS_SENDER every time<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">08<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#point-your-coding-agent-at-the-right-api\">Point your coding agent at the right API<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">09<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#troubleshooting\">Troubleshooting<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">10<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#next-steps\">Next steps<\/a><\/div><\/div><div class=\"d-flex mt-3\"><div class=\"w-auto fw-bold text-accent d-flex me-2\">11<\/div><div class=\"d-flex flex-column\"><a class=\"fw-bold scrollme link-body-color text-accent\" href=\"#additional-resources\">Additional resources<\/a><\/div><\/div><\/nav>\n<h2 class=\"wp-block-heading\">You&#8217;ll need<\/h2>\n\n<ul class=\"wp-block-list\">\n<li>A Sinch account (<a href=\"https:\/\/dashboard.sinch.com\/signup\">sign up<\/a>). New accounts come with a test number.<\/li>\n\n\n\n<li>A phone that can receive SMS. Trial accounts can limit which numbers you can send to, so check the recipient against your account&#8217;s settings in the dashboard.<\/li>\n\n\n\n<li>You need <code>curl<\/code> and <code>jq<\/code> for the shell version, Node.js 20 or later for Node.js, or Python 3.9 or later for Python.<\/li>\n<\/ul>\n\n<h2 class=\"wp-block-heading\">Set up a Conversation API app<\/h2>\n\n<p class=\"wp-block-paragraph\">The Conversation API sends messages from an <strong>app<\/strong>. The app holds the channels you&#8217;ve connected, and the SMS channel links the app to the SMS service plan that owns your number.<\/p>\n\n<ol class=\"wp-block-list\">\n<li>In the <a href=\"https:\/\/dashboard.sinch.com\">Sinch dashboard<\/a>, open <strong>Conversation API<\/strong> in the left menu. Accept the terms and click <strong>GET ACCESS<\/strong> if you haven&#8217;t used it before.<\/li>\n\n\n\n<li>Go to <strong>Settings<\/strong>, then <strong>Access Keys<\/strong>, and create an access key. Copy the key ID and the key secret. The secret is shown once.<\/li>\n\n\n\n<li>Go to <strong>Conversation API<\/strong>, then <strong>Apps<\/strong>, and create an app. Pick the region that matches your SMS service plan: US, EU, or Brazil. Copy the app ID.<\/li>\n\n\n\n<li>In the app, click <strong>SET UP CHANNEL<\/strong> on the <strong>SMS<\/strong> row, pick your service plan from the drop-down, and confirm.<\/li>\n<\/ol>\n\n<p class=\"wp-block-paragraph\">Here&#8217;s where each value comes from:<\/p>\n\n<figure tabindex=\"0\" class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Environment variable<\/th><th>Where to find it<\/th><\/tr><\/thead><tbody><tr><td><code>SINCH_PROJECT_ID<\/code><\/td><td><strong>Settings<\/strong>, <strong>Project Settings<\/strong><\/td><\/tr><tr><td><code>SINCH_KEY_ID<\/code>, <code>SINCH_KEY_SECRET<\/code><\/td><td><strong>Settings<\/strong>, <strong>Access Keys<\/strong><\/td><\/tr><tr><td><code>SINCH_APP_ID<\/code><\/td><td><strong>Conversation API<\/strong>, <strong>Apps<\/strong>. The app ID, not the project ID<\/td><\/tr><tr><td><code>SINCH_SMS_SENDER<\/code><\/td><td><strong>Numbers<\/strong>, <strong>Your numbers<\/strong>. The number assigned to the service plan, in E.164 format<\/td><\/tr><tr><td><code>SINCH_REGION<\/code><\/td><td>The region you created the app in: <code>us<\/code>, <code>eu<\/code>, or <code>br<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n<p class=\"wp-block-paragraph\">Export them in your shell:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-def0798520d07f315c71cabf42c5c641_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-def0798520d07f315c71cabf42c5c641_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-def0798520d07f315c71cabf42c5c641_code_0\" role=\"tabpanel\" aria-labelledby=\"block-def0798520d07f315c71cabf42c5c641_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-def0798520d07f315c71cabf42c5c641_code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-def0798520d07f315c71cabf42c5c641_code_0_content\" class=\"language-shell\">\r\n\r\n                                    export SINCH_PROJECT_ID=&quot;YOUR_PROJECT_ID&quot;\r\nexport SINCH_KEY_ID=&quot;YOUR_KEY_ID&quot;\r\nexport SINCH_KEY_SECRET=&quot;YOUR_KEY_SECRET&quot;\r\nexport SINCH_APP_ID=&quot;YOUR_APP_ID&quot;\r\nexport SINCH_SMS_SENDER=&quot;+12025550123&quot;\r\nexport SINCH_REGION=&quot;us&quot;\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\">Keep the key secret out of source control. In production, load it from a secrets manager.<\/p>\n\n<h2 class=\"wp-block-heading\">Send an SMS with curl<\/h2>\n\n<p class=\"wp-block-paragraph\">Two requests. The first trades your access key for an OAuth 2.0 token from <code>https:\/\/auth.sinch.com\/oauth2\/token<\/code>, which lasts about an hour. The second sends the message to the <code>messages:send<\/code> endpoint in your app&#8217;s region.<\/p>\n\n<p class=\"wp-block-paragraph\">Save this as <code>send-sms.sh<\/code>:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-e257319bb250055597c78c332db4ea5b_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-e257319bb250055597c78c332db4ea5b_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-e257319bb250055597c78c332db4ea5b_code_0\" role=\"tabpanel\" aria-labelledby=\"block-e257319bb250055597c78c332db4ea5b_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-e257319bb250055597c78c332db4ea5b_code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-e257319bb250055597c78c332db4ea5b_code_0_content\" class=\"language-shell\">\r\n\r\n                                    #!\/usr\/bin\/env bash\r\n# Send one SMS with the Sinch Conversation API using curl and jq.\r\n# Usage: bash send-sms.sh +15551234567 &quot;Hello from Sinch&quot;\r\nset -euo pipefail\r\n\r\n: &quot;${SINCH_PROJECT_ID:?Set SINCH_PROJECT_ID}&quot;\r\n: &quot;${SINCH_KEY_ID:?Set SINCH_KEY_ID}&quot;\r\n: &quot;${SINCH_KEY_SECRET:?Set SINCH_KEY_SECRET}&quot;\r\n: &quot;${SINCH_APP_ID:?Set SINCH_APP_ID}&quot;\r\n: &quot;${SINCH_SMS_SENDER:?Set SINCH_SMS_SENDER}&quot;\r\nregion=&quot;${SINCH_REGION:-us}&quot;\r\n\r\nto=&quot;${1:?Usage: send-sms.sh  }&quot;\r\ntext=&quot;${2:?Usage: send-sms.sh  }&quot;\r\n\r\nif [[ ! &quot;$to&quot; =~ ^\\+[1-9][0-9]{1,14}$ ]]; then\r\n  echo &quot;Use E.164 format for the number, for example +15551234567. Got: $to&quot; &gt;&amp;2\r\n  exit 1\r\nfi\r\n\r\naccess_token=$(curl --silent --show-error --fail-with-body \\\r\n  https:\/\/auth.sinch.com\/oauth2\/token \\\r\n  --user &quot;$SINCH_KEY_ID:$SINCH_KEY_SECRET&quot; \\\r\n  --data grant_type=client_credentials | jq -r .access_token)\r\n\r\nbody=$(jq -n \\\r\n  --arg app_id &quot;$SINCH_APP_ID&quot; \\\r\n  --arg to &quot;$to&quot; \\\r\n  --arg text &quot;$text&quot; \\\r\n  --arg sender &quot;$SINCH_SMS_SENDER&quot; \\\r\n  &#039;{\r\n    app_id: $app_id,\r\n    recipient: { identified_by: { channel_identities: [{ channel: &quot;SMS&quot;, identity: $to }] } },\r\n    message: { text_message: { text: $text } },\r\n    channel_properties: { SMS_SENDER: $sender }\r\n  }&#039;)\r\n\r\ncurl --silent --show-error --fail-with-body \\\r\n  &quot;https:\/\/$region.conversation.api.sinch.com\/v1\/projects\/$SINCH_PROJECT_ID\/messages:send&quot; \\\r\n  --header &quot;Authorization: Bearer $access_token&quot; \\\r\n  --header &quot;Content-Type: application\/json&quot; \\\r\n  --data &quot;$body&quot;\r\necho\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\">Building the body with <code>jq<\/code> keeps quotes and newlines in your message from breaking the JSON. Run it with your own number:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-530e86d3d3bff78e26973fe00bdef33d_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-530e86d3d3bff78e26973fe00bdef33d_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-530e86d3d3bff78e26973fe00bdef33d_code_0\" role=\"tabpanel\" aria-labelledby=\"block-530e86d3d3bff78e26973fe00bdef33d_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-530e86d3d3bff78e26973fe00bdef33d_code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-530e86d3d3bff78e26973fe00bdef33d_code_0_content\" class=\"language-shell\">\r\n\r\n                                    bash send-sms.sh +15551234567 &quot;Hello from the Sinch Conversation API&quot;\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-09e1e9892b2c0beab8970499db71a726_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-09e1e9892b2c0beab8970499db71a726_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-09e1e9892b2c0beab8970499db71a726_code_0\" role=\"tabpanel\" aria-labelledby=\"block-09e1e9892b2c0beab8970499db71a726_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-09e1e9892b2c0beab8970499db71a726_code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-09e1e9892b2c0beab8970499db71a726_code_0_content\" class=\"language-shell\">\r\n\r\n                                    {&quot;message_id&quot;:&quot;01M613QSW2Q112R8FYHW29E5K9&quot;,&quot;accepted_time&quot;:&quot;2026-10-28T11:18:46.402Z&quot;}\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\">The request body has three parts you&#8217;ll use in every send:<\/p>\n\n<ul class=\"wp-block-list\">\n<li><code>recipient.identified_by.channel_identities<\/code> says who gets the message and on which channel. For SMS, the identity is the phone number.<\/li>\n\n\n\n<li><code>message.text_message.text<\/code> is the message. The same <code>message<\/code> object carries media, cards, and other types on channels that support them.<\/li>\n\n\n\n<li><code>channel_properties.SMS_SENDER<\/code> is the number the message comes from. You can leave it out if your service plan has a default originator. Set it anyway while you&#8217;re on the test number.<\/li>\n<\/ul>\n\n<h2 class=\"wp-block-heading\">Send an SMS with Node.js<\/h2>\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/github.com\/sinch\/sinch-sdk-node\">Sinch Node.js SDK<\/a> handles the token for you. Install it with TypeScript and <code>tsx<\/code>:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-0c51afe3b7a04a2485676d7593c3f41f_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-0c51afe3b7a04a2485676d7593c3f41f_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-0c51afe3b7a04a2485676d7593c3f41f_code_0\" role=\"tabpanel\" aria-labelledby=\"block-0c51afe3b7a04a2485676d7593c3f41f_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-0c51afe3b7a04a2485676d7593c3f41f_code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-0c51afe3b7a04a2485676d7593c3f41f_code_0_content\" class=\"language-shell\">\r\n\r\n                                    npm init -y\r\nnpm pkg set type=module\r\nnpm install @sinch\/sdk-core@1.7.0\r\nnpm install --save-dev typescript@5.9 tsx @types\/node@24\r\nmkdir -p src\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\">Save this as <code>src\/send-sms.ts<\/code>:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-f518a8d4beb703ba846d7153b970ed23_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-f518a8d4beb703ba846d7153b970ed23_code_0\" aria-selected=\"true\">\r\n                                Javascript                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-f518a8d4beb703ba846d7153b970ed23_code_0\" role=\"tabpanel\" aria-labelledby=\"block-f518a8d4beb703ba846d7153b970ed23_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-f518a8d4beb703ba846d7153b970ed23_code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-Javascript\" tabindex=\"0\">\r\n                                <code id=\"block-f518a8d4beb703ba846d7153b970ed23_code_0_content\" class=\"language-Javascript\">\r\n\r\n                                    import { SinchClient } from &quot;@sinch\/sdk-core&quot;;\r\n\r\nfunction requireEnv(name: string): string {\r\n  const value = process.env[name];\r\n  if (!value) {\r\n    throw new Error(`Set the ${name} environment variable`);\r\n  }\r\n  return value;\r\n}\r\n\r\nconst [to, text] = process.argv.slice(2);\r\nif (!to || !text) {\r\n  throw new Error(&#039;Usage: npm run send --  &quot;&quot;&#039;);\r\n}\r\nif (!\/^\\+[1-9]\\d{1,14}$\/.test(to)) {\r\n  throw new Error(`Use E.164 format for the number, for example +15551234567. Got: ${to}`);\r\n}\r\n\r\nconst sinchClient = new SinchClient({\r\n  projectId: requireEnv(&quot;SINCH_PROJECT_ID&quot;),\r\n  keyId: requireEnv(&quot;SINCH_KEY_ID&quot;),\r\n  keySecret: requireEnv(&quot;SINCH_KEY_SECRET&quot;),\r\n  conversationRegion: process.env.SINCH_REGION ?? &quot;us&quot;,\r\n});\r\n\r\nconst response = await sinchClient.conversation.messages.sendTextMessage({\r\n  sendMessageRequestBody: {\r\n    app_id: requireEnv(&quot;SINCH_APP_ID&quot;),\r\n    recipient: {\r\n      identified_by: {\r\n        channel_identities: [{ channel: &quot;SMS&quot;, identity: to }],\r\n      },\r\n    },\r\n    message: { text_message: { text } },\r\n    channel_properties: { SMS_SENDER: requireEnv(&quot;SINCH_SMS_SENDER&quot;) },\r\n  },\r\n});\r\n\r\nconsole.log(`Accepted message ${response.message_id} at ${response.accepted_time?.toISOString()}`);\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\">Add a script to <code>package.json<\/code> and run it:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-691151d109783da13fd1927e9dc8991d_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-691151d109783da13fd1927e9dc8991d_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-691151d109783da13fd1927e9dc8991d_code_0\" role=\"tabpanel\" aria-labelledby=\"block-691151d109783da13fd1927e9dc8991d_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-691151d109783da13fd1927e9dc8991d_code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-691151d109783da13fd1927e9dc8991d_code_0_content\" class=\"language-shell\">\r\n\r\n                                    npm pkg set scripts.send=&quot;tsx src\/send-sms.ts&quot;\r\nnpm run send -- +15551234567 &quot;Hello from the Sinch Node.js SDK&quot;\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-dd523c92ce9f43907c86ede098e83895_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-dd523c92ce9f43907c86ede098e83895_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-dd523c92ce9f43907c86ede098e83895_code_0\" role=\"tabpanel\" aria-labelledby=\"block-dd523c92ce9f43907c86ede098e83895_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-dd523c92ce9f43907c86ede098e83895_code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-dd523c92ce9f43907c86ede098e83895_code_0_content\" class=\"language-shell\">\r\n\r\n                                    Accepted message 01M613R541V5R0CMSY5BNP4DSA at 2026-10-28T11:18:57.921Z\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\">The request body is the same JSON as the <code>curl<\/code> version, with the same snake_case field names. <code>sendTextMessage<\/code> is the typed shortcut for a text message. <code>conversationRegion<\/code> defaults to <code>us<\/code>, so set it if your app is in <code>eu<\/code> or <code>br<\/code>.<\/p>\n\n<h2 class=\"wp-block-heading\">Send an SMS with Python<\/h2>\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/github.com\/sinch\/sinch-sdk-python\">Sinch Python SDK<\/a> supports the Conversation API from version 2.0. Install it in a virtual environment:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-e635e8380104e8adbb7ffede89447281_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-e635e8380104e8adbb7ffede89447281_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-e635e8380104e8adbb7ffede89447281_code_0\" role=\"tabpanel\" aria-labelledby=\"block-e635e8380104e8adbb7ffede89447281_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-e635e8380104e8adbb7ffede89447281_code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-e635e8380104e8adbb7ffede89447281_code_0_content\" class=\"language-shell\">\r\n\r\n                                    python3 -m venv .venv\r\nsource .venv\/bin\/activate\r\npip install sinch==2.3.0\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\">Save this as <code>send_sms.py<\/code>:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-a35bbb739c86bb001b38a71fc363cdf2_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-a35bbb739c86bb001b38a71fc363cdf2_code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-a35bbb739c86bb001b38a71fc363cdf2_code_0\" role=\"tabpanel\" aria-labelledby=\"block-a35bbb739c86bb001b38a71fc363cdf2_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-a35bbb739c86bb001b38a71fc363cdf2_code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-Python\" tabindex=\"0\">\r\n                                <code id=\"block-a35bbb739c86bb001b38a71fc363cdf2_code_0_content\" class=\"language-Python\">\r\n\r\n                                    import os\r\nimport re\r\nimport sys\r\n\r\nfrom sinch import SinchClient\r\nfrom sinch.core.exceptions import SinchException\r\n\r\n\r\ndef require_env(name: str) -&gt; str:\r\n    value = os.environ.get(name)\r\n    if not value:\r\n        sys.exit(f&quot;Set the {name} environment variable&quot;)\r\n    return value\r\n\r\n\r\nif len(sys.argv) != 3:\r\n    sys.exit(&#039;Usage: python send_sms.py  &quot;&quot;&#039;)\r\n\r\nto, text = sys.argv[1], sys.argv[2]\r\nif not re.fullmatch(r&quot;\\+[1-9]\\d{1,14}&quot;, to):\r\n    sys.exit(f&quot;Use E.164 format for the number, for example +15551234567. Got: {to}&quot;)\r\n\r\nsinch_client = SinchClient(\r\n    project_id=require_env(&quot;SINCH_PROJECT_ID&quot;),\r\n    key_id=require_env(&quot;SINCH_KEY_ID&quot;),\r\n    key_secret=require_env(&quot;SINCH_KEY_SECRET&quot;),\r\n    conversation_region=os.environ.get(&quot;SINCH_REGION&quot;, &quot;us&quot;),\r\n)\r\n\r\ntry:\r\n    response = sinch_client.conversation.messages.send_text_message(\r\n        app_id=require_env(&quot;SINCH_APP_ID&quot;),\r\n        text=text,\r\n        recipient_identities=[{&quot;channel&quot;: &quot;SMS&quot;, &quot;identity&quot;: to}],\r\n        channel_properties={&quot;SMS_SENDER&quot;: require_env(&quot;SINCH_SMS_SENDER&quot;)},\r\n    )\r\nexcept SinchException as error:\r\n    sys.exit(f&quot;Sinch API error: {error}&quot;)\r\n\r\nprint(f&quot;Accepted message {response.message_id} at {response.accepted_time}&quot;)\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-9ee5513487a295607f565bc88dc01640_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-9ee5513487a295607f565bc88dc01640_code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-9ee5513487a295607f565bc88dc01640_code_0\" role=\"tabpanel\" aria-labelledby=\"block-9ee5513487a295607f565bc88dc01640_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-9ee5513487a295607f565bc88dc01640_code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-Python\" tabindex=\"0\">\r\n                                <code id=\"block-9ee5513487a295607f565bc88dc01640_code_0_content\" class=\"language-Python\">\r\n\r\n                                    python send_sms.py +15551234567 &quot;Hello from the Sinch Python SDK&quot;\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-4fde13f35ea0f8a8ccebc89d9eedeef0_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-4fde13f35ea0f8a8ccebc89d9eedeef0_code_0\" aria-selected=\"true\">\r\n                                Python                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-4fde13f35ea0f8a8ccebc89d9eedeef0_code_0\" role=\"tabpanel\" aria-labelledby=\"block-4fde13f35ea0f8a8ccebc89d9eedeef0_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-4fde13f35ea0f8a8ccebc89d9eedeef0_code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-Python\" tabindex=\"0\">\r\n                                <code id=\"block-4fde13f35ea0f8a8ccebc89d9eedeef0_code_0_content\" class=\"language-Python\">\r\n\r\n                                    Accepted message 01M613R7AK2SST6VXH24HVF278 at 2026-10-28 11:19:00.179000+00:00\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\">The Python SDK takes keyword arguments instead of a request body. Set <code>conversation_region<\/code> every time: The Python client has no default region for the Conversation API.<\/p>\n\n<h2 class=\"wp-block-heading\">Accepted isn&#8217;t delivered<\/h2>\n\n<p class=\"wp-block-paragraph\">A <code>200<\/code> response with a <code>message_id<\/code> means Sinch accepted the message. Whether the phone received it comes later, as a Delivery Report sent to a webhook on your app. For SMS, the report moves from <code>QUEUED_ON_CHANNEL<\/code> to <code>DELIVERED<\/code> or <code>FAILED<\/code>. The phone number in the report comes back without the leading <code>+<\/code>, so normalize numbers before you match reports to recipients.<\/p>\n\n<p class=\"wp-block-paragraph\">To get reports, add a webhook to the app with the <code>MESSAGE_DELIVERY<\/code> trigger. In the dashboard, open the app and add it under <strong>Webhooks<\/strong>. With the API, get a token and make one request:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-0d47c6d7a7cbd57edfdc0c7488ad0636_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-0d47c6d7a7cbd57edfdc0c7488ad0636_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-0d47c6d7a7cbd57edfdc0c7488ad0636_code_0\" role=\"tabpanel\" aria-labelledby=\"block-0d47c6d7a7cbd57edfdc0c7488ad0636_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-0d47c6d7a7cbd57edfdc0c7488ad0636_code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-0d47c6d7a7cbd57edfdc0c7488ad0636_code_0_content\" class=\"language-shell\">\r\n\r\n                                    SINCH_ACCESS_TOKEN=$(curl --silent --show-error --fail-with-body \\\r\n  https:\/\/auth.sinch.com\/oauth2\/token \\\r\n  --user &quot;$SINCH_KEY_ID:$SINCH_KEY_SECRET&quot; \\\r\n  --data grant_type=client_credentials | jq -r .access_token)\r\n\r\ncurl --silent --show-error --fail-with-body \\\r\n  &quot;https:\/\/$SINCH_REGION.conversation.api.sinch.com\/v1\/projects\/$SINCH_PROJECT_ID\/webhooks&quot; \\\r\n  --header &quot;Authorization: Bearer $SINCH_ACCESS_TOKEN&quot; \\\r\n  --header &quot;Content-Type: application\/json&quot; \\\r\n  --data &#039;{\r\n    &quot;app_id&quot;: &quot;YOUR_APP_ID&quot;,\r\n    &quot;target&quot;: &quot;https:\/\/example.com\/sinch\/callbacks&quot;,\r\n    &quot;target_type&quot;: &quot;HTTP&quot;,\r\n    &quot;triggers&quot;: [&quot;MESSAGE_DELIVERY&quot;, &quot;MESSAGE_INBOUND&quot;]\r\n  }&#039;\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\"><code>MESSAGE_INBOUND<\/code> sends you the replies, too. A failed report includes a <code>reason<\/code> with a code that tells you why, which is where a rejected sender number or a recipient your account can&#8217;t send to shows up. Sinch retries a webhook that doesn&#8217;t answer with a <code>2xx<\/code>, so the handler has to cope with getting the same report twice.<\/p>\n\n<h2 class=\"wp-block-heading\">Why the request looks like this<\/h2>\n\n<p class=\"wp-block-paragraph\">A few choices in these scripts are worth explaining, because the docs show other options.<\/p>\n\n<h3 class=\"wp-block-heading\">OAuth 2.0 instead of Basic auth<\/h3>\n\n<p class=\"wp-block-paragraph\">The Conversation API also accepts your key ID and secret as Basic auth directly on <code>messages:send<\/code>, and the getting-started guide uses it for the first call. Basic auth is heavily rate limited and meant for testing. The token request is one extra call, the SDKs make it for you, and it&#8217;s what you&#8217;ll run in production, so the <code>curl<\/code> script uses it from the start.<\/p>\n\n<h3 class=\"wp-block-heading\"><code>identified_by<\/code> instead of <code>contact_id<\/code><\/h3>\n\n<p class=\"wp-block-paragraph\">You can address a message to a phone number with <code>identified_by<\/code>, or to a contact the API stored earlier with <code>contact_id<\/code>. Apps created after April 16, 2025 default to <strong>Dispatch<\/strong> mode, which doesn&#8217;t store contacts, so <code>contact_id<\/code> has nothing to point at. <code>identified_by<\/code> works in both modes. Switch the app to <strong>Conversation<\/strong> mode if you want contacts and conversation history stored.<\/p>\n\n<h3 class=\"wp-block-heading\">Setting <code>SMS_SENDER<\/code> every time<\/h3>\n\n<p class=\"wp-block-paragraph\">Without <code>SMS_SENDER<\/code>, the message goes out from the service plan&#8217;s default originator, if it has one. The test number on a new account needs it set. A sender the network rejects doesn&#8217;t fail the HTTP request: It shows up later as a <code>FAILED<\/code> Delivery Report. Setting it explicitly makes the sender visible in your code instead of in a dashboard setting.<\/p>\n\n<h2 class=\"wp-block-heading\">Point your coding agent at the right API<\/h2>\n\n<p class=\"wp-block-paragraph\">Coding agents learned from years of examples on the web, and many of those use the older standalone SMS API (XMS). That API reached <a href=\"https:\/\/github.com\/sinch\/sinch-sdk-node#readme\">end-of-sale<\/a> on April 15, 2026, and it stays available only for integrations already built on it. Anything new should use the Conversation API, even on an account that has used the SMS API before. If you have code on the SMS API, <a href=\"https:\/\/sinch.com\/de\/blog\/migration-von-sms-xms-api-zu-conversation-api\/\">Migrate from the Sinch SMS API to the Conversation API<\/a> maps it field by field.<\/p>\n\n<p class=\"wp-block-paragraph\">If you ask an agent to &#8222;send an SMS with Sinch&#8220; and it writes code against <code>\/xms\/v1\/<\/code>, tell it which API you want. A line in your project&#8217;s <code>AGENTS.md<\/code> or <code>CLAUDE.md<\/code> does that for every session:<\/p>\n    <div data-content-type=\"longform\" class=\"code-snippet longform-spacings rounded-lg overflow-hidden shadow \" data-count=\"1\">\r\n        <ul class=\"nav nav-buttons code-snippet__tabs longform-except position-relative d-flex gap-2 flex-wrap p-3\" role=\"tablist\">\r\n\r\n                            \r\n                    \r\n                        <li class=\"nav-item\" role=\"presentation\">\r\n                            <button class=\"nav-link active\" data-bs-toggle=\"tab\" data-bs-target=\"#block-4c10d65124dd6d85fc39fdef8bde7cf7_code_0\" type=\"button\" role=\"tab\" aria-controls=\"block-4c10d65124dd6d85fc39fdef8bde7cf7_code_0\" aria-selected=\"true\">\r\n                                Shell                            <\/button>\r\n                        <\/li>\r\n\r\n                    \r\n                            \r\n        <\/ul>\r\n        <div class=\"code-snippet__tab-content tab-content\">\r\n\r\n                            \r\n                    <div class=\"tab-pane show active\" id=\"block-4c10d65124dd6d85fc39fdef8bde7cf7_code_0\" role=\"tabpanel\" aria-labelledby=\"block-4c10d65124dd6d85fc39fdef8bde7cf7_code_0\">\r\n                        <div class=\"code-snippet__code-wrapper\">\r\n                            <div class=\"nav nav-buttons code-snippet__copy-wrapper\">\r\n                                <button type=\"button\" class=\"nav-link code-snippet__copy\" data-clipboard-target=\"#block-4c10d65124dd6d85fc39fdef8bde7cf7_code_0_content\" data-clipboard-label=\"In die Zwischenablage kopieren\" data-clipboard-success-label=\"Kopiert\" data-clipboard-error-label=\"Kopieren nicht m\u00f6glich\" data-tooltip=\"In die Zwischenablage kopieren\" data-tooltip-placement=\"left\" role=\"tooltip\" aria-label=\"In die Zwischenablage kopieren\">\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--default\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/file-stack.svg\"><\/svg>\r\n                                    <svg class=\"code-snippet__copy-icon code-snippet__copy-icon--success\" width=\"24\" height=\"24\" aria-hidden=\"true\" data-url=\"https:\/\/sinch.com\/wp-content\/plugins\/sinch-core\/assets\/icons\/sinch\/badge-check.svg\"><\/svg>\r\n                                <\/button>\r\n                            <\/div>\r\n                                                        <pre class=\"w-100 h-100 m-0 line-numbers language-shell\" tabindex=\"0\">\r\n                                <code id=\"block-4c10d65124dd6d85fc39fdef8bde7cf7_code_0_content\" class=\"language-shell\">\r\n\r\n                                    ## Sinch\r\n- Send SMS with the Sinch Conversation API (`\/v1\/projects\/{project_id}\/messages:send`), not the SMS API (`\/xms\/v1\/`).\r\n- Use `@sinch\/sdk-core` (Node.js) or `sinch` (Python), with project ID, key ID, and key secret.\r\n                                <\/code>\r\n                            <\/pre>\r\n                        <\/div>\r\n                    <\/div>\r\n                                    <\/div>\r\n    <\/div>\r\n\n<p class=\"wp-block-paragraph\">The <a href=\"https:\/\/github.com\/sinch\/skills\">Sinch agent skills<\/a> go further. They give your agent the Conversation API request shapes, the SMS channel rules, and the setup steps. The <a href=\"https:\/\/github.com\/sinch\/sinch-plugins\">Sinch plugins<\/a> for Claude Code, Cursor, and Gemini CLI bundle those skills with the <a href=\"https:\/\/github.com\/sinch\/sinch-mcp-server\">Sinch MCP server<\/a>, which sends SMS through the Conversation API, too.<\/p>\n\n<h2 class=\"wp-block-heading\">Troubleshooting<\/h2>\n\n<ul class=\"wp-block-list\">\n<li><strong><code>404<\/code> from <code>messages:send<\/code><\/strong>. The region in the URL doesn&#8217;t match the region of the app. An app created in EU is only reachable at <code>eu.conversation.api.sinch.com<\/code>. Check the region in the app&#8217;s settings and set <code>SINCH_REGION<\/code> to match.<\/li>\n<\/ul>\n\n<ul class=\"wp-block-list\">\n<li><strong><code>401<\/code> from the token endpoint<\/strong>. The key ID or secret is wrong, or you used a project ID where the key ID goes. Access keys are under <strong>Settings<\/strong>, <strong>Access Keys<\/strong>. If you lost the secret, create a new key.<\/li>\n<\/ul>\n\n<ul class=\"wp-block-list\">\n<li><strong><code>400<\/code> mentioning the channel. <\/strong>The app doesn&#8217;t have the SMS channel set up, or the channel isn&#8217;t linked to a service plan. Open the app and check the <strong>SMS<\/strong> row.<\/li>\n<\/ul>\n\n<ul class=\"wp-block-list\">\n<li><strong>The API accepted the message but nothing arrived<\/strong>. Check the Delivery Report for the <code>message_id<\/code>. On a trial account, check that the recipient is a number the account can send to. For US numbers, traffic from a 10-digit long code needs a registered <a href=\"https:\/\/developers.sinch.com\/docs\/10dlc-registration\">10DLC<\/a> brand and campaign.<\/li>\n<\/ul>\n\n<ul class=\"wp-block-list\">\n<li><strong>The app is in a different region than the number.<\/strong> The app has to be in the same region as the SMS service plan. If they don&#8217;t match, create a new app in the right region and set up the SMS channel there.<\/li>\n<\/ul>\n\n<h2 class=\"wp-block-heading\">Next steps<\/h2>\n\n<p class=\"wp-block-paragraph\">From here, the same request sends to other channels. Add RCS or WhatsApp to the app, give the recipient an identity for each channel in <code>channel_identities<\/code>, and set <code>channel_priority_order<\/code> on the request, for example <code>[\"RCS\", \"SMS\"]<\/code>. The <a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/keyconcepts\">key concepts page<\/a> explains when the Conversation API falls back to the next channel. If you have code on the standalone SMS API, <a href=\"https:\/\/sinch.com\/de\/blog\/migration-von-sms-xms-api-zu-conversation-api\/\">Migrate from the Sinch SMS API to the Conversation API<\/a> covers batches, Delivery Reports, and inbound messages.<\/p>\n\n<h2 class=\"wp-block-heading\">Additional resources<\/h2>\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/getting-started\">Conversation API getting started<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/api-reference\/conversation\">Conversation API reference<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/channel-support\/sms\/set-up\">SMS channel set-up<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/channel-support\/sms\/properties\">SMS channel properties<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/developers.sinch.com\/docs\/conversation\/callbacks\">Conversation API callbacks<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/sinch\/sinch-sdk-node\">Sinch Node.js SDK<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/sinch\/sinch-sdk-python\">Sinch Python SDK<\/a><\/li>\n<\/ul>\n","protected":false},"author":93,"featured_media":214365,"menu_order":0,"template":"","meta":{"_acf_changed":false,"footnotes":""},"tags":[],"blog_category":[752],"class_list":["post-214404","blog","type-blog","status-publish","has-post-thumbnail","hentry","blog_category-entwickler"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>SMS mit der Sinch Conversation API versenden: curl, Node.js, Python<\/title>\n<meta name=\"description\" content=\"Versenden Sie eine SMS mit der Sinch Conversation API \u00fcber curl, Node.js oder Python: Richten Sie eine App mit dem SMS-Kanal ein, holen Sie sich ein Token und versenden Sie Ihre erste Nachricht.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SMS mit der Sinch Conversation API versenden: curl, Node.js, Python\" \/>\n<meta property=\"og:description\" content=\"Versenden Sie eine SMS mit der Sinch Conversation API \u00fcber curl, Node.js oder Python: Richten Sie eine App mit dem SMS-Kanal ein, holen Sie sich ein Token und versenden Sie Ihre erste Nachricht.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Sinch\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/wearesinch\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-29T16:18:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/sinch.com\/wp-content\/uploads\/2026\/10\/SI-Blog-Developers-Send-sms-conversation-api-curl-nodejs-python-Header.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1296\" \/>\n\t<meta property=\"og:image:height\" content=\"788\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@WeAreSinch\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/blog\\\/send-sms-conversation-api-curl-nodejs-python\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/blog\\\/send-sms-conversation-api-curl-nodejs-python\\\/\"},\"author\":{\"name\":\"Gunnar Grosch\",\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/#\\\/schema\\\/person\\\/b2bde1c2728a21bc953ea0e129936c08\"},\"headline\":\"SMS mit der Sinch Conversation API in curl, Node.js und Python versenden\",\"datePublished\":\"2026-10-29T16:18:18+00:00\",\"dateModified\":\"2026-10-29T16:18:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/blog\\\/send-sms-conversation-api-curl-nodejs-python\\\/\"},\"wordCount\":1459,\"publisher\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/blog\\\/send-sms-conversation-api-curl-nodejs-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/SI-Blog-Developers-Send-sms-conversation-api-curl-nodejs-python-Header.png\",\"inLanguage\":\"de-DE\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/blog\\\/send-sms-conversation-api-curl-nodejs-python\\\/\",\"url\":\"https:\\\/\\\/sinch.com\\\/de\\\/blog\\\/send-sms-conversation-api-curl-nodejs-python\\\/\",\"name\":\"SMS mit der Sinch Conversation API versenden: curl, Node.js, Python\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/blog\\\/send-sms-conversation-api-curl-nodejs-python\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/blog\\\/send-sms-conversation-api-curl-nodejs-python\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/SI-Blog-Developers-Send-sms-conversation-api-curl-nodejs-python-Header.png\",\"datePublished\":\"2026-10-29T16:18:18+00:00\",\"dateModified\":\"2026-10-29T16:18:19+00:00\",\"description\":\"Versenden Sie eine SMS mit der Sinch Conversation API \u00fcber curl, Node.js oder Python: Richten Sie eine App mit dem SMS-Kanal ein, holen Sie sich ein Token und versenden Sie Ihre erste Nachricht.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/blog\\\/send-sms-conversation-api-curl-nodejs-python\\\/#breadcrumb\"},\"inLanguage\":\"de-DE\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sinch.com\\\/de\\\/blog\\\/send-sms-conversation-api-curl-nodejs-python\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de-DE\",\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/blog\\\/send-sms-conversation-api-curl-nodejs-python\\\/#primaryimage\",\"url\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/SI-Blog-Developers-Send-sms-conversation-api-curl-nodejs-python-Header.png\",\"contentUrl\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/SI-Blog-Developers-Send-sms-conversation-api-curl-nodejs-python-Header.png\",\"width\":1296,\"height\":788},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/blog\\\/send-sms-conversation-api-curl-nodejs-python\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sinch.com\\\/de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\\\/\\\/sinch.com\\\/de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"SMS mit der Sinch Conversation API in curl, Node.js und Python versenden\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/#website\",\"url\":\"https:\\\/\\\/sinch.com\\\/de\\\/\",\"name\":\"Sinch\",\"description\":\"SMS Messaging, Voice, E-Mail, Video & Verifizierungs-APIs | Sinch\",\"publisher\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sinch.com\\\/de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de-DE\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/#organization\",\"name\":\"Sinch\",\"url\":\"https:\\\/\\\/sinch.com\\\/de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de-DE\",\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/Thumbnail-Logo-Honey.png\",\"contentUrl\":\"https:\\\/\\\/sinch.com\\\/wp-content\\\/uploads\\\/2024\\\/09\\\/Thumbnail-Logo-Honey.png\",\"width\":800,\"height\":496,\"caption\":\"Sinch\"},\"image\":{\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/wearesinch\\\/\",\"https:\\\/\\\/x.com\\\/WeAreSinch\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/sinch\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCZZ2u_B2afTxA0v-xcgfsaw\",\"https:\\\/\\\/www.instagram.com\\\/wearesinch\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sinch.com\\\/de\\\/#\\\/schema\\\/person\\\/b2bde1c2728a21bc953ea0e129936c08\",\"name\":\"Gunnar Grosch\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de-DE\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g\",\"caption\":\"Gunnar Grosch\"},\"description\":\"Gunnar Grosch is a Principal Developer Advocate at Sinch and an engineer with over 25 years of experience building software, scaling developer communities, and making complex technology accessible. He shares code, insights, and lessons through conference talks, blog posts, and open source.\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SMS mit der Sinch Conversation API versenden: curl, Node.js, Python","description":"Versenden Sie eine SMS mit der Sinch Conversation API \u00fcber curl, Node.js oder Python: Richten Sie eine App mit dem SMS-Kanal ein, holen Sie sich ein Token und versenden Sie Ihre erste Nachricht.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/","og_locale":"de_DE","og_type":"article","og_title":"SMS mit der Sinch Conversation API versenden: curl, Node.js, Python","og_description":"Versenden Sie eine SMS mit der Sinch Conversation API \u00fcber curl, Node.js oder Python: Richten Sie eine App mit dem SMS-Kanal ein, holen Sie sich ein Token und versenden Sie Ihre erste Nachricht.","og_url":"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/","og_site_name":"Sinch","article_publisher":"https:\/\/www.facebook.com\/wearesinch\/","article_modified_time":"2026-10-29T16:18:19+00:00","og_image":[{"width":1296,"height":788,"url":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/10\/SI-Blog-Developers-Send-sms-conversation-api-curl-nodejs-python-Header.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@WeAreSinch","twitter_misc":{"Gesch\u00e4tzte Lesezeit":"7 Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/#article","isPartOf":{"@id":"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/"},"author":{"name":"Gunnar Grosch","@id":"https:\/\/sinch.com\/de\/#\/schema\/person\/b2bde1c2728a21bc953ea0e129936c08"},"headline":"SMS mit der Sinch Conversation API in curl, Node.js und Python versenden","datePublished":"2026-10-29T16:18:18+00:00","dateModified":"2026-10-29T16:18:19+00:00","mainEntityOfPage":{"@id":"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/"},"wordCount":1459,"publisher":{"@id":"https:\/\/sinch.com\/de\/#organization"},"image":{"@id":"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/#primaryimage"},"thumbnailUrl":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/10\/SI-Blog-Developers-Send-sms-conversation-api-curl-nodejs-python-Header.png","inLanguage":"de-DE"},{"@type":"WebPage","@id":"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/","url":"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/","name":"SMS mit der Sinch Conversation API versenden: curl, Node.js, Python","isPartOf":{"@id":"https:\/\/sinch.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/#primaryimage"},"image":{"@id":"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/#primaryimage"},"thumbnailUrl":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/10\/SI-Blog-Developers-Send-sms-conversation-api-curl-nodejs-python-Header.png","datePublished":"2026-10-29T16:18:18+00:00","dateModified":"2026-10-29T16:18:19+00:00","description":"Versenden Sie eine SMS mit der Sinch Conversation API \u00fcber curl, Node.js oder Python: Richten Sie eine App mit dem SMS-Kanal ein, holen Sie sich ein Token und versenden Sie Ihre erste Nachricht.","breadcrumb":{"@id":"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/#breadcrumb"},"inLanguage":"de-DE","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/"]}]},{"@type":"ImageObject","inLanguage":"de-DE","@id":"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/#primaryimage","url":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/10\/SI-Blog-Developers-Send-sms-conversation-api-curl-nodejs-python-Header.png","contentUrl":"https:\/\/sinch.com\/wp-content\/uploads\/2026\/10\/SI-Blog-Developers-Send-sms-conversation-api-curl-nodejs-python-Header.png","width":1296,"height":788},{"@type":"BreadcrumbList","@id":"https:\/\/sinch.com\/de\/blog\/send-sms-conversation-api-curl-nodejs-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sinch.com\/de\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/sinch.com\/de\/blog\/"},{"@type":"ListItem","position":3,"name":"SMS mit der Sinch Conversation API in curl, Node.js und Python versenden"}]},{"@type":"WebSite","@id":"https:\/\/sinch.com\/de\/#website","url":"https:\/\/sinch.com\/de\/","name":"Sinch","description":"SMS Messaging, Voice, E-Mail, Video & Verifizierungs-APIs | Sinch","publisher":{"@id":"https:\/\/sinch.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sinch.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de-DE"},{"@type":"Organization","@id":"https:\/\/sinch.com\/de\/#organization","name":"Sinch","url":"https:\/\/sinch.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de-DE","@id":"https:\/\/sinch.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/sinch.com\/wp-content\/uploads\/2024\/09\/Thumbnail-Logo-Honey.png","contentUrl":"https:\/\/sinch.com\/wp-content\/uploads\/2024\/09\/Thumbnail-Logo-Honey.png","width":800,"height":496,"caption":"Sinch"},"image":{"@id":"https:\/\/sinch.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/wearesinch\/","https:\/\/x.com\/WeAreSinch","https:\/\/www.linkedin.com\/company\/sinch","https:\/\/www.youtube.com\/channel\/UCZZ2u_B2afTxA0v-xcgfsaw","https:\/\/www.instagram.com\/wearesinch\/"]},{"@type":"Person","@id":"https:\/\/sinch.com\/de\/#\/schema\/person\/b2bde1c2728a21bc953ea0e129936c08","name":"Gunnar Grosch","image":{"@type":"ImageObject","inLanguage":"de-DE","@id":"https:\/\/secure.gravatar.com\/avatar\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8f177695c01082754db3f0858d534fdaceedba31f74932d7de39991e5e9d7e8d?s=96&d=mm&r=g","caption":"Gunnar Grosch"},"description":"Gunnar Grosch is a Principal Developer Advocate at Sinch and an engineer with over 25 years of experience building software, scaling developer communities, and making complex technology accessible. He shares code, insights, and lessons through conference talks, blog posts, and open source."}]}},"_links":{"self":[{"href":"https:\/\/sinch.com\/de\/wp-json\/wp\/v2\/blog\/214404","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sinch.com\/de\/wp-json\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/sinch.com\/de\/wp-json\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/sinch.com\/de\/wp-json\/wp\/v2\/users\/93"}],"version-history":[{"count":1,"href":"https:\/\/sinch.com\/de\/wp-json\/wp\/v2\/blog\/214404\/revisions"}],"predecessor-version":[{"id":214406,"href":"https:\/\/sinch.com\/de\/wp-json\/wp\/v2\/blog\/214404\/revisions\/214406"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sinch.com\/de\/wp-json\/wp\/v2\/media\/214365"}],"wp:attachment":[{"href":"https:\/\/sinch.com\/de\/wp-json\/wp\/v2\/media?parent=214404"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sinch.com\/de\/wp-json\/wp\/v2\/tags?post=214404"},{"taxonomy":"blog_category","embeddable":true,"href":"https:\/\/sinch.com\/de\/wp-json\/wp\/v2\/blog_category?post=214404"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}