-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathindex.html
More file actions
206 lines (179 loc) Β· 94 KB
/
index.html
File metadata and controls
206 lines (179 loc) Β· 94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
<!DOCTYPE html><html class="default" lang="en" data-base="./"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>@seven.io/client</title><meta name="description" content="Documentation for @seven.io/client"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script defer src="assets/main.js"></script><script async src="assets/icons.js" id="tsd-icons-script"></script><script async src="assets/search.js" id="tsd-search-script"></script><script async src="assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="index.html" class="title">@seven.io/client</a><div id="tsd-toolbar-links"></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><h1>@seven.io/client</h1></div><div class="tsd-panel tsd-typography"><img src="https://www.seven.io/wp-content/uploads/Logo.svg" width="250" />
<h1 id="official-javascripttypescript-api-client-for-sevenio" class="tsd-anchor-link">Official JavaScript/TypeScript API Client for <a href="https://www.seven.io">seven.io</a><a href="#official-javascripttypescript-api-client-for-sevenio" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h1><p><a href="https://badge.fury.io/js/%40seven.io%2Fclient"><img src="https://badge.fury.io/js/%40seven.io%2Fclient.svg" alt="npm version"></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-teal.svg" alt="License: MIT"></a>
<a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-Ready-blue.svg" alt="TypeScript"></a></p>
<p>A modern, fully-typed JavaScript/TypeScript client for the <a href="http://seven.io">seven.io</a> communications platform. Send SMS, make voice calls, perform phone number lookups, manage contacts, and access all <a href="http://seven.io">seven.io</a> services with a simple, intuitive API.</p>
<h2 id="features" class="tsd-anchor-link">Features<a href="#features" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><ul>
<li>π± <strong>SMS & Voice</strong>: Send SMS messages and make voice calls</li>
<li>π <strong>Phone Lookups</strong>: HLR, MNP, and CNAM lookups</li>
<li>π₯ <strong>Contact Management</strong>: Organize contacts and groups</li>
<li>π <strong>Analytics & Reporting</strong>: Track usage and performance</li>
<li>π― <strong>Rich Communication</strong>: RCS messaging support</li>
<li>π <strong>Secure</strong>: Optional request signing with HMAC-SHA256</li>
<li>π <strong>Cross-platform</strong>: Works in Node.js and browsers</li>
<li>π <strong>Fully Typed</strong>: Complete TypeScript definitions</li>
<li>β‘ <strong>Modern</strong>: Built with ES modules and async/await</li>
</ul>
<h2 id="installation" class="tsd-anchor-link">Installation<a href="#installation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p><strong>This library relies on the global fetch API. To use this library with
Node.js < 18, <a href="https://github.com/node-fetch/node-fetch">node-fetch</a> is required.</strong></p>
<p>For compatibility with Node.js versions < 12, please also install
the <a href="https://github.com/es-shims/globalThis">globalThis polyfill</a>.</p>
<h3 id="package-managers" class="tsd-anchor-link">Package Managers<a href="#package-managers" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="bash"><span class="hl-0"># npm</span><br/><span class="hl-1">npm</span><span class="hl-2"> </span><span class="hl-3">install</span><span class="hl-2"> </span><span class="hl-3">@seven.io/client</span><br/><br/><span class="hl-0"># yarn</span><br/><span class="hl-1">yarn</span><span class="hl-2"> </span><span class="hl-3">add</span><span class="hl-2"> </span><span class="hl-3">@seven.io/client</span><br/><br/><span class="hl-0"># pnpm</span><br/><span class="hl-1">pnpm</span><span class="hl-2"> </span><span class="hl-3">add</span><span class="hl-2"> </span><span class="hl-3">@seven.io/client</span>
</code><button type="button">Copy</button></pre>
<h3 id="browser-cdn" class="tsd-anchor-link">Browser CDN<a href="#browser-cdn" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="html"><span class="hl-4"><</span><span class="hl-5">script</span><span class="hl-6"> </span><span class="hl-7">src</span><span class="hl-6">=</span><span class="hl-8">"https://unpkg.com/@seven.io/client/dist/seven-client.umd.cjs"</span><span class="hl-4">></</span><span class="hl-5">script</span><span class="hl-4">></span>
</code><button type="button">Copy</button></pre>
<h2 id="authentication" class="tsd-anchor-link">Authentication<a href="#authentication" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>The <a href="http://seven.io">seven.io</a> client supports two authentication methods:</p>
<h3 id="api-key-authentication" class="tsd-anchor-link">API Key Authentication<a href="#api-key-authentication" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="javascript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">Client</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_SEVEN_IO_API_KEY'</span><br/><span class="hl-2">})</span>
</code><button type="button">Copy</button></pre>
<h3 id="bearer-token-authentication" class="tsd-anchor-link">Bearer Token Authentication<a href="#bearer-token-authentication" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="javascript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">Client</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'Bearer YOUR_BEARER_TOKEN'</span><br/><span class="hl-2">})</span>
</code><button type="button">Copy</button></pre>
<h3 id="request-signing-optional" class="tsd-anchor-link">Request Signing (Optional)<a href="#request-signing-optional" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>For enhanced security, you can enable request signing using HMAC-SHA256. When enabled, all requests will be signed with a timestamp, nonce, and hash of the request data:</p>
<pre><code class="javascript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">Client</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_SEVEN_IO_API_KEY'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">signingSecret:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_SIGNING_SECRET'</span><br/><span class="hl-2">})</span>
</code><button type="button">Copy</button></pre>
<p>With request signing enabled:</p>
<ul>
<li>Each request includes <code>X-Timestamp</code>, <code>X-Nonce</code>, and <code>X-Signature</code> headers</li>
<li>The signature is computed as <code>HMAC-SHA256(timestamp + nonce + HTTP_METHOD + URL + MD5(request_body), signingSecret)</code></li>
<li>This ensures request authenticity and prevents replay attacks</li>
</ul>
<h3 id="debug-mode" class="tsd-anchor-link">Debug Mode<a href="#debug-mode" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Enable debug mode to see detailed request/response information:</p>
<pre><code class="javascript"><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_API_KEY'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">debug:</span><span class="hl-2"> </span><span class="hl-11">true</span><br/><span class="hl-2">})</span>
</code><button type="button">Copy</button></pre>
<h2 id="quick-start" class="tsd-anchor-link">Quick Start<a href="#quick-start" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><h3 id="basic-usage" class="tsd-anchor-link">Basic Usage<a href="#basic-usage" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="javascript"><span class="hl-0">// ESM (modern environments)</span><br/><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">Client</span><span class="hl-2">, </span><span class="hl-10">BalanceResource</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-0">// CommonJS (Node.js)</span><br/><span class="hl-0">// const { Client, BalanceResource } = require('@seven.io/client')</span><br/><br/><span class="hl-0">// For Node.js < 18, add fetch polyfill:</span><br/><span class="hl-0">// globalThis.fetch = require('node-fetch').default</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_SEVEN_IO_API_KEY'</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">balance</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">BalanceResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">result</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">balance</span><span class="hl-2">.</span><span class="hl-1">get</span><span class="hl-2">()</span><br/><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Account balance:'</span><span class="hl-2">, </span><span class="hl-10">result</span><span class="hl-2">)</span><br/><br/><span class="hl-0">// Or with promises</span><br/><span class="hl-10">balance</span><span class="hl-2">.</span><span class="hl-1">get</span><span class="hl-2">()</span><br/><span class="hl-2"> .</span><span class="hl-1">then</span><span class="hl-2">(</span><span class="hl-10">result</span><span class="hl-2"> </span><span class="hl-11">=></span><span class="hl-2"> </span><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Account balance:'</span><span class="hl-2">, </span><span class="hl-10">result</span><span class="hl-2">))</span><br/><span class="hl-2"> .</span><span class="hl-1">catch</span><span class="hl-2">(</span><span class="hl-10">error</span><span class="hl-2"> </span><span class="hl-11">=></span><span class="hl-2"> </span><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">error</span><span class="hl-2">(</span><span class="hl-3">'Error:'</span><span class="hl-2">, </span><span class="hl-10">error</span><span class="hl-2">))</span>
</code><button type="button">Copy</button></pre>
<h3 id="send-your-first-sms" class="tsd-anchor-link">Send Your First SMS<a href="#send-your-first-sms" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="javascript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">Client</span><span class="hl-2">, </span><span class="hl-10">SmsResource</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_SEVEN_IO_API_KEY'</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">sms</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">SmsResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">result</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">sms</span><span class="hl-2">.</span><span class="hl-1">dispatch</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">to:</span><span class="hl-2"> </span><span class="hl-3">'+49176123456789'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">text:</span><span class="hl-2"> </span><span class="hl-3">'Hello from seven.io!'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">from:</span><span class="hl-2"> </span><span class="hl-3">'MyApp'</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'SMS sent:'</span><span class="hl-2">, </span><span class="hl-10">result</span><span class="hl-2">)</span>
</code><button type="button">Copy</button></pre>
<h2 id="available-resources" class="tsd-anchor-link">Available Resources<a href="#available-resources" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>All <a href="http://seven.io">seven.io</a> services are organized into resource classes. Each resource provides methods to interact with specific API endpoints:</p>
<h3 id="π±-messaging" class="tsd-anchor-link">π± Messaging<a href="#π±-messaging" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ul>
<li><strong><code>SmsResource</code></strong> - Send and manage SMS messages</li>
<li><strong><code>VoiceResource</code></strong> - Text-to-speech voice calls</li>
<li><strong><code>RcsResource</code></strong> - Rich Communication Services messaging</li>
</ul>
<h3 id="π-lookup--validation" class="tsd-anchor-link">π Lookup & Validation<a href="#π-lookup--validation" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ul>
<li><strong><code>LookupResource</code></strong> - Phone number lookup (HLR, MNP, CNAM)</li>
<li><strong><code>ValidateResource</code></strong> - Phone number validation</li>
</ul>
<h3 id="π₯-contact-management" class="tsd-anchor-link">π₯ Contact Management<a href="#π₯-contact-management" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ul>
<li><strong><code>ContactsResource</code></strong> - Manage individual contacts</li>
<li><strong><code>GroupsResource</code></strong> - Organize contacts into groups</li>
</ul>
<h3 id="π-analytics--monitoring" class="tsd-anchor-link">π Analytics & Monitoring<a href="#π-analytics--monitoring" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ul>
<li><strong><code>AnalyticsResource</code></strong> - Usage analytics and reporting</li>
<li><strong><code>BalanceResource</code></strong> - Account balance queries</li>
<li><strong><code>PricingResource</code></strong> - Service pricing information</li>
<li><strong><code>JournalResource</code></strong> - Message history and logs</li>
<li><strong><code>StatusResource</code></strong> - Message delivery status</li>
</ul>
<h3 id="βοΈ-configuration--management" class="tsd-anchor-link">βοΈ Configuration & Management<a href="#βοΈ-configuration--management" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ul>
<li><strong><code>HooksResource</code></strong> - Webhook management</li>
<li><strong><code>NumbersResource</code></strong> - Phone number management</li>
<li><strong><code>SubaccountsResource</code></strong> - Subaccount administration</li>
</ul>
<h3 id="basic-usage-example" class="tsd-anchor-link">Basic Usage Example<a href="#basic-usage-example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="javascript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">Client</span><span class="hl-2">, </span><span class="hl-10">SmsResource</span><span class="hl-2">, </span><span class="hl-10">BalanceResource</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({ </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_API_KEY'</span><span class="hl-2"> })</span><br/><br/><span class="hl-0">// Use any resource</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">sms</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">SmsResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">balance</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">BalanceResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">pricing</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">PricingResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span>
</code><button type="button">Copy</button></pre>
<h2 id="code-examples" class="tsd-anchor-link">Code Examples<a href="#code-examples" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><h3 id="sms-messaging" class="tsd-anchor-link">SMS Messaging<a href="#sms-messaging" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="javascript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">Client</span><span class="hl-2">, </span><span class="hl-10">SmsResource</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({ </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_API_KEY'</span><span class="hl-2"> })</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">sms</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">SmsResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span><br/><br/><span class="hl-0">// Send a simple SMS</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">result</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">sms</span><span class="hl-2">.</span><span class="hl-1">dispatch</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">to:</span><span class="hl-2"> </span><span class="hl-3">'+49176123456789'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">text:</span><span class="hl-2"> </span><span class="hl-3">'Hello World!'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">from:</span><span class="hl-2"> </span><span class="hl-3">'YourApp'</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-0">// Send to multiple recipients</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">bulkResult</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">sms</span><span class="hl-2">.</span><span class="hl-1">dispatch</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">to:</span><span class="hl-2"> [</span><span class="hl-3">'+49176123456789'</span><span class="hl-2">, </span><span class="hl-3">'+49176987654321'</span><span class="hl-2">],</span><br/><span class="hl-2"> </span><span class="hl-10">text:</span><span class="hl-2"> </span><span class="hl-3">'Bulk message'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">from:</span><span class="hl-2"> </span><span class="hl-3">'YourApp'</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-0">// Schedule SMS for later</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">scheduled</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">sms</span><span class="hl-2">.</span><span class="hl-1">dispatch</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">to:</span><span class="hl-2"> </span><span class="hl-3">'+49176123456789'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">text:</span><span class="hl-2"> </span><span class="hl-3">'Scheduled message'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">from:</span><span class="hl-2"> </span><span class="hl-3">'YourApp'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">delay:</span><span class="hl-2"> </span><span class="hl-3">'2024-12-25 10:00:00'</span><span class="hl-2"> </span><span class="hl-0">// Christmas morning</span><br/><span class="hl-2">})</span>
</code><button type="button">Copy</button></pre>
<h3 id="phone-number-lookup" class="tsd-anchor-link">Phone Number Lookup<a href="#phone-number-lookup" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="javascript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">Client</span><span class="hl-2">, </span><span class="hl-10">LookupResource</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({ </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_API_KEY'</span><span class="hl-2"> })</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">lookup</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">LookupResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span><br/><br/><span class="hl-0">// HLR Lookup (Home Location Register)</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">hlr</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">lookup</span><span class="hl-2">.</span><span class="hl-1">hlr</span><span class="hl-2">({ </span><span class="hl-10">number:</span><span class="hl-2"> </span><span class="hl-3">'+49176123456789'</span><span class="hl-2"> })</span><br/><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Network:'</span><span class="hl-2">, </span><span class="hl-10">hlr</span><span class="hl-2">.</span><span class="hl-10">network_name</span><span class="hl-2">)</span><br/><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Status:'</span><span class="hl-2">, </span><span class="hl-10">hlr</span><span class="hl-2">.</span><span class="hl-10">status</span><span class="hl-2">)</span><br/><br/><span class="hl-0">// MNP Lookup (Mobile Number Portability)</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">mnp</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">lookup</span><span class="hl-2">.</span><span class="hl-1">mnp</span><span class="hl-2">({ </span><span class="hl-10">number:</span><span class="hl-2"> </span><span class="hl-3">'+49176123456789'</span><span class="hl-2"> })</span><br/><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Original network:'</span><span class="hl-2">, </span><span class="hl-10">mnp</span><span class="hl-2">.</span><span class="hl-10">network</span><span class="hl-2">)</span><br/><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Ported to:'</span><span class="hl-2">, </span><span class="hl-10">mnp</span><span class="hl-2">.</span><span class="hl-10">mnp_network</span><span class="hl-2">)</span><br/><br/><span class="hl-0">// CNAM Lookup (Caller Name)</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">cnam</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">lookup</span><span class="hl-2">.</span><span class="hl-1">cnam</span><span class="hl-2">({ </span><span class="hl-10">number:</span><span class="hl-2"> </span><span class="hl-3">'+1234567890'</span><span class="hl-2"> })</span><br/><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Caller name:'</span><span class="hl-2">, </span><span class="hl-10">cnam</span><span class="hl-2">.</span><span class="hl-10">name</span><span class="hl-2">)</span>
</code><button type="button">Copy</button></pre>
<h3 id="contact-management" class="tsd-anchor-link">Contact Management<a href="#contact-management" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="javascript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">Client</span><span class="hl-2">, </span><span class="hl-10">ContactsResource</span><span class="hl-2">, </span><span class="hl-10">GroupsResource</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({ </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_API_KEY'</span><span class="hl-2"> })</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">contacts</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">ContactsResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">groups</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">GroupsResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span><br/><br/><span class="hl-0">// Create a contact</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">contact</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">contacts</span><span class="hl-2">.</span><span class="hl-1">create</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">name:</span><span class="hl-2"> </span><span class="hl-3">'John Doe'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">number:</span><span class="hl-2"> </span><span class="hl-3">'+49176123456789'</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-0">// Create a group</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">group</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">groups</span><span class="hl-2">.</span><span class="hl-1">create</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">name:</span><span class="hl-2"> </span><span class="hl-3">'VIP Customers'</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-0">// Add contact to group</span><br/><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">contacts</span><span class="hl-2">.</span><span class="hl-1">update</span><span class="hl-2">(</span><span class="hl-10">contact</span><span class="hl-2">.</span><span class="hl-10">id</span><span class="hl-2">, {</span><br/><span class="hl-2"> </span><span class="hl-10">group_id:</span><span class="hl-2"> </span><span class="hl-10">group</span><span class="hl-2">.</span><span class="hl-10">id</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-0">// Send SMS to entire group</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">sms</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">SmsResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">result</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">sms</span><span class="hl-2">.</span><span class="hl-1">dispatch</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">to:</span><span class="hl-2"> </span><span class="hl-10">group</span><span class="hl-2">.</span><span class="hl-10">id</span><span class="hl-2">, </span><span class="hl-0">// Use group ID instead of phone number</span><br/><span class="hl-2"> </span><span class="hl-10">text:</span><span class="hl-2"> </span><span class="hl-3">'Special offer for VIP customers!'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">from:</span><span class="hl-2"> </span><span class="hl-3">'YourBrand'</span><br/><span class="hl-2">})</span>
</code><button type="button">Copy</button></pre>
<h3 id="voice-calls-text-to-speech" class="tsd-anchor-link">Voice Calls (Text-to-Speech)<a href="#voice-calls-text-to-speech" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="javascript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">Client</span><span class="hl-2">, </span><span class="hl-10">VoiceResource</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({ </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_API_KEY'</span><span class="hl-2"> })</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">voice</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">VoiceResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span><br/><br/><span class="hl-0">// Make a TTS call</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">call</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">voice</span><span class="hl-2">.</span><span class="hl-1">dispatch</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">to:</span><span class="hl-2"> </span><span class="hl-3">'+49176123456789'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">text:</span><span class="hl-2"> </span><span class="hl-3">'Hello, this is an automated message from Your Company.'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">from:</span><span class="hl-2"> </span><span class="hl-3">'+49123456789'</span><span class="hl-2">, </span><span class="hl-0">// Your seven.io number</span><br/><span class="hl-2"> </span><span class="hl-10">voice:</span><span class="hl-2"> </span><span class="hl-3">'female'</span><span class="hl-2"> </span><span class="hl-0">// or 'male'</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Call initiated:'</span><span class="hl-2">, </span><span class="hl-10">call</span><span class="hl-2">.</span><span class="hl-10">id</span><span class="hl-2">)</span>
</code><button type="button">Copy</button></pre>
<h3 id="webhook-management" class="tsd-anchor-link">Webhook Management<a href="#webhook-management" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="javascript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">Client</span><span class="hl-2">, </span><span class="hl-10">HooksResource</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({ </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_API_KEY'</span><span class="hl-2"> })</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">hooks</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">HooksResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span><br/><br/><span class="hl-0">// Create webhook for SMS delivery reports</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">webhook</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">hooks</span><span class="hl-2">.</span><span class="hl-1">create</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">target_url:</span><span class="hl-2"> </span><span class="hl-3">'https://yourapp.com/webhooks/sms'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">event_type:</span><span class="hl-2"> </span><span class="hl-3">'sms_mo'</span><span class="hl-2">, </span><span class="hl-0">// Mobile originated SMS</span><br/><span class="hl-2"> </span><span class="hl-10">request_method:</span><span class="hl-2"> </span><span class="hl-3">'POST'</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-0">// List all webhooks</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">allWebhooks</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">hooks</span><span class="hl-2">.</span><span class="hl-1">read</span><span class="hl-2">()</span><br/><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Active webhooks:'</span><span class="hl-2">, </span><span class="hl-10">allWebhooks</span><span class="hl-2">)</span>
</code><button type="button">Copy</button></pre>
<h3 id="webhook-verification" class="tsd-anchor-link">Webhook Verification<a href="#webhook-verification" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>Verify the authenticity of incoming webhooks from <a href="http://seven.io">seven.io</a>:</p>
<pre><code class="javascript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">WebhookVerifier</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">verifier</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">WebhookVerifier</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">signingSecret:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_SIGNING_SECRET'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">maxAgeSeconds:</span><span class="hl-2"> </span><span class="hl-13">300</span><span class="hl-2"> </span><span class="hl-0">// Optional: reject webhooks older than 5 minutes</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-0">// Express.js example</span><br/><span class="hl-10">app</span><span class="hl-2">.</span><span class="hl-1">post</span><span class="hl-2">(</span><span class="hl-3">'/webhook'</span><span class="hl-2">, </span><span class="hl-10">express</span><span class="hl-2">.</span><span class="hl-1">raw</span><span class="hl-2">({ </span><span class="hl-10">type:</span><span class="hl-2"> </span><span class="hl-3">'application/json'</span><span class="hl-2"> }), </span><span class="hl-11">async</span><span class="hl-2"> (</span><span class="hl-10">req</span><span class="hl-2">, </span><span class="hl-10">res</span><span class="hl-2">) </span><span class="hl-11">=></span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">result</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">verifier</span><span class="hl-2">.</span><span class="hl-1">verify</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">headers:</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">headers</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">body:</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">body</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">url:</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">originalUrl</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">method:</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">method</span><br/><span class="hl-2"> })</span><br/><br/><span class="hl-2"> </span><span class="hl-9">if</span><span class="hl-2"> (</span><span class="hl-10">result</span><span class="hl-2">.</span><span class="hl-10">valid</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Webhook verified successfully'</span><span class="hl-2">)</span><br/><span class="hl-2"> </span><span class="hl-0">// Process the webhook payload</span><br/><span class="hl-2"> </span><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">payload</span><span class="hl-2"> = </span><span class="hl-12">JSON</span><span class="hl-2">.</span><span class="hl-1">parse</span><span class="hl-2">(</span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">body</span><span class="hl-2">.</span><span class="hl-1">toString</span><span class="hl-2">())</span><br/><span class="hl-2"> </span><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Webhook event:'</span><span class="hl-2">, </span><span class="hl-10">payload</span><span class="hl-2">.</span><span class="hl-10">webhook_event</span><span class="hl-2">)</span><br/><span class="hl-2"> </span><span class="hl-10">res</span><span class="hl-2">.</span><span class="hl-1">status</span><span class="hl-2">(</span><span class="hl-13">200</span><span class="hl-2">).</span><span class="hl-1">send</span><span class="hl-2">(</span><span class="hl-3">'OK'</span><span class="hl-2">)</span><br/><span class="hl-2"> } </span><span class="hl-9">else</span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">error</span><span class="hl-2">(</span><span class="hl-3">'Webhook verification failed:'</span><span class="hl-2">, </span><span class="hl-10">result</span><span class="hl-2">.</span><span class="hl-10">error</span><span class="hl-2">)</span><br/><span class="hl-2"> </span><span class="hl-10">res</span><span class="hl-2">.</span><span class="hl-1">status</span><span class="hl-2">(</span><span class="hl-13">401</span><span class="hl-2">).</span><span class="hl-1">send</span><span class="hl-2">(</span><span class="hl-3">'Unauthorized'</span><span class="hl-2">)</span><br/><span class="hl-2"> }</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-0">// Next.js API route example</span><br/><span class="hl-9">export</span><span class="hl-2"> </span><span class="hl-9">default</span><span class="hl-2"> </span><span class="hl-11">async</span><span class="hl-2"> </span><span class="hl-11">function</span><span class="hl-2"> </span><span class="hl-1">handler</span><span class="hl-2">(</span><span class="hl-10">req</span><span class="hl-2">, </span><span class="hl-10">res</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-9">if</span><span class="hl-2"> (</span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">method</span><span class="hl-2"> !== </span><span class="hl-3">'POST'</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-9">return</span><span class="hl-2"> </span><span class="hl-10">res</span><span class="hl-2">.</span><span class="hl-1">status</span><span class="hl-2">(</span><span class="hl-13">405</span><span class="hl-2">).</span><span class="hl-1">json</span><span class="hl-2">({ </span><span class="hl-10">error:</span><span class="hl-2"> </span><span class="hl-3">'Method not allowed'</span><span class="hl-2"> })</span><br/><span class="hl-2"> }</span><br/><br/><span class="hl-2"> </span><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">result</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">verifier</span><span class="hl-2">.</span><span class="hl-1">verify</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">headers:</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">headers</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">body:</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">body</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">url:</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">url</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">method:</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">method</span><br/><span class="hl-2"> })</span><br/><br/><span class="hl-2"> </span><span class="hl-9">if</span><span class="hl-2"> (</span><span class="hl-10">result</span><span class="hl-2">.</span><span class="hl-10">valid</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-0">// Process webhook</span><br/><span class="hl-2"> </span><span class="hl-10">res</span><span class="hl-2">.</span><span class="hl-1">status</span><span class="hl-2">(</span><span class="hl-13">200</span><span class="hl-2">).</span><span class="hl-1">json</span><span class="hl-2">({ </span><span class="hl-10">success:</span><span class="hl-2"> </span><span class="hl-11">true</span><span class="hl-2"> })</span><br/><span class="hl-2"> } </span><span class="hl-9">else</span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-10">res</span><span class="hl-2">.</span><span class="hl-1">status</span><span class="hl-2">(</span><span class="hl-13">401</span><span class="hl-2">).</span><span class="hl-1">json</span><span class="hl-2">({ </span><span class="hl-10">error:</span><span class="hl-2"> </span><span class="hl-10">result</span><span class="hl-2">.</span><span class="hl-10">error</span><span class="hl-2"> })</span><br/><span class="hl-2"> }</span><br/><span class="hl-2">}</span><br/><br/><span class="hl-0">// Fastify example</span><br/><span class="hl-10">fastify</span><span class="hl-2">.</span><span class="hl-1">post</span><span class="hl-2">(</span><span class="hl-3">'/webhook'</span><span class="hl-2">, {</span><br/><span class="hl-2"> </span><span class="hl-10">config:</span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-10">rawBody:</span><span class="hl-2"> </span><span class="hl-11">true</span><br/><span class="hl-2"> }</span><br/><span class="hl-2">}, </span><span class="hl-11">async</span><span class="hl-2"> (</span><span class="hl-10">request</span><span class="hl-2">, </span><span class="hl-10">reply</span><span class="hl-2">) </span><span class="hl-11">=></span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">result</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">verifier</span><span class="hl-2">.</span><span class="hl-1">verify</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">headers:</span><span class="hl-2"> </span><span class="hl-10">request</span><span class="hl-2">.</span><span class="hl-10">headers</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">body:</span><span class="hl-2"> </span><span class="hl-10">request</span><span class="hl-2">.</span><span class="hl-10">body</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">url:</span><span class="hl-2"> </span><span class="hl-10">request</span><span class="hl-2">.</span><span class="hl-10">url</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">method:</span><span class="hl-2"> </span><span class="hl-10">request</span><span class="hl-2">.</span><span class="hl-10">method</span><br/><span class="hl-2"> })</span><br/><br/><span class="hl-2"> </span><span class="hl-9">if</span><span class="hl-2"> (</span><span class="hl-10">result</span><span class="hl-2">.</span><span class="hl-10">valid</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-0">// Process webhook</span><br/><span class="hl-2"> </span><span class="hl-10">reply</span><span class="hl-2">.</span><span class="hl-1">code</span><span class="hl-2">(</span><span class="hl-13">200</span><span class="hl-2">).</span><span class="hl-1">send</span><span class="hl-2">(</span><span class="hl-3">'OK'</span><span class="hl-2">)</span><br/><span class="hl-2"> } </span><span class="hl-9">else</span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-10">reply</span><span class="hl-2">.</span><span class="hl-1">code</span><span class="hl-2">(</span><span class="hl-13">401</span><span class="hl-2">).</span><span class="hl-1">send</span><span class="hl-2">({ </span><span class="hl-10">error:</span><span class="hl-2"> </span><span class="hl-10">result</span><span class="hl-2">.</span><span class="hl-10">error</span><span class="hl-2"> })</span><br/><span class="hl-2"> }</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-0">// AWS Lambda example</span><br/><span class="hl-9">export</span><span class="hl-2"> </span><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-1">handler</span><span class="hl-2"> = </span><span class="hl-11">async</span><span class="hl-2"> (</span><span class="hl-10">event</span><span class="hl-2">) </span><span class="hl-11">=></span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">result</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">verifier</span><span class="hl-2">.</span><span class="hl-1">verify</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">headers:</span><span class="hl-2"> </span><span class="hl-10">event</span><span class="hl-2">.</span><span class="hl-10">headers</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">body:</span><span class="hl-2"> </span><span class="hl-10">event</span><span class="hl-2">.</span><span class="hl-10">body</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">url:</span><span class="hl-2"> </span><span class="hl-10">event</span><span class="hl-2">.</span><span class="hl-10">path</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">method:</span><span class="hl-2"> </span><span class="hl-10">event</span><span class="hl-2">.</span><span class="hl-10">httpMethod</span><br/><span class="hl-2"> })</span><br/><br/><span class="hl-2"> </span><span class="hl-9">if</span><span class="hl-2"> (</span><span class="hl-10">result</span><span class="hl-2">.</span><span class="hl-10">valid</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-0">// Process webhook</span><br/><span class="hl-2"> </span><span class="hl-9">return</span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-10">statusCode:</span><span class="hl-2"> </span><span class="hl-13">200</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">body:</span><span class="hl-2"> </span><span class="hl-12">JSON</span><span class="hl-2">.</span><span class="hl-1">stringify</span><span class="hl-2">({ </span><span class="hl-10">success:</span><span class="hl-2"> </span><span class="hl-11">true</span><span class="hl-2"> })</span><br/><span class="hl-2"> }</span><br/><span class="hl-2"> } </span><span class="hl-9">else</span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-9">return</span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-10">statusCode:</span><span class="hl-2"> </span><span class="hl-13">401</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">body:</span><span class="hl-2"> </span><span class="hl-12">JSON</span><span class="hl-2">.</span><span class="hl-1">stringify</span><span class="hl-2">({ </span><span class="hl-10">error:</span><span class="hl-2"> </span><span class="hl-10">result</span><span class="hl-2">.</span><span class="hl-10">error</span><span class="hl-2"> })</span><br/><span class="hl-2"> }</span><br/><span class="hl-2"> }</span><br/><span class="hl-2">}</span>
</code><button type="button">Copy</button></pre>
<h3 id="webhook-security-best-practices" class="tsd-anchor-link">Webhook Security Best Practices<a href="#webhook-security-best-practices" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ol>
<li><strong>Always verify signatures</strong>: Never trust webhook data without verification</li>
<li><strong>Check timestamp</strong>: Prevent replay attacks by validating webhook age</li>
<li><strong>Use HTTPS</strong>: Ensure webhooks are delivered over secure connections</li>
<li><strong>Store secrets securely</strong>: Keep signing secrets in environment variables</li>
<li><strong>Handle failures gracefully</strong>: Return appropriate HTTP status codes</li>
</ol>
<pre><code class="javascript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">WebhookVerifier</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">verifier</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">WebhookVerifier</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">signingSecret:</span><span class="hl-2"> </span><span class="hl-10">process</span><span class="hl-2">.</span><span class="hl-10">env</span><span class="hl-2">.</span><span class="hl-12">SEVEN_SIGNING_SECRET</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">maxAgeSeconds:</span><span class="hl-2"> </span><span class="hl-13">300</span><span class="hl-2"> </span><span class="hl-0">// 5 minutes</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-0">// Comprehensive webhook handler</span><br/><span class="hl-11">async</span><span class="hl-2"> </span><span class="hl-11">function</span><span class="hl-2"> </span><span class="hl-1">handleWebhook</span><span class="hl-2">(</span><span class="hl-10">req</span><span class="hl-2">, </span><span class="hl-10">res</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-9">try</span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">result</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">verifier</span><span class="hl-2">.</span><span class="hl-1">verify</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">headers:</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">headers</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">body:</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">body</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">url:</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">originalUrl</span><span class="hl-2"> || </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">url</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">method:</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">method</span><br/><span class="hl-2"> })</span><br/><br/><span class="hl-2"> </span><span class="hl-9">if</span><span class="hl-2"> (!</span><span class="hl-10">result</span><span class="hl-2">.</span><span class="hl-10">valid</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">warn</span><span class="hl-2">(</span><span class="hl-3">'Invalid webhook received:'</span><span class="hl-2">, {</span><br/><span class="hl-2"> </span><span class="hl-10">error:</span><span class="hl-2"> </span><span class="hl-10">result</span><span class="hl-2">.</span><span class="hl-10">error</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">ip:</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">ip</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">userAgent:</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-1">get</span><span class="hl-2">(</span><span class="hl-3">'User-Agent'</span><span class="hl-2">)</span><br/><span class="hl-2"> })</span><br/><span class="hl-2"> </span><span class="hl-9">return</span><span class="hl-2"> </span><span class="hl-10">res</span><span class="hl-2">.</span><span class="hl-1">status</span><span class="hl-2">(</span><span class="hl-13">401</span><span class="hl-2">).</span><span class="hl-1">json</span><span class="hl-2">({ </span><span class="hl-10">error:</span><span class="hl-2"> </span><span class="hl-3">'Webhook verification failed'</span><span class="hl-2"> })</span><br/><span class="hl-2"> }</span><br/><br/><span class="hl-2"> </span><span class="hl-0">// Parse webhook payload</span><br/><span class="hl-2"> </span><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">payload</span><span class="hl-2"> = </span><span class="hl-11">typeof</span><span class="hl-2"> </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">body</span><span class="hl-2"> === </span><span class="hl-3">'string'</span><br/><span class="hl-2"> ? </span><span class="hl-12">JSON</span><span class="hl-2">.</span><span class="hl-1">parse</span><span class="hl-2">(</span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">body</span><span class="hl-2">)</span><br/><span class="hl-2"> : </span><span class="hl-10">req</span><span class="hl-2">.</span><span class="hl-10">body</span><br/><br/><span class="hl-2"> </span><span class="hl-0">// Process different webhook types</span><br/><span class="hl-2"> </span><span class="hl-9">switch</span><span class="hl-2"> (</span><span class="hl-10">payload</span><span class="hl-2">.</span><span class="hl-10">webhook_event</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-9">case</span><span class="hl-2"> </span><span class="hl-3">'sms_mo'</span><span class="hl-2">:</span><br/><span class="hl-2"> </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-1">handleInboundSms</span><span class="hl-2">(</span><span class="hl-10">payload</span><span class="hl-2">.</span><span class="hl-10">data</span><span class="hl-2">)</span><br/><span class="hl-2"> </span><span class="hl-9">break</span><br/><span class="hl-2"> </span><span class="hl-9">case</span><span class="hl-2"> </span><span class="hl-3">'dlr'</span><span class="hl-2">:</span><br/><span class="hl-2"> </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-1">handleDeliveryReport</span><span class="hl-2">(</span><span class="hl-10">payload</span><span class="hl-2">.</span><span class="hl-10">data</span><span class="hl-2">)</span><br/><span class="hl-2"> </span><span class="hl-9">break</span><br/><span class="hl-2"> </span><span class="hl-9">case</span><span class="hl-2"> </span><span class="hl-3">'voice_status'</span><span class="hl-2">:</span><br/><span class="hl-2"> </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-1">handleVoiceStatus</span><span class="hl-2">(</span><span class="hl-10">payload</span><span class="hl-2">.</span><span class="hl-10">data</span><span class="hl-2">)</span><br/><span class="hl-2"> </span><span class="hl-9">break</span><br/><span class="hl-2"> </span><span class="hl-9">default</span><span class="hl-2">:</span><br/><span class="hl-2"> </span><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Unknown webhook event:'</span><span class="hl-2">, </span><span class="hl-10">payload</span><span class="hl-2">.</span><span class="hl-10">webhook_event</span><span class="hl-2">)</span><br/><span class="hl-2"> }</span><br/><br/><span class="hl-2"> </span><span class="hl-10">res</span><span class="hl-2">.</span><span class="hl-1">status</span><span class="hl-2">(</span><span class="hl-13">200</span><span class="hl-2">).</span><span class="hl-1">json</span><span class="hl-2">({ </span><span class="hl-10">success:</span><span class="hl-2"> </span><span class="hl-11">true</span><span class="hl-2"> })</span><br/><span class="hl-2"> } </span><span class="hl-9">catch</span><span class="hl-2"> (</span><span class="hl-10">error</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">error</span><span class="hl-2">(</span><span class="hl-3">'Webhook processing error:'</span><span class="hl-2">, </span><span class="hl-10">error</span><span class="hl-2">)</span><br/><span class="hl-2"> </span><span class="hl-10">res</span><span class="hl-2">.</span><span class="hl-1">status</span><span class="hl-2">(</span><span class="hl-13">500</span><span class="hl-2">).</span><span class="hl-1">json</span><span class="hl-2">({ </span><span class="hl-10">error:</span><span class="hl-2"> </span><span class="hl-3">'Internal server error'</span><span class="hl-2"> })</span><br/><span class="hl-2"> }</span><br/><span class="hl-2">}</span>
</code><button type="button">Copy</button></pre>
<h3 id="request-signing-example" class="tsd-anchor-link">Request Signing Example<a href="#request-signing-example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="javascript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">Client</span><span class="hl-2">, </span><span class="hl-10">SmsResource</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-0">// Enable request signing for enhanced security</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_API_KEY'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">signingSecret:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_SIGNING_SECRET'</span><br/><span class="hl-2">})</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">sms</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">SmsResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span><br/><br/><span class="hl-0">// All requests will now include signature headers:</span><br/><span class="hl-0">// X-Timestamp, X-Nonce, X-Signature</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">result</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">sms</span><span class="hl-2">.</span><span class="hl-1">dispatch</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">to:</span><span class="hl-2"> </span><span class="hl-3">'+49176123456789'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">text:</span><span class="hl-2"> </span><span class="hl-3">'Signed request'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">from:</span><span class="hl-2"> </span><span class="hl-3">'SecureApp'</span><br/><span class="hl-2">})</span>
</code><button type="button">Copy</button></pre>
<h2 id="typescript-support" class="tsd-anchor-link">TypeScript Support<a href="#typescript-support" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>The client is written in TypeScript and provides full type definitions for all methods and responses:</p>
<pre><code class="typescript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">Client</span><span class="hl-2">, </span><span class="hl-10">SmsResource</span><span class="hl-2">, </span><span class="hl-10">SmsResponse</span><span class="hl-2">, </span><span class="hl-10">SmsParams</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({ </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_API_KEY'</span><span class="hl-2"> })</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">sms</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">SmsResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span><br/><br/><span class="hl-0">// Full IntelliSense support</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">params</span><span class="hl-2">: </span><span class="hl-14">SmsParams</span><span class="hl-2"> = {</span><br/><span class="hl-2"> </span><span class="hl-10">to:</span><span class="hl-2"> </span><span class="hl-3">'+49176123456789'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">text:</span><span class="hl-2"> </span><span class="hl-3">'TypeScript message'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">from:</span><span class="hl-2"> </span><span class="hl-3">'TypedApp'</span><br/><span class="hl-2">}</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">result</span><span class="hl-2">: </span><span class="hl-14">SmsResponse</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">sms</span><span class="hl-2">.</span><span class="hl-1">dispatch</span><span class="hl-2">(</span><span class="hl-10">params</span><span class="hl-2">)</span><br/><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Message ID:'</span><span class="hl-2">, </span><span class="hl-10">result</span><span class="hl-2">.</span><span class="hl-10">success</span><span class="hl-2">) </span><span class="hl-0">// Type-safe access</span>
</code><button type="button">Copy</button></pre>
<h3 id="type-imports" class="tsd-anchor-link">Type Imports<a href="#type-imports" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="typescript"><span class="hl-9">import</span><span class="hl-2"> </span><span class="hl-9">type</span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-10">SmsParams</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">SmsResponse</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">LookupHlrParams</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">LookupHlrResponse</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">BalanceResponse</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">ContactParams</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-0">// ... all other types</span><br/><span class="hl-2">} </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span>
</code><button type="button">Copy</button></pre>
<h2 id="error-handling" class="tsd-anchor-link">Error Handling<a href="#error-handling" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>The <a href="http://seven.io">seven.io</a> API returns status codes in the response body (not as HTTP status codes). All API calls return successfully with HTTP 200, but the response contains a status code indicating the actual result:</p>
<pre><code class="javascript"><span class="hl-9">import</span><span class="hl-2"> { </span><span class="hl-10">Client</span><span class="hl-2">, </span><span class="hl-10">SmsResource</span><span class="hl-2"> } </span><span class="hl-9">from</span><span class="hl-2"> </span><span class="hl-3">'@seven.io/client'</span><br/><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({ </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-3">'YOUR_API_KEY'</span><span class="hl-2"> })</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">sms</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">SmsResource</span><span class="hl-2">(</span><span class="hl-10">client</span><span class="hl-2">)</span><br/><br/><span class="hl-9">try</span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">result</span><span class="hl-2"> = </span><span class="hl-9">await</span><span class="hl-2"> </span><span class="hl-10">sms</span><span class="hl-2">.</span><span class="hl-1">dispatch</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">to:</span><span class="hl-2"> </span><span class="hl-3">'+49176123456789'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">text:</span><span class="hl-2"> </span><span class="hl-3">'Hello World!'</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">from:</span><span class="hl-2"> </span><span class="hl-3">'YourApp'</span><br/><span class="hl-2"> })</span><br/><br/><span class="hl-2"> </span><span class="hl-0">// Check the response status code</span><br/><span class="hl-2"> </span><span class="hl-9">if</span><span class="hl-2"> (</span><span class="hl-10">result</span><span class="hl-2">.</span><span class="hl-10">success</span><span class="hl-2"> === </span><span class="hl-3">'100'</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'SMS sent successfully'</span><span class="hl-2">)</span><br/><span class="hl-2"> } </span><span class="hl-9">else</span><span class="hl-2"> </span><span class="hl-9">if</span><span class="hl-2"> (</span><span class="hl-10">result</span><span class="hl-2">.</span><span class="hl-10">success</span><span class="hl-2"> === </span><span class="hl-3">'101'</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Partial failure - some messages not sent'</span><span class="hl-2">)</span><br/><span class="hl-2"> } </span><span class="hl-9">else</span><span class="hl-2"> {</span><br/><span class="hl-2"> </span><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">log</span><span class="hl-2">(</span><span class="hl-3">'Failed with code:'</span><span class="hl-2">, </span><span class="hl-10">result</span><span class="hl-2">.</span><span class="hl-10">success</span><span class="hl-2">)</span><br/><span class="hl-2"> }</span><br/><span class="hl-2">} </span><span class="hl-9">catch</span><span class="hl-2"> (</span><span class="hl-10">error</span><span class="hl-2">) {</span><br/><span class="hl-2"> </span><span class="hl-0">// Network or other errors</span><br/><span class="hl-2"> </span><span class="hl-10">console</span><span class="hl-2">.</span><span class="hl-1">error</span><span class="hl-2">(</span><span class="hl-3">'Request failed:'</span><span class="hl-2">, </span><span class="hl-10">error</span><span class="hl-2">)</span><br/><span class="hl-2">}</span>
</code><button type="button">Copy</button></pre>
<h3 id="response-status-codes" class="tsd-anchor-link">Response Status Codes<a href="#response-status-codes" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>These codes are returned in the response body, not as HTTP status codes:</p>
<ul>
<li><code>100</code> - Success: SMS has been accepted and is being sent</li>
<li><code>101</code> - Partial failure: Sending to at least one recipient failed</li>
<li><code>201</code> - Invalid sender (max 11 alphanumeric or 16 numeric characters)</li>
<li><code>202</code> - Invalid recipient number</li>
<li><code>301</code> - Missing parameter: 'to' not set</li>
<li><code>305</code> - Invalid parameter: 'text' is invalid</li>
<li><code>401</code> - Text too long: Message exceeds character limit</li>
<li><code>402</code> - Reload lock: SMS already sent within last 180 seconds</li>
<li><code>403</code> - Daily limit reached for this recipient</li>
<li><code>500</code> - Insufficient credits to send message</li>
<li><code>600</code> - Carrier delivery failed</li>
<li><code>900</code> - Authentication failed (invalid API key)</li>
<li><code>901</code> - Signature verification failed (when using request signing)</li>
<li><code>902</code> - API key lacks access rights to this endpoint</li>
<li><code>903</code> - Request from disallowed IP address</li>
</ul>
<h2 id="environment-variables" class="tsd-anchor-link">Environment Variables<a href="#environment-variables" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>For testing and development, you can explicitly load values from environment variables:</p>
<pre><code class="javascript"><span class="hl-0">// Manually load from environment (not automatic)</span><br/><span class="hl-11">const</span><span class="hl-2"> </span><span class="hl-12">client</span><span class="hl-2"> = </span><span class="hl-11">new</span><span class="hl-2"> </span><span class="hl-1">Client</span><span class="hl-2">({</span><br/><span class="hl-2"> </span><span class="hl-10">apiKey:</span><span class="hl-2"> </span><span class="hl-10">process</span><span class="hl-2">.</span><span class="hl-10">env</span><span class="hl-2">.</span><span class="hl-12">SEVEN_API_KEY</span><span class="hl-2">,</span><br/><span class="hl-2"> </span><span class="hl-10">signingSecret:</span><span class="hl-2"> </span><span class="hl-10">process</span><span class="hl-2">.</span><span class="hl-10">env</span><span class="hl-2">.</span><span class="hl-12">SEVEN_SIGNING_SECRET</span><span class="hl-2">, </span><span class="hl-0">// optional</span><br/><span class="hl-2"> </span><span class="hl-10">debug:</span><span class="hl-2"> </span><span class="hl-10">process</span><span class="hl-2">.</span><span class="hl-10">env</span><span class="hl-2">.</span><span class="hl-12">SEVEN_DEBUG</span><span class="hl-2"> === </span><span class="hl-3">'1'</span><br/><span class="hl-2">})</span>
</code><button type="button">Copy</button></pre>
<h3 id="required-environment-variables-for-tests" class="tsd-anchor-link">Required Environment Variables for Tests<a href="#required-environment-variables-for-tests" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="bash"><span class="hl-11">export</span><span class="hl-2"> </span><span class="hl-10">SEVEN_API_KEY</span><span class="hl-2">=</span><span class="hl-3">"your_api_key_here"</span><br/><span class="hl-11">export</span><span class="hl-2"> </span><span class="hl-10">SEVEN_SIGNING_SECRET</span><span class="hl-2">=</span><span class="hl-3">"your_signing_secret_here"</span><span class="hl-2"> </span><span class="hl-0"># optional</span><br/><span class="hl-11">export</span><span class="hl-2"> </span><span class="hl-10">SEVEN_DEBUG</span><span class="hl-2">=</span><span class="hl-3">"1"</span><span class="hl-2"> </span><span class="hl-0"># optional, enables debug output</span>
</code><button type="button">Copy</button></pre>
<h2 id="api-reference" class="tsd-anchor-link">API Reference<a href="#api-reference" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><ul>
<li><a href="https://docs.seven.io/">seven.io API Documentation</a></li>
<li><a href="media/index.html">TypeDoc Generated Documentation</a></li>
</ul>
<h2 id="development--contributing" class="tsd-anchor-link">Development & Contributing<a href="#development--contributing" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><h3 id="running-tests" class="tsd-anchor-link">Running Tests<a href="#running-tests" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><ol>
<li>
<p>Clone the repository:</p>
<pre><code class="bash"><span class="hl-1">git</span><span class="hl-2"> </span><span class="hl-3">clone</span><span class="hl-2"> </span><span class="hl-3">https://github.com/seven-io/js-client.git</span><br/><span class="hl-1">cd</span><span class="hl-2"> </span><span class="hl-3">js-client</span>
</code><button type="button">Copy</button></pre>
</li>
<li>
<p>Install dependencies:</p>
<pre><code class="bash"><span class="hl-1">npm</span><span class="hl-2"> </span><span class="hl-3">install</span>
</code><button type="button">Copy</button></pre>
</li>
<li>
<p>Set up environment variables:</p>
<pre><code class="bash"><span class="hl-11">export</span><span class="hl-2"> </span><span class="hl-10">SEVEN_API_KEY</span><span class="hl-2">=</span><span class="hl-3">"your_test_api_key"</span><br/><span class="hl-11">export</span><span class="hl-2"> </span><span class="hl-10">SEVEN_SIGNING_SECRET</span><span class="hl-2">=</span><span class="hl-3">"your_signing_secret"</span><span class="hl-2"> </span><span class="hl-0"># optional</span>
</code><button type="button">Copy</button></pre>
</li>
<li>
<p>Run tests:</p>
<pre><code class="bash"><span class="hl-1">npm</span><span class="hl-2"> </span><span class="hl-3">test</span>
</code><button type="button">Copy</button></pre>
<p>Set <code>SEVEN_DEBUG=1</code> for detailed output during testing.</p>
</li>
</ol>
<h3 id="building-the-project" class="tsd-anchor-link">Building the Project<a href="#building-the-project" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><pre><code class="bash"><span class="hl-0"># Development build with watch mode</span><br/><span class="hl-1">npm</span><span class="hl-2"> </span><span class="hl-3">run</span><span class="hl-2"> </span><span class="hl-3">dev</span><br/><br/><span class="hl-0"># Production build</span><br/><span class="hl-1">npm</span><span class="hl-2"> </span><span class="hl-3">run</span><span class="hl-2"> </span><span class="hl-3">build</span><br/><br/><span class="hl-0"># Generate documentation</span><br/><span class="hl-1">npm</span><span class="hl-2"> </span><span class="hl-3">run</span><span class="hl-2"> </span><span class="hl-3">document</span>
</code><button type="button">Copy</button></pre>
<h3 id="contributing" class="tsd-anchor-link">Contributing<a href="#contributing" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h3><p>We welcome contributions! Please:</p>
<ol>
<li>Fork the repository</li>
<li>Create a feature branch</li>
<li>Add tests for new functionality</li>
<li>Ensure all tests pass</li>
<li>Submit a pull request</li>
</ol>
<h2 id="browser-compatibility" class="tsd-anchor-link">Browser Compatibility<a href="#browser-compatibility" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><ul>
<li><strong>Modern browsers</strong>: Full support (Chrome 65+, Firefox 57+, Safari 12+)</li>
<li><strong>Node.js</strong>: Version 12+ (18+ recommended for native fetch)</li>
<li><strong>Legacy support</strong>: Use polyfills for older environments</li>
</ul>
<h2 id="support" class="tsd-anchor-link">Support<a href="#support" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>Need help? We're here to assist:</p>
<ul>
<li>π <a href="https://docs.seven.io/">API Documentation</a></li>
<li>π¬ <a href="https://www.seven.io/en/company/contact/">Contact Support</a></li>
<li>π <a href="https://github.com/seven-io/js-client/issues">Report Issues</a></li>
<li>π <a href="https://github.com/seven-io/js-client/releases">Changelog</a></li>
</ul>
<h2 id="license" class="tsd-anchor-link">License<a href="#license" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="assets/icons.svg#icon-anchor"></use></svg></a></h2><p>This project is licensed under the MIT License - see the <a href="media/LICENSE">LICENSE</a> file for details.</p>
</div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#official-javascripttypescript-api-client-for-sevenio"><span>Official <wbr/>Java<wbr/>Script/<wbr/>Type<wbr/>Script <wbr/>API <wbr/>Client for seven.io</span></a><ul><li><a href="#features"><span>Features</span></a></li><li><a href="#installation"><span>Installation</span></a></li><li><ul><li><a href="#package-managers"><span>Package <wbr/>Managers</span></a></li><li><a href="#browser-cdn"><span>Browser <wbr/>CDN</span></a></li></ul></li><li><a href="#authentication"><span>Authentication</span></a></li><li><ul><li><a href="#api-key-authentication"><span>API <wbr/>Key <wbr/>Authentication</span></a></li><li><a href="#bearer-token-authentication"><span>Bearer <wbr/>Token <wbr/>Authentication</span></a></li><li><a href="#request-signing-optional"><span>Request <wbr/>Signing (<wbr/>Optional)</span></a></li><li><a href="#debug-mode"><span>Debug <wbr/>Mode</span></a></li></ul></li><li><a href="#quick-start"><span>Quick <wbr/>Start</span></a></li><li><ul><li><a href="#basic-usage"><span>Basic <wbr/>Usage</span></a></li><li><a href="#send-your-first-sms"><span>Send <wbr/>Your <wbr/>First <wbr/>SMS</span></a></li></ul></li><li><a href="#available-resources"><span>Available <wbr/>Resources</span></a></li><li><ul><li><a href="#π±-messaging"><span>π± <wbr/>Messaging</span></a></li><li><a href="#π-lookup--validation"><span>π <wbr/>Lookup & <wbr/>Validation</span></a></li><li><a href="#π₯-contact-management"><span>π₯ <wbr/>Contact <wbr/>Management</span></a></li><li><a href="#π-analytics--monitoring"><span>π <wbr/>Analytics & <wbr/>Monitoring</span></a></li><li><a href="#βοΈ-configuration--management"><span>βοΈ <wbr/>Configuration & <wbr/>Management</span></a></li><li><a href="#basic-usage-example"><span>Basic <wbr/>Usage <wbr/>Example</span></a></li></ul></li><li><a href="#code-examples"><span>Code <wbr/>Examples</span></a></li><li><ul><li><a href="#sms-messaging"><span>SMS <wbr/>Messaging</span></a></li><li><a href="#phone-number-lookup"><span>Phone <wbr/>Number <wbr/>Lookup</span></a></li><li><a href="#contact-management"><span>Contact <wbr/>Management</span></a></li><li><a href="#voice-calls-text-to-speech"><span>Voice <wbr/>Calls (<wbr/>Text-<wbr/>to-<wbr/>Speech)</span></a></li><li><a href="#webhook-management"><span>Webhook <wbr/>Management</span></a></li><li><a href="#webhook-verification"><span>Webhook <wbr/>Verification</span></a></li><li><a href="#webhook-security-best-practices"><span>Webhook <wbr/>Security <wbr/>Best <wbr/>Practices</span></a></li><li><a href="#request-signing-example"><span>Request <wbr/>Signing <wbr/>Example</span></a></li></ul></li><li><a href="#typescript-support"><span>Type<wbr/>Script <wbr/>Support</span></a></li><li><ul><li><a href="#type-imports"><span>Type <wbr/>Imports</span></a></li></ul></li><li><a href="#error-handling"><span>Error <wbr/>Handling</span></a></li><li><ul><li><a href="#response-status-codes"><span>Response <wbr/>Status <wbr/>Codes</span></a></li></ul></li><li><a href="#environment-variables"><span>Environment <wbr/>Variables</span></a></li><li><ul><li><a href="#required-environment-variables-for-tests"><span>Required <wbr/>Environment <wbr/>Variables for <wbr/>Tests</span></a></li></ul></li><li><a href="#api-reference"><span>API <wbr/>Reference</span></a></li><li><a href="#development--contributing"><span>Development & <wbr/>Contributing</span></a></li><li><ul><li><a href="#running-tests"><span>Running <wbr/>Tests</span></a></li><li><a href="#building-the-project"><span>Building the <wbr/>Project</span></a></li><li><a href="#contributing"><span>Contributing</span></a></li></ul></li><li><a href="#browser-compatibility"><span>Browser <wbr/>Compatibility</span></a></li><li><a href="#support"><span>Support</span></a></li><li><a href="#license"><span>License</span></a></li></ul></div></details></div><div class="site-menu"><nav class="tsd-navigation"><a href="modules.html">@seven.io/client</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>