@isnap/sdk 1.1.0-next.56 → 1.1.0-next.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2615,7 +2615,7 @@ export interface paths {
2615
2615
  get: {
2616
2616
  parameters: {
2617
2617
  query?: {
2618
- billing_tier?: "rental_iphone" | "rental_android" | "byod_imessage" | "byod_android" | "shared_pool";
2618
+ billing_tier?: "rental_iphone" | "rental_android" | "byod_imessage" | "byod_android" | "shared_pool" | "shared_imessage";
2619
2619
  status?: string;
2620
2620
  assigned?: boolean | null;
2621
2621
  fulfillment?: "pending" | "fulfilled";
@@ -2657,7 +2657,7 @@ export interface paths {
2657
2657
  query?: {
2658
2658
  page?: number;
2659
2659
  limit?: number;
2660
- billing_tier?: "rental_iphone" | "rental_android" | "byod_imessage" | "byod_android" | "shared_pool";
2660
+ billing_tier?: "rental_iphone" | "rental_android" | "byod_imessage" | "byod_android" | "shared_pool" | "shared_imessage";
2661
2661
  };
2662
2662
  header?: never;
2663
2663
  path?: never;
@@ -2778,14 +2778,16 @@ export interface paths {
2778
2778
  };
2779
2779
  get: {
2780
2780
  parameters: {
2781
- query?: never;
2781
+ query?: {
2782
+ purpose?: "trial" | "shared";
2783
+ };
2782
2784
  header?: never;
2783
2785
  path?: never;
2784
2786
  cookie?: never;
2785
2787
  };
2786
2788
  requestBody?: never;
2787
2789
  responses: {
2788
- /** @description Pool fleet summary + per-line trial/usage metrics */
2790
+ /** @description Pool fleet summary + per-line trial/binding/quota metrics + per-scope virtual/physical overcommit */
2789
2791
  200: {
2790
2792
  headers: {
2791
2793
  [name: string]: unknown;
@@ -2827,6 +2829,82 @@ export interface paths {
2827
2829
  patch?: never;
2828
2830
  trace?: never;
2829
2831
  };
2832
+ "/admin/lines/shared": {
2833
+ parameters: {
2834
+ query?: never;
2835
+ header?: never;
2836
+ path?: never;
2837
+ cookie?: never;
2838
+ };
2839
+ get?: never;
2840
+ put?: never;
2841
+ post: {
2842
+ parameters: {
2843
+ query?: never;
2844
+ header?: never;
2845
+ path?: never;
2846
+ cookie?: never;
2847
+ };
2848
+ requestBody?: {
2849
+ content: {
2850
+ "application/json": components["schemas"]["AdminMintSharedLineBody"];
2851
+ };
2852
+ };
2853
+ responses: {
2854
+ /** @description Virtual shared line minted for the target customer */
2855
+ 201: {
2856
+ headers: {
2857
+ [name: string]: unknown;
2858
+ };
2859
+ content: {
2860
+ "application/json": components["schemas"]["Line"];
2861
+ };
2862
+ };
2863
+ };
2864
+ };
2865
+ delete?: never;
2866
+ options?: never;
2867
+ head?: never;
2868
+ patch?: never;
2869
+ trace?: never;
2870
+ };
2871
+ "/admin/pool-lines/{id}/demote": {
2872
+ parameters: {
2873
+ query?: never;
2874
+ header?: never;
2875
+ path?: never;
2876
+ cookie?: never;
2877
+ };
2878
+ get?: never;
2879
+ put?: never;
2880
+ post: {
2881
+ parameters: {
2882
+ query?: never;
2883
+ header?: never;
2884
+ path: {
2885
+ id: string;
2886
+ };
2887
+ cookie?: never;
2888
+ };
2889
+ requestBody?: never;
2890
+ responses: {
2891
+ /** @description Pool line demoted to a rental line (blocked while live trials or active bindings exist) */
2892
+ 200: {
2893
+ headers: {
2894
+ [name: string]: unknown;
2895
+ };
2896
+ content: {
2897
+ "application/json": components["schemas"]["DemotePoolLine"];
2898
+ };
2899
+ };
2900
+ };
2901
+ };
2902
+ delete?: never;
2903
+ options?: never;
2904
+ head?: never;
2905
+ patch?: never;
2906
+ trace?: never;
2907
+ };
2830
2908
  "/admin/activation-codes/{code}/status": {
2831
2909
  parameters: {
2832
2910
  query?: never;
@@ -4443,7 +4521,7 @@ export interface paths {
4443
4521
  get: {
4444
4522
  parameters: {
4445
4523
  query?: {
4446
- billing_tier?: "rental_iphone" | "rental_android" | "byod_imessage" | "byod_android" | "shared_pool";
4524
+ billing_tier?: "rental_iphone" | "rental_android" | "byod_imessage" | "byod_android" | "shared_pool" | "shared_imessage";
4447
4525
  area_code?: string;
4448
4526
  country_code?: string;
4449
4527
  /** @description US state filter — 2-letter code or full name. */
@@ -4877,6 +4955,118 @@ export interface paths {
4877
4955
  patch?: never;
4878
4956
  trace?: never;
4879
4957
  };
4958
+ "/v1/lines/shared": {
4959
+ parameters: {
4960
+ query?: never;
4961
+ header?: never;
4962
+ path?: never;
4963
+ cookie?: never;
4964
+ };
4965
+ get?: never;
4966
+ put?: never;
4967
+ /**
4968
+ * Mint a virtual shared-outbound line
4969
+ * @description Mint a customer-owned VIRTUAL line on the shared-outbound plan (billing_tier `shared_imessage`): no dedicated hardware, no phone number of its own — sends are proxied onto the shared physical iMessage fleet, with a per-contact physical number resolved at send time. Minted directly `active` with no per-line Stripe subscription (wholesale is metered end-of-month on the active virtual-line count). Wholesale-partner only in v1; direct-customer callers get 402 until self-serve checkout ships (an admin can provision one for them in the meantime). Optional `metadata` is persisted and echoed on `line.*` webhooks. Supports `Idempotency-Key` — every mint creates a fresh billable line, so retries MUST carry the same key to avoid double-minting.
4970
+ */
4971
+ post: {
4972
+ parameters: {
4973
+ query?: never;
4974
+ header?: never;
4975
+ path?: never;
4976
+ cookie?: never;
4977
+ };
4978
+ requestBody?: {
4979
+ content: {
4980
+ "application/json": components["schemas"]["MintSharedLine"];
4981
+ };
4982
+ };
4983
+ responses: {
4984
+ /** @description Virtual shared line minted */
4985
+ 201: {
4986
+ headers: {
4987
+ [name: string]: unknown;
4988
+ };
4989
+ content: {
4990
+ "application/json": {
4991
+ /** @enum {boolean} */
4992
+ success: true;
4993
+ data: components["schemas"]["Line"];
4994
+ trace_id: string;
4995
+ request_id: string;
4996
+ };
4997
+ };
4998
+ };
4999
+ /** @description Bad request — validation failed */
5000
+ 400: {
5001
+ headers: {
5002
+ [name: string]: unknown;
5003
+ };
5004
+ content: {
5005
+ "application/json": components["schemas"]["ErrorEnvelope"];
5006
+ };
5007
+ };
5008
+ /** @description Unauthenticated — missing or invalid bearer token */
5009
+ 401: {
5010
+ headers: {
5011
+ [name: string]: unknown;
5012
+ };
5013
+ content: {
5014
+ "application/json": components["schemas"]["ErrorEnvelope"];
5015
+ };
5016
+ };
5017
+ /** @description Payment required — no billing relationship entitles this call */
5018
+ 402: {
5019
+ headers: {
5020
+ [name: string]: unknown;
5021
+ };
5022
+ content: {
5023
+ "application/json": components["schemas"]["ErrorEnvelope"];
5024
+ };
5025
+ };
5026
+ /** @description Forbidden — caller authenticated but not allowed */
5027
+ 403: {
5028
+ headers: {
5029
+ [name: string]: unknown;
5030
+ };
5031
+ content: {
5032
+ "application/json": components["schemas"]["ErrorEnvelope"];
5033
+ };
5034
+ };
5035
+ /** @description Conflict — concurrent or terminal state */
5036
+ 409: {
5037
+ headers: {
5038
+ [name: string]: unknown;
5039
+ };
5040
+ content: {
5041
+ "application/json": components["schemas"]["ErrorEnvelope"];
5042
+ };
5043
+ };
5044
+ /** @description Too many requests — rate limit exceeded */
5045
+ 429: {
5046
+ headers: {
5047
+ [name: string]: unknown;
5048
+ };
5049
+ content: {
5050
+ "application/json": components["schemas"]["ErrorEnvelope"];
5051
+ };
5052
+ };
5053
+ /** @description Internal server error */
5054
+ 500: {
5055
+ headers: {
5056
+ [name: string]: unknown;
5057
+ };
5058
+ content: {
5059
+ "application/json": components["schemas"]["ErrorEnvelope"];
5060
+ };
5061
+ };
5062
+ };
5063
+ };
5064
+ delete?: never;
5065
+ options?: never;
5066
+ head?: never;
5067
+ patch?: never;
5068
+ trace?: never;
5069
+ };
4880
5070
  "/v1/lines/{id}/reserve": {
4881
5071
  parameters: {
4882
5072
  query?: never;
@@ -8810,6 +9000,173 @@ export interface paths {
8810
9000
  patch?: never;
8811
9001
  trace?: never;
8812
9002
  };
9003
+ "/v1/chats": {
9004
+ parameters: {
9005
+ query?: never;
9006
+ header?: never;
9007
+ path?: never;
9008
+ cookie?: never;
9009
+ };
9010
+ /**
9011
+ * List chats
9012
+ * @description Cursor-paginated list of the caller's conversations, newest activity first. Filter by `line_id`. On shared-plan (virtual) lines each chat carries `outbound_number` — the physical number currently serving that contact (null once the binding is released; the next outbound is assigned a fresh number). Non-shared lines always carry `outbound_number: null`. Accepts an API key (`isnap_*`) or a dashboard JWT; line-scoped API keys only see chats of the lines in their allowlist.
9013
+ */
9014
+ get: {
9015
+ parameters: {
9016
+ query?: {
9017
+ line_id?: string;
9018
+ limit?: number;
9019
+ cursor?: string;
9020
+ since?: string;
9021
+ until?: string;
9022
+ };
9023
+ header?: never;
9024
+ path?: never;
9025
+ cookie?: never;
9026
+ };
9027
+ requestBody?: never;
9028
+ responses: {
9029
+ /** @description Chat list */
9030
+ 200: {
9031
+ headers: {
9032
+ [name: string]: unknown;
9033
+ };
9034
+ content: {
9035
+ "application/json": components["schemas"]["ChatListEnvelope"];
9036
+ };
9037
+ };
9038
+ /** @description Bad request — validation failed */
9039
+ 400: {
9040
+ headers: {
9041
+ [name: string]: unknown;
9042
+ };
9043
+ content: {
9044
+ "application/json": components["schemas"]["ErrorEnvelope"];
9045
+ };
9046
+ };
9047
+ /** @description Unauthenticated — missing or invalid bearer token */
9048
+ 401: {
9049
+ headers: {
9050
+ [name: string]: unknown;
9051
+ };
9052
+ content: {
9053
+ "application/json": components["schemas"]["ErrorEnvelope"];
9054
+ };
9055
+ };
9056
+ /** @description Too many requests — rate limit exceeded */
9057
+ 429: {
9058
+ headers: {
9059
+ [name: string]: unknown;
9060
+ };
9061
+ content: {
9062
+ "application/json": components["schemas"]["ErrorEnvelope"];
9063
+ };
9064
+ };
9065
+ /** @description Internal server error */
9066
+ 500: {
9067
+ headers: {
9068
+ [name: string]: unknown;
9069
+ };
9070
+ content: {
9071
+ "application/json": components["schemas"]["ErrorEnvelope"];
9072
+ };
9073
+ };
9074
+ };
9075
+ };
9076
+ put?: never;
9077
+ post?: never;
9078
+ delete?: never;
9079
+ options?: never;
9080
+ head?: never;
9081
+ patch?: never;
9082
+ trace?: never;
9083
+ };
9084
+ "/v1/chats/{chat_id}": {
9085
+ parameters: {
9086
+ query?: never;
9087
+ header?: never;
9088
+ path?: never;
9089
+ cookie?: never;
9090
+ };
9091
+ /**
9092
+ * Get a chat
9093
+ * @description Fetch a single conversation by its `chat_<base62>` id. Same shape as the list items, including `outbound_number` for shared-plan lines. Cross-account and out-of-scope ids resolve 404 (no existence leak).
9094
+ */
9095
+ get: {
9096
+ parameters: {
9097
+ query?: never;
9098
+ header?: never;
9099
+ path: {
9100
+ chat_id: string;
9101
+ };
9102
+ cookie?: never;
9103
+ };
9104
+ requestBody?: never;
9105
+ responses: {
9106
+ /** @description Chat */
9107
+ 200: {
9108
+ headers: {
9109
+ [name: string]: unknown;
9110
+ };
9111
+ content: {
9112
+ "application/json": components["schemas"]["ChatEnvelope"];
9113
+ };
9114
+ };
9115
+ /** @description Bad request — validation failed */
9116
+ 400: {
9117
+ headers: {
9118
+ [name: string]: unknown;
9119
+ };
9120
+ content: {
9121
+ "application/json": components["schemas"]["ErrorEnvelope"];
9122
+ };
9123
+ };
9124
+ /** @description Unauthenticated — missing or invalid bearer token */
9125
+ 401: {
9126
+ headers: {
9127
+ [name: string]: unknown;
9128
+ };
9129
+ content: {
9130
+ "application/json": components["schemas"]["ErrorEnvelope"];
9131
+ };
9132
+ };
9133
+ /** @description Not found */
9134
+ 404: {
9135
+ headers: {
9136
+ [name: string]: unknown;
9137
+ };
9138
+ content: {
9139
+ "application/json": components["schemas"]["ErrorEnvelope"];
9140
+ };
9141
+ };
9142
+ /** @description Too many requests — rate limit exceeded */
9143
+ 429: {
9144
+ headers: {
9145
+ [name: string]: unknown;
9146
+ };
9147
+ content: {
9148
+ "application/json": components["schemas"]["ErrorEnvelope"];
9149
+ };
9150
+ };
9151
+ /** @description Internal server error */
9152
+ 500: {
9153
+ headers: {
9154
+ [name: string]: unknown;
9155
+ };
9156
+ content: {
9157
+ "application/json": components["schemas"]["ErrorEnvelope"];
9158
+ };
9159
+ };
9160
+ };
9161
+ };
9162
+ put?: never;
9163
+ post?: never;
9164
+ delete?: never;
9165
+ options?: never;
9166
+ head?: never;
9167
+ patch?: never;
9168
+ trace?: never;
9169
+ };
8813
9170
  "/v1/chats/{chat_id}/share-contact-card": {
8814
9171
  parameters: {
8815
9172
  query?: never;
@@ -10908,6 +11265,10 @@ export interface components {
10908
11265
  /** @enum {string} */
10909
11266
  ownership: "pool";
10910
11267
  /** @enum {string} */
11268
+ pool_purpose: "trial" | "shared";
11269
+ /** Format: uuid */
11270
+ owner_user_id: string | null;
11271
+ /** @enum {string} */
10911
11272
  platform: "imessage";
10912
11273
  status: string;
10913
11274
  monthly_price: number;
@@ -10920,10 +11281,53 @@ export interface components {
10920
11281
  CreatePoolLineBody: {
10921
11282
  /** Format: uuid */
10922
11283
  line_id?: string;
11284
+ /**
11285
+ * @default trial
11286
+ * @enum {string}
11287
+ */
11288
+ purpose: "trial" | "shared";
11289
+ /** Format: uuid */
11290
+ owner_user_id?: string;
10923
11291
  phone_number?: string;
10924
11292
  area_code?: string;
10925
11293
  country_code?: string;
10926
11294
  };
11295
+ Line: {
11296
+ id: string;
11297
+ phone_number: string;
11298
+ area_code: string | null;
11299
+ country_code: string | null;
11300
+ state: string | null;
11301
+ state_name: string | null;
11302
+ /** @enum {string} */
11303
+ billing_tier: "rental_iphone" | "rental_android" | "byod_imessage" | "byod_android" | "shared_pool" | "shared_imessage";
11304
+ /** @description True when the customer owns the underlying hardware (BYOD billing tiers). BYOD lines expose the full line-health surface (offline/degraded events, GET /v1/lines/{id}/health). Rental lines (false) only emit durable, actionable events to keep customers out of transient infrastructure noise they cannot act on. */
11305
+ byod: boolean;
11306
+ /** @description True when the line is inbound-only: it may only message a handle that has messaged it first (a recipient who has never contacted the line is rejected with 403 outbound_first_forbidden). Inbound-only is a cheaper rental-tier variant (Bloo parity); always false on BYOD/pool lines. */
11307
+ inbound_only: boolean;
11308
+ capabilities?: unknown;
11309
+ status: string;
11310
+ monthly_price: number;
11311
+ stripe_subscription_id: string | null;
11312
+ activated_at: string | null;
11313
+ expires_at: string | null;
11314
+ created_at: string;
11315
+ metadata: {
11316
+ [key: string]: unknown;
11317
+ } | null;
11318
+ /** @description True when the line is an owner-provisioned test line (ownership=pool with a set owner) that backs the owner's own trial pool. Its monthly_price is the rental-equivalent, not the $0 global pool rate. */
11319
+ test_line: boolean;
11320
+ /** @description True when the line is a virtual shared-plan line (billing_tier shared_imessage): customer-owned, no dedicated hardware, phone_number empty — sends are proxied onto the shared physical iMessage fleet. Line-scoped API keys, webhooks and per-line quota apply to it like any other line. */
11321
+ shared: boolean;
11322
+ fulfillment_status?: string | null;
11323
+ };
11324
+ AdminMintSharedLineBody: {
11325
+ metadata?: {
11326
+ [key: string]: unknown;
11327
+ };
11328
+ /** Format: uuid */
11329
+ user_id: string;
11330
+ };
10927
11331
  PoolLinesMonitor: {
10928
11332
  summary: {
10929
11333
  total_lines: number;
@@ -10932,14 +11336,20 @@ export interface components {
10932
11336
  active_trials: number;
10933
11337
  dormant_trials: number;
10934
11338
  pairing_pending_trials: number;
11339
+ active_bindings: number;
10935
11340
  };
10936
11341
  lines: components["schemas"]["PoolLineMonitorItem"][];
11342
+ overcommit: components["schemas"]["PoolOvercommitScope"][];
10937
11343
  };
10938
11344
  PoolLineMonitorItem: {
10939
11345
  /** Format: uuid */
10940
11346
  id: string;
10941
11347
  public_id: string;
10942
11348
  phone_number: string | null;
11349
+ /** @enum {string} */
11350
+ purpose: "trial" | "shared";
11351
+ /** Format: uuid */
11352
+ owner_user_id: string | null;
10943
11353
  status: string;
10944
11354
  health_state: string;
10945
11355
  /** Format: uuid */
@@ -10948,9 +11358,36 @@ export interface components {
10948
11358
  active_trials: number;
10949
11359
  dormant_trials: number;
10950
11360
  pairing_pending_trials: number;
11361
+ active_bindings: number;
11362
+ daily_new_used: number;
11363
+ daily_new_limit: number;
11364
+ daily_new_headroom: number;
11365
+ last_activity_at: string | null;
10951
11366
  messages_24h: number;
10952
11367
  created_at: string;
10953
11368
  };
11369
+ PoolOvercommitScope: {
11370
+ /** @enum {string} */
11371
+ scope: "global" | "partner";
11372
+ /** Format: uuid */
11373
+ owner_user_id: string | null;
11374
+ active_virtual_lines: number;
11375
+ physical_lines: number;
11376
+ ratio: number | null;
11377
+ };
11378
+ DemotePoolLine: {
11379
+ /** Format: uuid */
11380
+ id: string;
11381
+ public_id: string;
11382
+ /** @enum {string} */
11383
+ ownership: "rental";
11384
+ pool_purpose: unknown;
11385
+ status: string;
11386
+ monthly_price: number;
11387
+ /** Format: uuid */
11388
+ owner_user_id: string | null;
11389
+ updated_at: string;
11390
+ };
10954
11391
  ActivationCodeStatus: {
10955
11392
  consumed: boolean;
10956
11393
  consumedAt: string | null;
@@ -11325,33 +11762,6 @@ export interface components {
11325
11762
  page: number;
11326
11763
  limit: number;
11327
11764
  };
11328
- Line: {
11329
- id: string;
11330
- phone_number: string;
11331
- area_code: string | null;
11332
- country_code: string | null;
11333
- state: string | null;
11334
- state_name: string | null;
11335
- /** @enum {string} */
11336
- billing_tier: "rental_iphone" | "rental_android" | "byod_imessage" | "byod_android" | "shared_pool";
11337
- /** @description True when the customer owns the underlying hardware (BYOD billing tiers). BYOD lines expose the full line-health surface (offline/degraded events, GET /v1/lines/{id}/health). Rental lines (false) only emit durable, actionable events to keep customers out of transient infrastructure noise they cannot act on. */
11338
- byod: boolean;
11339
- /** @description True when the line is inbound-only: it may only message a handle that has messaged it first (a recipient who has never contacted the line is rejected with 403 outbound_first_forbidden). Inbound-only is a cheaper rental-tier variant (Bloo parity); always false on BYOD/pool lines. */
11340
- inbound_only: boolean;
11341
- capabilities?: unknown;
11342
- status: string;
11343
- monthly_price: number;
11344
- stripe_subscription_id: string | null;
11345
- activated_at: string | null;
11346
- expires_at: string | null;
11347
- created_at: string;
11348
- metadata: {
11349
- [key: string]: unknown;
11350
- } | null;
11351
- /** @description True when the line is an owner-provisioned test line (ownership=pool with a set owner) that backs the owner's own trial pool. Its monthly_price is the rental-equivalent, not the $0 global pool rate. */
11352
- test_line: boolean;
11353
- fulfillment_status?: string | null;
11354
- };
11355
11765
  MyLines: {
11356
11766
  lines: components["schemas"]["Line"][];
11357
11767
  };
@@ -11365,6 +11775,11 @@ export interface components {
11365
11775
  [key: string]: unknown;
11366
11776
  };
11367
11777
  };
11778
+ MintSharedLine: {
11779
+ metadata?: {
11780
+ [key: string]: unknown;
11781
+ };
11782
+ };
11368
11783
  ActivateLine: {
11369
11784
  inbound_only?: boolean;
11370
11785
  };
@@ -11779,7 +12194,7 @@ export interface components {
11779
12194
  * @description A concrete event type (e.g. `message.received`), a family wildcard (`line.*`), or the catch-all `*`.
11780
12195
  * @enum {string}
11781
12196
  */
11782
- WebhookEventName: "message.queued" | "message.sent" | "message.delivered" | "message.read" | "message.failed" | "message.received" | "message.scheduled" | "message.cancelled" | "message.fallback_triggered" | "reaction.added" | "reaction.received" | "reaction.removed" | "line.connected" | "line.disconnected" | "line.offline" | "line.degraded" | "line.apple_id_flagged" | "line.quota_warning" | "line.quota_exceeded" | "line.capability_changed" | "typing_indicator.started" | "typing_indicator.stopped" | "trial.linked" | "trial.dormant" | "trial.reactivated" | "trial.bind_conflict" | "pre_order.fulfilled" | "pre_order.cancelled" | "pre_order.refunded" | "webhook.test" | "*" | "message.*" | "reaction.*" | "line.*" | "typing_indicator.*" | "trial.*" | "webhook.*";
12197
+ WebhookEventName: "message.queued" | "message.sent" | "message.delivered" | "message.read" | "message.failed" | "message.received" | "message.scheduled" | "message.cancelled" | "message.fallback_triggered" | "reaction.added" | "reaction.received" | "reaction.removed" | "line.connected" | "line.disconnected" | "line.offline" | "line.degraded" | "line.apple_id_flagged" | "line.quota_warning" | "line.quota_exceeded" | "line.capability_changed" | "typing_indicator.started" | "typing_indicator.stopped" | "trial.linked" | "trial.dormant" | "trial.reactivated" | "trial.bind_conflict" | "binding.released" | "pre_order.fulfilled" | "pre_order.cancelled" | "pre_order.refunded" | "webhook.test" | "*" | "message.*" | "reaction.*" | "line.*" | "typing_indicator.*" | "trial.*" | "binding.*" | "webhook.*";
11783
12198
  WebhookList: {
11784
12199
  webhooks: components["schemas"]["Webhook"][];
11785
12200
  };
@@ -11952,6 +12367,38 @@ export interface components {
11952
12367
  /** @example 1 */
11953
12368
  calling_code: string;
11954
12369
  };
12370
+ ChatListEnvelope: {
12371
+ /** @enum {boolean} */
12372
+ success: true;
12373
+ data: components["schemas"]["ChatList"];
12374
+ trace_id: string;
12375
+ request_id: string;
12376
+ };
12377
+ ChatList: {
12378
+ items: components["schemas"]["Chat"][];
12379
+ has_more: boolean;
12380
+ next_cursor: string | null;
12381
+ };
12382
+ Chat: {
12383
+ /** @example chat_5h7FqK2mNpQ8rT3vW9xY1zA4b */
12384
+ id: string;
12385
+ line_id: string;
12386
+ contact_handle: string;
12387
+ /** @description Shared-plan lines only: the physical number currently serving this contact (the active binding). Null when no binding is active — e.g. after inactivity release, in which case the next outbound is assigned a fresh number — and always null on non-shared lines. */
12388
+ outbound_number: string | null;
12389
+ last_message_at: string;
12390
+ message_count: number;
12391
+ unread_count: number;
12392
+ created_at: string;
12393
+ updated_at: string;
12394
+ };
12395
+ ChatEnvelope: {
12396
+ /** @enum {boolean} */
12397
+ success: true;
12398
+ data: components["schemas"]["Chat"];
12399
+ trace_id: string;
12400
+ request_id: string;
12401
+ };
11955
12402
  ShareContactCardEnvelope: {
11956
12403
  /** @enum {boolean} */
11957
12404
  success: true;
@@ -12018,6 +12465,11 @@ export interface components {
12018
12465
  TrialInitBody: {
12019
12466
  max_outbound_without_inbound?: number;
12020
12467
  welcome_message?: string;
12468
+ /**
12469
+ * @description Optional partner-supplied marketing footer appended to this trial's free pool-line outbounds, replacing the default iSnap footer. Omit to keep the iSnap default. Keep it short and GSM-7-safe — non-GSM characters force the SMS into UCS-2 (70 chars/segment) and cost extra segments.
12470
+ * @example Sent free via Acme
12471
+ */
12472
+ footer?: string;
12021
12473
  };
12022
12474
  TrialStatusEnvelope: {
12023
12475
  /** @enum {boolean} */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@isnap/sdk",
3
- "version": "1.1.0-next.56",
3
+ "version": "1.1.0-next.58",
4
4
  "description": "Official TypeScript SDK for the iSnap P2P telephony API",
5
5
  "license": "MIT",
6
6
  "type": "module",