ark-email 0.8.0 → 0.10.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5b28db2b8003c270a67cebc743ea403628c8a13a8d0cff4b4e357704aae84c55
4
- data.tar.gz: 8ccf63ab298517800021888ab0e2041d4eb5b66c27735d16e3ed2c630fb3eab7
3
+ metadata.gz: a5bff73c450d51ba2c0214d2fa1a15c67c3252e32ba41754b22ba947d333c6c9
4
+ data.tar.gz: bef229fb5def2ff8711e410cb00e86e882828d4fa427b46f96c0d06155d0b48b
5
5
  SHA512:
6
- metadata.gz: ebe864f749bc491e0d8d190661a3c265050b59d7a21e7e8bf97b4fb52c148040a02b42f51d03e7f5b2e19119c75abf1581ab78835d66529632453b4a206a7064
7
- data.tar.gz: 0bd1b269b07c48c3514ec03cb0a7372c980f8f4ee48687b06c8bb7593cd2ea0303d6b22aa7bbc8300462294bd2132cf0232e87b585376a0f96470040941591c9
6
+ metadata.gz: 70ebcf12bce9fc793a3c383f026a338cb896101ca7eebb1a912b6ca1fca41006dc30e2e68705c80d43d61792b1739d5f89249e9062266ea847ee0c11c40f1f3e
7
+ data.tar.gz: a14f81353ad5109090ebb94092fd81d378ebc374b24f9a202533510ab3515744487316aabcf11175f6ba042846fbd91a6bf87b5003d3e38b0112598a202652a3
data/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.10.0 (2026-01-22)
4
+
5
+ Full Changelog: [v0.9.0...v0.10.0](https://github.com/ArkHQ-io/ark-ruby/compare/v0.9.0...v0.10.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** improve GET delivery attempts ([863df8e](https://github.com/ArkHQ-io/ark-ruby/commit/863df8e1ca7e4e29f44fdd1ffb9583fc71e5245e))
10
+
11
+ ## 0.9.0 (2026-01-21)
12
+
13
+ Full Changelog: [v0.8.0...v0.9.0](https://github.com/ArkHQ-io/ark-ruby/compare/v0.8.0...v0.9.0)
14
+
15
+ ### Features
16
+
17
+ * **api:** add sandbox domain ([d61ffa2](https://github.com/ArkHQ-io/ark-ruby/commit/d61ffa220016820c5620ba168461e82fab223ed4))
18
+
3
19
  ## 0.8.0 (2026-01-20)
4
20
 
5
21
  Full Changelog: [v0.7.0...v0.8.0](https://github.com/ArkHQ-io/ark-ruby/compare/v0.7.0...v0.8.0)
data/README.md CHANGED
@@ -26,7 +26,7 @@ To use this gem, install via Bundler by adding the following to your application
26
26
  <!-- x-release-please-start-version -->
27
27
 
28
28
  ```ruby
29
- gem "ark-email", "~> 0.8.0"
29
+ gem "ark-email", "~> 0.10.0"
30
30
  ```
31
31
 
32
32
  <!-- x-release-please-end -->
@@ -26,30 +26,72 @@ module ArkEmail
26
26
 
27
27
  # @see ArkEmail::Models::EmailRetrieveDeliveriesResponse#data
28
28
  class Data < ArkEmail::Internal::Type::BaseModel
29
+ # @!attribute can_retry_manually
30
+ # Whether the message can be manually retried via `POST /emails/{emailId}/retry`.
31
+ # `true` when the raw message content is still available (not expired). Messages
32
+ # older than the retention period cannot be retried.
33
+ #
34
+ # @return [Boolean]
35
+ required :can_retry_manually, ArkEmail::Internal::Type::Boolean, api_name: :canRetryManually
36
+
29
37
  # @!attribute deliveries
38
+ # Chronological list of delivery attempts for this message. Each attempt includes
39
+ # SMTP response codes and timestamps.
30
40
  #
31
41
  # @return [Array<ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Delivery>]
32
42
  required :deliveries,
33
43
  -> { ArkEmail::Internal::Type::ArrayOf[ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Delivery] }
34
44
 
35
45
  # @!attribute message_id
36
- # Internal message ID
46
+ # Internal numeric message ID
37
47
  #
38
- # @return [String]
39
- required :message_id, String, api_name: :messageId
48
+ # @return [Integer]
49
+ required :message_id, Integer, api_name: :messageId
40
50
 
41
51
  # @!attribute message_token
42
- # Message token
52
+ # Unique message token for API references
43
53
  #
44
54
  # @return [String]
45
55
  required :message_token, String, api_name: :messageToken
46
56
 
47
- # @!method initialize(deliveries:, message_id:, message_token:)
48
- # @param deliveries [Array<ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Delivery>]
57
+ # @!attribute retry_state
58
+ # Information about the current retry state of a message that is queued for
59
+ # delivery. Only present when the message is in the delivery queue.
49
60
  #
50
- # @param message_id [String] Internal message ID
61
+ # @return [ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::RetryState, nil]
62
+ required :retry_state,
63
+ -> { ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::RetryState },
64
+ api_name: :retryState,
65
+ nil?: true
66
+
67
+ # @!attribute status
68
+ # Current message status (lowercase). Possible values:
69
+ #
70
+ # - `pending` - Initial state, awaiting first delivery attempt
71
+ # - `sent` - Successfully delivered
72
+ # - `softfail` - Temporary failure, will retry automatically
73
+ # - `hardfail` - Permanent failure, will not retry
74
+ # - `held` - Held for manual review (suppression list, etc.)
75
+ # - `bounced` - Bounced by recipient server
51
76
  #
52
- # @param message_token [String] Message token
77
+ # @return [Symbol, ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Status]
78
+ required :status, enum: -> { ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Status }
79
+
80
+ # @!method initialize(can_retry_manually:, deliveries:, message_id:, message_token:, retry_state:, status:)
81
+ # Some parameter documentations has been truncated, see
82
+ # {ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data} for more details.
83
+ #
84
+ # @param can_retry_manually [Boolean] Whether the message can be manually retried via `POST /emails/{emailId}/retry`.
85
+ #
86
+ # @param deliveries [Array<ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Delivery>] Chronological list of delivery attempts for this message.
87
+ #
88
+ # @param message_id [Integer] Internal numeric message ID
89
+ #
90
+ # @param message_token [String] Unique message token for API references
91
+ #
92
+ # @param retry_state [ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::RetryState, nil] Information about the current retry state of a message that is queued for delive
93
+ #
94
+ # @param status [Symbol, ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Status] Current message status (lowercase). Possible values:
53
95
 
54
96
  class Delivery < ArkEmail::Internal::Type::BaseModel
55
97
  # @!attribute id
@@ -117,6 +159,104 @@ module ArkEmail
117
159
  #
118
160
  # @param sent_with_ssl [Boolean] Whether TLS was used
119
161
  end
162
+
163
+ # @see ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data#retry_state
164
+ class RetryState < ArkEmail::Internal::Type::BaseModel
165
+ # @!attribute attempt
166
+ # Current attempt number (0-indexed). The first delivery attempt is 0, the first
167
+ # retry is 1, and so on.
168
+ #
169
+ # @return [Integer]
170
+ required :attempt, Integer
171
+
172
+ # @!attribute attempts_remaining
173
+ # Number of attempts remaining before the message is hard-failed. Calculated as
174
+ # `maxAttempts - attempt`.
175
+ #
176
+ # @return [Integer]
177
+ required :attempts_remaining, Integer, api_name: :attemptsRemaining
178
+
179
+ # @!attribute manual
180
+ # Whether this queue entry was created by a manual retry request. Manual retries
181
+ # bypass certain hold conditions like suppression lists.
182
+ #
183
+ # @return [Boolean]
184
+ required :manual, ArkEmail::Internal::Type::Boolean
185
+
186
+ # @!attribute max_attempts
187
+ # Maximum number of delivery attempts before the message is hard-failed.
188
+ # Configured at the server level.
189
+ #
190
+ # @return [Integer]
191
+ required :max_attempts, Integer, api_name: :maxAttempts
192
+
193
+ # @!attribute processing
194
+ # Whether the message is currently being processed by a delivery worker. When
195
+ # `true`, the message is actively being sent.
196
+ #
197
+ # @return [Boolean]
198
+ required :processing, ArkEmail::Internal::Type::Boolean
199
+
200
+ # @!attribute next_retry_at
201
+ # Unix timestamp of when the next retry attempt is scheduled. `null` if the
202
+ # message is ready for immediate processing or currently being processed.
203
+ #
204
+ # @return [Float, nil]
205
+ optional :next_retry_at, Float, api_name: :nextRetryAt, nil?: true
206
+
207
+ # @!attribute next_retry_at_iso
208
+ # ISO 8601 formatted timestamp of the next retry attempt. `null` if the message is
209
+ # ready for immediate processing.
210
+ #
211
+ # @return [Time, nil]
212
+ optional :next_retry_at_iso, Time, api_name: :nextRetryAtIso, nil?: true
213
+
214
+ # @!method initialize(attempt:, attempts_remaining:, manual:, max_attempts:, processing:, next_retry_at: nil, next_retry_at_iso: nil)
215
+ # Some parameter documentations has been truncated, see
216
+ # {ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::RetryState} for more
217
+ # details.
218
+ #
219
+ # Information about the current retry state of a message that is queued for
220
+ # delivery. Only present when the message is in the delivery queue.
221
+ #
222
+ # @param attempt [Integer] Current attempt number (0-indexed). The first delivery attempt is 0,
223
+ #
224
+ # @param attempts_remaining [Integer] Number of attempts remaining before the message is hard-failed.
225
+ #
226
+ # @param manual [Boolean] Whether this queue entry was created by a manual retry request.
227
+ #
228
+ # @param max_attempts [Integer] Maximum number of delivery attempts before the message is hard-failed.
229
+ #
230
+ # @param processing [Boolean] Whether the message is currently being processed by a delivery worker.
231
+ #
232
+ # @param next_retry_at [Float, nil] Unix timestamp of when the next retry attempt is scheduled.
233
+ #
234
+ # @param next_retry_at_iso [Time, nil] ISO 8601 formatted timestamp of the next retry attempt.
235
+ end
236
+
237
+ # Current message status (lowercase). Possible values:
238
+ #
239
+ # - `pending` - Initial state, awaiting first delivery attempt
240
+ # - `sent` - Successfully delivered
241
+ # - `softfail` - Temporary failure, will retry automatically
242
+ # - `hardfail` - Permanent failure, will not retry
243
+ # - `held` - Held for manual review (suppression list, etc.)
244
+ # - `bounced` - Bounced by recipient server
245
+ #
246
+ # @see ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data#status
247
+ module Status
248
+ extend ArkEmail::Internal::Type::Enum
249
+
250
+ PENDING = :pending
251
+ SENT = :sent
252
+ SOFTFAIL = :softfail
253
+ HARDFAIL = :hardfail
254
+ HELD = :held
255
+ BOUNCED = :bounced
256
+
257
+ # @!method self.values
258
+ # @return [Array<Symbol>]
259
+ end
120
260
  end
121
261
  end
122
262
  end
@@ -51,7 +51,17 @@ module ArkEmail
51
51
  # @return [Integer]
52
52
  required :total, Integer
53
53
 
54
- # @!method initialize(accepted:, failed:, messages:, total:)
54
+ # @!attribute sandbox
55
+ # Whether this batch was sent in sandbox mode. Only present (and true) for sandbox
56
+ # emails sent from @arkhq.io addresses.
57
+ #
58
+ # @return [Boolean, nil]
59
+ optional :sandbox, ArkEmail::Internal::Type::Boolean
60
+
61
+ # @!method initialize(accepted:, failed:, messages:, total:, sandbox: nil)
62
+ # Some parameter documentations has been truncated, see
63
+ # {ArkEmail::Models::EmailSendBatchResponse::Data} for more details.
64
+ #
55
65
  # @param accepted [Integer] Successfully accepted emails
56
66
  #
57
67
  # @param failed [Integer] Failed emails
@@ -59,6 +69,8 @@ module ArkEmail
59
69
  # @param messages [Hash{Symbol=>ArkEmail::Models::EmailSendBatchResponse::Data::Message}] Map of recipient email to message info
60
70
  #
61
71
  # @param total [Integer] Total emails in the batch
72
+ #
73
+ # @param sandbox [Boolean] Whether this batch was sent in sandbox mode.
62
74
 
63
75
  class Message < ArkEmail::Internal::Type::BaseModel
64
76
  # @!attribute id
@@ -8,7 +8,7 @@ module ArkEmail
8
8
  include ArkEmail::Internal::Type::RequestParameters
9
9
 
10
10
  # @!attribute from
11
- # Sender email address. Must be from a verified domain.
11
+ # Sender email address. Must be from a verified domain OR use sandbox mode.
12
12
  #
13
13
  # **Supported formats:**
14
14
  #
@@ -18,6 +18,10 @@ module ArkEmail
18
18
  #
19
19
  # The domain portion must match a verified sending domain in your account.
20
20
  #
21
+ # **Sandbox mode:** Use `sandbox@arkhq.io` to send test emails without domain
22
+ # verification. Sandbox emails can only be sent to organization members and are
23
+ # limited to 10 per day.
24
+ #
21
25
  # @return [String]
22
26
  required :from, String
23
27
 
@@ -117,7 +121,7 @@ module ArkEmail
117
121
  # Some parameter documentations has been truncated, see
118
122
  # {ArkEmail::Models::EmailSendParams} for more details.
119
123
  #
120
- # @param from [String] Sender email address. Must be from a verified domain.
124
+ # @param from [String] Sender email address. Must be from a verified domain OR use sandbox mode.
121
125
  #
122
126
  # @param subject [String] Email subject line
123
127
  #
@@ -50,7 +50,17 @@ module ArkEmail
50
50
  # @return [String, nil]
51
51
  optional :message_id, String, api_name: :messageId
52
52
 
53
- # @!method initialize(id:, status:, to:, message_id: nil)
53
+ # @!attribute sandbox
54
+ # Whether this email was sent in sandbox mode. Only present (and true) for sandbox
55
+ # emails sent from @arkhq.io addresses.
56
+ #
57
+ # @return [Boolean, nil]
58
+ optional :sandbox, ArkEmail::Internal::Type::Boolean
59
+
60
+ # @!method initialize(id:, status:, to:, message_id: nil, sandbox: nil)
61
+ # Some parameter documentations has been truncated, see
62
+ # {ArkEmail::Models::EmailSendRawResponse::Data} for more details.
63
+ #
54
64
  # @param id [String] Unique message ID (format: msg*{id}*{token})
55
65
  #
56
66
  # @param status [Symbol, ArkEmail::Models::EmailSendRawResponse::Data::Status] Current delivery status
@@ -58,6 +68,8 @@ module ArkEmail
58
68
  # @param to [Array<String>] List of recipient addresses
59
69
  #
60
70
  # @param message_id [String] SMTP Message-ID header value
71
+ #
72
+ # @param sandbox [Boolean] Whether this email was sent in sandbox mode.
61
73
 
62
74
  # Current delivery status
63
75
  #
@@ -50,7 +50,17 @@ module ArkEmail
50
50
  # @return [String, nil]
51
51
  optional :message_id, String, api_name: :messageId
52
52
 
53
- # @!method initialize(id:, status:, to:, message_id: nil)
53
+ # @!attribute sandbox
54
+ # Whether this email was sent in sandbox mode. Only present (and true) for sandbox
55
+ # emails sent from @arkhq.io addresses.
56
+ #
57
+ # @return [Boolean, nil]
58
+ optional :sandbox, ArkEmail::Internal::Type::Boolean
59
+
60
+ # @!method initialize(id:, status:, to:, message_id: nil, sandbox: nil)
61
+ # Some parameter documentations has been truncated, see
62
+ # {ArkEmail::Models::EmailSendResponse::Data} for more details.
63
+ #
54
64
  # @param id [String] Unique message ID (format: msg*{id}*{token})
55
65
  #
56
66
  # @param status [Symbol, ArkEmail::Models::EmailSendResponse::Data::Status] Current delivery status
@@ -58,6 +68,8 @@ module ArkEmail
58
68
  # @param to [Array<String>] List of recipient addresses
59
69
  #
60
70
  # @param message_id [String] SMTP Message-ID header value
71
+ #
72
+ # @param sandbox [Boolean] Whether this email was sent in sandbox mode.
61
73
 
62
74
  # Current delivery status
63
75
  #
@@ -82,12 +82,50 @@ module ArkEmail
82
82
  )
83
83
  end
84
84
 
85
- # Get the history of delivery attempts for an email, including SMTP response codes
86
- # and timestamps.
85
+ # Some parameter documentations has been truncated, see
86
+ # {ArkEmail::Models::EmailRetrieveDeliveriesParams} for more details.
87
+ #
88
+ # Get the complete delivery history for an email, including SMTP response codes,
89
+ # timestamps, and current retry state.
90
+ #
91
+ # ## Response Fields
92
+ #
93
+ # ### Status
94
+ #
95
+ # The current status of the email:
96
+ #
97
+ # - `pending` - Awaiting first delivery attempt
98
+ # - `sent` - Successfully delivered to recipient server
99
+ # - `softfail` - Temporary failure, automatic retry scheduled
100
+ # - `hardfail` - Permanent failure, will not retry
101
+ # - `held` - Held for manual review
102
+ # - `bounced` - Bounced by recipient server
103
+ #
104
+ # ### Retry State
105
+ #
106
+ # When the email is in the delivery queue (`pending` or `softfail` status),
107
+ # `retryState` provides information about the retry schedule:
108
+ #
109
+ # - `attempt` - Current attempt number (0 = first attempt)
110
+ # - `maxAttempts` - Maximum attempts before hard-fail (typically 18)
111
+ # - `attemptsRemaining` - Attempts left before hard-fail
112
+ # - `nextRetryAt` - When the next retry is scheduled (Unix timestamp)
113
+ # - `processing` - Whether the email is currently being processed
114
+ # - `manual` - Whether this was triggered by a manual retry
115
+ #
116
+ # When the email has finished processing (`sent`, `hardfail`, `held`, `bounced`),
117
+ # `retryState` is `null`.
118
+ #
119
+ # ### Can Retry Manually
120
+ #
121
+ # Indicates whether you can call `POST /emails/{emailId}/retry` to manually retry
122
+ # the email. This is `true` when the raw message content is still available (not
123
+ # expired due to retention policy).
87
124
  #
88
125
  # @overload retrieve_deliveries(email_id, request_options: {})
89
126
  #
90
- # @param email_id [String]
127
+ # @param email_id [String] Email identifier. Accepts multiple formats:
128
+ #
91
129
  # @param request_options [ArkEmail::RequestOptions, Hash{Symbol=>Object}, nil]
92
130
  #
93
131
  # @return [ArkEmail::Models::EmailRetrieveDeliveriesResponse]
@@ -144,7 +182,7 @@ module ArkEmail
144
182
  #
145
183
  # @overload send_(from:, subject:, to:, attachments: nil, bcc: nil, cc: nil, headers: nil, html: nil, metadata: nil, reply_to: nil, tag: nil, text: nil, idempotency_key: nil, request_options: {})
146
184
  #
147
- # @param from [String] Body param: Sender email address. Must be from a verified domain.
185
+ # @param from [String] Body param: Sender email address. Must be from a verified domain OR use sandbox
148
186
  #
149
187
  # @param subject [String] Body param: Email subject line
150
188
  #
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ArkEmail
4
- VERSION = "0.8.0"
4
+ VERSION = "0.10.0"
5
5
  end
@@ -61,6 +61,14 @@ module ArkEmail
61
61
  )
62
62
  end
63
63
 
64
+ # Whether the message can be manually retried via `POST /emails/{emailId}/retry`.
65
+ # `true` when the raw message content is still available (not expired). Messages
66
+ # older than the retention period cannot be retried.
67
+ sig { returns(T::Boolean) }
68
+ attr_accessor :can_retry_manually
69
+
70
+ # Chronological list of delivery attempts for this message. Each attempt includes
71
+ # SMTP response codes and timestamps.
64
72
  sig do
65
73
  returns(
66
74
  T::Array[
@@ -70,42 +78,110 @@ module ArkEmail
70
78
  end
71
79
  attr_accessor :deliveries
72
80
 
73
- # Internal message ID
74
- sig { returns(String) }
81
+ # Internal numeric message ID
82
+ sig { returns(Integer) }
75
83
  attr_accessor :message_id
76
84
 
77
- # Message token
85
+ # Unique message token for API references
78
86
  sig { returns(String) }
79
87
  attr_accessor :message_token
80
88
 
89
+ # Information about the current retry state of a message that is queued for
90
+ # delivery. Only present when the message is in the delivery queue.
91
+ sig do
92
+ returns(
93
+ T.nilable(
94
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::RetryState
95
+ )
96
+ )
97
+ end
98
+ attr_reader :retry_state
99
+
100
+ sig do
101
+ params(
102
+ retry_state:
103
+ T.nilable(
104
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::RetryState::OrHash
105
+ )
106
+ ).void
107
+ end
108
+ attr_writer :retry_state
109
+
110
+ # Current message status (lowercase). Possible values:
111
+ #
112
+ # - `pending` - Initial state, awaiting first delivery attempt
113
+ # - `sent` - Successfully delivered
114
+ # - `softfail` - Temporary failure, will retry automatically
115
+ # - `hardfail` - Permanent failure, will not retry
116
+ # - `held` - Held for manual review (suppression list, etc.)
117
+ # - `bounced` - Bounced by recipient server
118
+ sig do
119
+ returns(
120
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Status::TaggedSymbol
121
+ )
122
+ end
123
+ attr_accessor :status
124
+
81
125
  sig do
82
126
  params(
127
+ can_retry_manually: T::Boolean,
83
128
  deliveries:
84
129
  T::Array[
85
130
  ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Delivery::OrHash
86
131
  ],
87
- message_id: String,
88
- message_token: String
132
+ message_id: Integer,
133
+ message_token: String,
134
+ retry_state:
135
+ T.nilable(
136
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::RetryState::OrHash
137
+ ),
138
+ status:
139
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Status::OrSymbol
89
140
  ).returns(T.attached_class)
90
141
  end
91
142
  def self.new(
143
+ # Whether the message can be manually retried via `POST /emails/{emailId}/retry`.
144
+ # `true` when the raw message content is still available (not expired). Messages
145
+ # older than the retention period cannot be retried.
146
+ can_retry_manually:,
147
+ # Chronological list of delivery attempts for this message. Each attempt includes
148
+ # SMTP response codes and timestamps.
92
149
  deliveries:,
93
- # Internal message ID
150
+ # Internal numeric message ID
94
151
  message_id:,
95
- # Message token
96
- message_token:
152
+ # Unique message token for API references
153
+ message_token:,
154
+ # Information about the current retry state of a message that is queued for
155
+ # delivery. Only present when the message is in the delivery queue.
156
+ retry_state:,
157
+ # Current message status (lowercase). Possible values:
158
+ #
159
+ # - `pending` - Initial state, awaiting first delivery attempt
160
+ # - `sent` - Successfully delivered
161
+ # - `softfail` - Temporary failure, will retry automatically
162
+ # - `hardfail` - Permanent failure, will not retry
163
+ # - `held` - Held for manual review (suppression list, etc.)
164
+ # - `bounced` - Bounced by recipient server
165
+ status:
97
166
  )
98
167
  end
99
168
 
100
169
  sig do
101
170
  override.returns(
102
171
  {
172
+ can_retry_manually: T::Boolean,
103
173
  deliveries:
104
174
  T::Array[
105
175
  ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Delivery
106
176
  ],
107
- message_id: String,
108
- message_token: String
177
+ message_id: Integer,
178
+ message_token: String,
179
+ retry_state:
180
+ T.nilable(
181
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::RetryState
182
+ ),
183
+ status:
184
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Status::TaggedSymbol
109
185
  }
110
186
  )
111
187
  end
@@ -214,6 +290,167 @@ module ArkEmail
214
290
  def to_hash
215
291
  end
216
292
  end
293
+
294
+ class RetryState < ArkEmail::Internal::Type::BaseModel
295
+ OrHash =
296
+ T.type_alias do
297
+ T.any(
298
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::RetryState,
299
+ ArkEmail::Internal::AnyHash
300
+ )
301
+ end
302
+
303
+ # Current attempt number (0-indexed). The first delivery attempt is 0, the first
304
+ # retry is 1, and so on.
305
+ sig { returns(Integer) }
306
+ attr_accessor :attempt
307
+
308
+ # Number of attempts remaining before the message is hard-failed. Calculated as
309
+ # `maxAttempts - attempt`.
310
+ sig { returns(Integer) }
311
+ attr_accessor :attempts_remaining
312
+
313
+ # Whether this queue entry was created by a manual retry request. Manual retries
314
+ # bypass certain hold conditions like suppression lists.
315
+ sig { returns(T::Boolean) }
316
+ attr_accessor :manual
317
+
318
+ # Maximum number of delivery attempts before the message is hard-failed.
319
+ # Configured at the server level.
320
+ sig { returns(Integer) }
321
+ attr_accessor :max_attempts
322
+
323
+ # Whether the message is currently being processed by a delivery worker. When
324
+ # `true`, the message is actively being sent.
325
+ sig { returns(T::Boolean) }
326
+ attr_accessor :processing
327
+
328
+ # Unix timestamp of when the next retry attempt is scheduled. `null` if the
329
+ # message is ready for immediate processing or currently being processed.
330
+ sig { returns(T.nilable(Float)) }
331
+ attr_accessor :next_retry_at
332
+
333
+ # ISO 8601 formatted timestamp of the next retry attempt. `null` if the message is
334
+ # ready for immediate processing.
335
+ sig { returns(T.nilable(Time)) }
336
+ attr_accessor :next_retry_at_iso
337
+
338
+ # Information about the current retry state of a message that is queued for
339
+ # delivery. Only present when the message is in the delivery queue.
340
+ sig do
341
+ params(
342
+ attempt: Integer,
343
+ attempts_remaining: Integer,
344
+ manual: T::Boolean,
345
+ max_attempts: Integer,
346
+ processing: T::Boolean,
347
+ next_retry_at: T.nilable(Float),
348
+ next_retry_at_iso: T.nilable(Time)
349
+ ).returns(T.attached_class)
350
+ end
351
+ def self.new(
352
+ # Current attempt number (0-indexed). The first delivery attempt is 0, the first
353
+ # retry is 1, and so on.
354
+ attempt:,
355
+ # Number of attempts remaining before the message is hard-failed. Calculated as
356
+ # `maxAttempts - attempt`.
357
+ attempts_remaining:,
358
+ # Whether this queue entry was created by a manual retry request. Manual retries
359
+ # bypass certain hold conditions like suppression lists.
360
+ manual:,
361
+ # Maximum number of delivery attempts before the message is hard-failed.
362
+ # Configured at the server level.
363
+ max_attempts:,
364
+ # Whether the message is currently being processed by a delivery worker. When
365
+ # `true`, the message is actively being sent.
366
+ processing:,
367
+ # Unix timestamp of when the next retry attempt is scheduled. `null` if the
368
+ # message is ready for immediate processing or currently being processed.
369
+ next_retry_at: nil,
370
+ # ISO 8601 formatted timestamp of the next retry attempt. `null` if the message is
371
+ # ready for immediate processing.
372
+ next_retry_at_iso: nil
373
+ )
374
+ end
375
+
376
+ sig do
377
+ override.returns(
378
+ {
379
+ attempt: Integer,
380
+ attempts_remaining: Integer,
381
+ manual: T::Boolean,
382
+ max_attempts: Integer,
383
+ processing: T::Boolean,
384
+ next_retry_at: T.nilable(Float),
385
+ next_retry_at_iso: T.nilable(Time)
386
+ }
387
+ )
388
+ end
389
+ def to_hash
390
+ end
391
+ end
392
+
393
+ # Current message status (lowercase). Possible values:
394
+ #
395
+ # - `pending` - Initial state, awaiting first delivery attempt
396
+ # - `sent` - Successfully delivered
397
+ # - `softfail` - Temporary failure, will retry automatically
398
+ # - `hardfail` - Permanent failure, will not retry
399
+ # - `held` - Held for manual review (suppression list, etc.)
400
+ # - `bounced` - Bounced by recipient server
401
+ module Status
402
+ extend ArkEmail::Internal::Type::Enum
403
+
404
+ TaggedSymbol =
405
+ T.type_alias do
406
+ T.all(
407
+ Symbol,
408
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Status
409
+ )
410
+ end
411
+ OrSymbol = T.type_alias { T.any(Symbol, String) }
412
+
413
+ PENDING =
414
+ T.let(
415
+ :pending,
416
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Status::TaggedSymbol
417
+ )
418
+ SENT =
419
+ T.let(
420
+ :sent,
421
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Status::TaggedSymbol
422
+ )
423
+ SOFTFAIL =
424
+ T.let(
425
+ :softfail,
426
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Status::TaggedSymbol
427
+ )
428
+ HARDFAIL =
429
+ T.let(
430
+ :hardfail,
431
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Status::TaggedSymbol
432
+ )
433
+ HELD =
434
+ T.let(
435
+ :held,
436
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Status::TaggedSymbol
437
+ )
438
+ BOUNCED =
439
+ T.let(
440
+ :bounced,
441
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Status::TaggedSymbol
442
+ )
443
+
444
+ sig do
445
+ override.returns(
446
+ T::Array[
447
+ ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Status::TaggedSymbol
448
+ ]
449
+ )
450
+ end
451
+ def self.values
452
+ end
453
+ end
217
454
  end
218
455
  end
219
456
  end
@@ -84,6 +84,14 @@ module ArkEmail
84
84
  sig { returns(Integer) }
85
85
  attr_accessor :total
86
86
 
87
+ # Whether this batch was sent in sandbox mode. Only present (and true) for sandbox
88
+ # emails sent from @arkhq.io addresses.
89
+ sig { returns(T.nilable(T::Boolean)) }
90
+ attr_reader :sandbox
91
+
92
+ sig { params(sandbox: T::Boolean).void }
93
+ attr_writer :sandbox
94
+
87
95
  sig do
88
96
  params(
89
97
  accepted: Integer,
@@ -93,7 +101,8 @@ module ArkEmail
93
101
  Symbol,
94
102
  ArkEmail::Models::EmailSendBatchResponse::Data::Message::OrHash
95
103
  ],
96
- total: Integer
104
+ total: Integer,
105
+ sandbox: T::Boolean
97
106
  ).returns(T.attached_class)
98
107
  end
99
108
  def self.new(
@@ -104,7 +113,10 @@ module ArkEmail
104
113
  # Map of recipient email to message info
105
114
  messages:,
106
115
  # Total emails in the batch
107
- total:
116
+ total:,
117
+ # Whether this batch was sent in sandbox mode. Only present (and true) for sandbox
118
+ # emails sent from @arkhq.io addresses.
119
+ sandbox: nil
108
120
  )
109
121
  end
110
122
 
@@ -118,7 +130,8 @@ module ArkEmail
118
130
  Symbol,
119
131
  ArkEmail::Models::EmailSendBatchResponse::Data::Message
120
132
  ],
121
- total: Integer
133
+ total: Integer,
134
+ sandbox: T::Boolean
122
135
  }
123
136
  )
124
137
  end
@@ -11,7 +11,7 @@ module ArkEmail
11
11
  T.any(ArkEmail::EmailSendParams, ArkEmail::Internal::AnyHash)
12
12
  end
13
13
 
14
- # Sender email address. Must be from a verified domain.
14
+ # Sender email address. Must be from a verified domain OR use sandbox mode.
15
15
  #
16
16
  # **Supported formats:**
17
17
  #
@@ -20,6 +20,10 @@ module ArkEmail
20
20
  # - With quoted name: `"Acme Support" <support@yourdomain.com>`
21
21
  #
22
22
  # The domain portion must match a verified sending domain in your account.
23
+ #
24
+ # **Sandbox mode:** Use `sandbox@arkhq.io` to send test emails without domain
25
+ # verification. Sandbox emails can only be sent to organization members and are
26
+ # limited to 10 per day.
23
27
  sig { returns(String) }
24
28
  attr_accessor :from
25
29
 
@@ -114,7 +118,7 @@ module ArkEmail
114
118
  ).returns(T.attached_class)
115
119
  end
116
120
  def self.new(
117
- # Sender email address. Must be from a verified domain.
121
+ # Sender email address. Must be from a verified domain OR use sandbox mode.
118
122
  #
119
123
  # **Supported formats:**
120
124
  #
@@ -123,6 +127,10 @@ module ArkEmail
123
127
  # - With quoted name: `"Acme Support" <support@yourdomain.com>`
124
128
  #
125
129
  # The domain portion must match a verified sending domain in your account.
130
+ #
131
+ # **Sandbox mode:** Use `sandbox@arkhq.io` to send test emails without domain
132
+ # verification. Sandbox emails can only be sent to organization members and are
133
+ # limited to 10 per day.
126
134
  from:,
127
135
  # Email subject line
128
136
  subject:,
@@ -82,13 +82,22 @@ module ArkEmail
82
82
  sig { params(message_id: String).void }
83
83
  attr_writer :message_id
84
84
 
85
+ # Whether this email was sent in sandbox mode. Only present (and true) for sandbox
86
+ # emails sent from @arkhq.io addresses.
87
+ sig { returns(T.nilable(T::Boolean)) }
88
+ attr_reader :sandbox
89
+
90
+ sig { params(sandbox: T::Boolean).void }
91
+ attr_writer :sandbox
92
+
85
93
  sig do
86
94
  params(
87
95
  id: String,
88
96
  status:
89
97
  ArkEmail::Models::EmailSendRawResponse::Data::Status::OrSymbol,
90
98
  to: T::Array[String],
91
- message_id: String
99
+ message_id: String,
100
+ sandbox: T::Boolean
92
101
  ).returns(T.attached_class)
93
102
  end
94
103
  def self.new(
@@ -99,7 +108,10 @@ module ArkEmail
99
108
  # List of recipient addresses
100
109
  to:,
101
110
  # SMTP Message-ID header value
102
- message_id: nil
111
+ message_id: nil,
112
+ # Whether this email was sent in sandbox mode. Only present (and true) for sandbox
113
+ # emails sent from @arkhq.io addresses.
114
+ sandbox: nil
103
115
  )
104
116
  end
105
117
 
@@ -110,7 +122,8 @@ module ArkEmail
110
122
  status:
111
123
  ArkEmail::Models::EmailSendRawResponse::Data::Status::TaggedSymbol,
112
124
  to: T::Array[String],
113
- message_id: String
125
+ message_id: String,
126
+ sandbox: T::Boolean
114
127
  }
115
128
  )
116
129
  end
@@ -82,12 +82,21 @@ module ArkEmail
82
82
  sig { params(message_id: String).void }
83
83
  attr_writer :message_id
84
84
 
85
+ # Whether this email was sent in sandbox mode. Only present (and true) for sandbox
86
+ # emails sent from @arkhq.io addresses.
87
+ sig { returns(T.nilable(T::Boolean)) }
88
+ attr_reader :sandbox
89
+
90
+ sig { params(sandbox: T::Boolean).void }
91
+ attr_writer :sandbox
92
+
85
93
  sig do
86
94
  params(
87
95
  id: String,
88
96
  status: ArkEmail::Models::EmailSendResponse::Data::Status::OrSymbol,
89
97
  to: T::Array[String],
90
- message_id: String
98
+ message_id: String,
99
+ sandbox: T::Boolean
91
100
  ).returns(T.attached_class)
92
101
  end
93
102
  def self.new(
@@ -98,7 +107,10 @@ module ArkEmail
98
107
  # List of recipient addresses
99
108
  to:,
100
109
  # SMTP Message-ID header value
101
- message_id: nil
110
+ message_id: nil,
111
+ # Whether this email was sent in sandbox mode. Only present (and true) for sandbox
112
+ # emails sent from @arkhq.io addresses.
113
+ sandbox: nil
102
114
  )
103
115
  end
104
116
 
@@ -109,7 +121,8 @@ module ArkEmail
109
121
  status:
110
122
  ArkEmail::Models::EmailSendResponse::Data::Status::TaggedSymbol,
111
123
  to: T::Array[String],
112
- message_id: String
124
+ message_id: String,
125
+ sandbox: T::Boolean
113
126
  }
114
127
  )
115
128
  end
@@ -83,15 +83,57 @@ module ArkEmail
83
83
  )
84
84
  end
85
85
 
86
- # Get the history of delivery attempts for an email, including SMTP response codes
87
- # and timestamps.
86
+ # Get the complete delivery history for an email, including SMTP response codes,
87
+ # timestamps, and current retry state.
88
+ #
89
+ # ## Response Fields
90
+ #
91
+ # ### Status
92
+ #
93
+ # The current status of the email:
94
+ #
95
+ # - `pending` - Awaiting first delivery attempt
96
+ # - `sent` - Successfully delivered to recipient server
97
+ # - `softfail` - Temporary failure, automatic retry scheduled
98
+ # - `hardfail` - Permanent failure, will not retry
99
+ # - `held` - Held for manual review
100
+ # - `bounced` - Bounced by recipient server
101
+ #
102
+ # ### Retry State
103
+ #
104
+ # When the email is in the delivery queue (`pending` or `softfail` status),
105
+ # `retryState` provides information about the retry schedule:
106
+ #
107
+ # - `attempt` - Current attempt number (0 = first attempt)
108
+ # - `maxAttempts` - Maximum attempts before hard-fail (typically 18)
109
+ # - `attemptsRemaining` - Attempts left before hard-fail
110
+ # - `nextRetryAt` - When the next retry is scheduled (Unix timestamp)
111
+ # - `processing` - Whether the email is currently being processed
112
+ # - `manual` - Whether this was triggered by a manual retry
113
+ #
114
+ # When the email has finished processing (`sent`, `hardfail`, `held`, `bounced`),
115
+ # `retryState` is `null`.
116
+ #
117
+ # ### Can Retry Manually
118
+ #
119
+ # Indicates whether you can call `POST /emails/{emailId}/retry` to manually retry
120
+ # the email. This is `true` when the raw message content is still available (not
121
+ # expired due to retention policy).
88
122
  sig do
89
123
  params(
90
124
  email_id: String,
91
125
  request_options: ArkEmail::RequestOptions::OrHash
92
126
  ).returns(ArkEmail::Models::EmailRetrieveDeliveriesResponse)
93
127
  end
94
- def retrieve_deliveries(email_id, request_options: {})
128
+ def retrieve_deliveries(
129
+ # Email identifier. Accepts multiple formats:
130
+ #
131
+ # - Message ID (numeric): `12345`
132
+ # - Message token: `aBc123XyZ`
133
+ # - Combined format: `msg_12345_aBc123XyZ`
134
+ email_id,
135
+ request_options: {}
136
+ )
95
137
  end
96
138
 
97
139
  # Retry delivery of a failed or soft-bounced email. Creates a new delivery
@@ -141,7 +183,8 @@ module ArkEmail
141
183
  ).returns(ArkEmail::Models::EmailSendResponse)
142
184
  end
143
185
  def send_(
144
- # Body param: Sender email address. Must be from a verified domain.
186
+ # Body param: Sender email address. Must be from a verified domain OR use sandbox
187
+ # mode.
145
188
  #
146
189
  # **Supported formats:**
147
190
  #
@@ -150,6 +193,10 @@ module ArkEmail
150
193
  # - With quoted name: `"Acme Support" <support@yourdomain.com>`
151
194
  #
152
195
  # The domain portion must match a verified sending domain in your account.
196
+ #
197
+ # **Sandbox mode:** Use `sandbox@arkhq.io` to send test emails without domain
198
+ # verification. Sandbox emails can only be sent to organization members and are
199
+ # limited to 10 per day.
153
200
  from:,
154
201
  # Body param: Email subject line
155
202
  subject:,
@@ -28,28 +28,43 @@ module ArkEmail
28
28
 
29
29
  type data =
30
30
  {
31
+ can_retry_manually: bool,
31
32
  deliveries: ::Array[ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Delivery],
32
- message_id: String,
33
- message_token: String
33
+ message_id: Integer,
34
+ message_token: String,
35
+ retry_state: ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::RetryState?,
36
+ status: ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::status
34
37
  }
35
38
 
36
39
  class Data < ArkEmail::Internal::Type::BaseModel
40
+ attr_accessor can_retry_manually: bool
41
+
37
42
  attr_accessor deliveries: ::Array[ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Delivery]
38
43
 
39
- attr_accessor message_id: String
44
+ attr_accessor message_id: Integer
40
45
 
41
46
  attr_accessor message_token: String
42
47
 
48
+ attr_accessor retry_state: ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::RetryState?
49
+
50
+ attr_accessor status: ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::status
51
+
43
52
  def initialize: (
53
+ can_retry_manually: bool,
44
54
  deliveries: ::Array[ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Delivery],
45
- message_id: String,
46
- message_token: String
55
+ message_id: Integer,
56
+ message_token: String,
57
+ retry_state: ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::RetryState?,
58
+ status: ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::status
47
59
  ) -> void
48
60
 
49
61
  def to_hash: -> {
62
+ can_retry_manually: bool,
50
63
  deliveries: ::Array[ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::Delivery],
51
- message_id: String,
52
- message_token: String
64
+ message_id: Integer,
65
+ message_token: String,
66
+ retry_state: ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::RetryState?,
67
+ status: ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::status
53
68
  }
54
69
 
55
70
  type delivery =
@@ -111,6 +126,69 @@ module ArkEmail
111
126
  sent_with_ssl: bool
112
127
  }
113
128
  end
129
+
130
+ type retry_state =
131
+ {
132
+ attempt: Integer,
133
+ attempts_remaining: Integer,
134
+ manual: bool,
135
+ max_attempts: Integer,
136
+ processing: bool,
137
+ next_retry_at: Float?,
138
+ next_retry_at_iso: Time?
139
+ }
140
+
141
+ class RetryState < ArkEmail::Internal::Type::BaseModel
142
+ attr_accessor attempt: Integer
143
+
144
+ attr_accessor attempts_remaining: Integer
145
+
146
+ attr_accessor manual: bool
147
+
148
+ attr_accessor max_attempts: Integer
149
+
150
+ attr_accessor processing: bool
151
+
152
+ attr_accessor next_retry_at: Float?
153
+
154
+ attr_accessor next_retry_at_iso: Time?
155
+
156
+ def initialize: (
157
+ attempt: Integer,
158
+ attempts_remaining: Integer,
159
+ manual: bool,
160
+ max_attempts: Integer,
161
+ processing: bool,
162
+ ?next_retry_at: Float?,
163
+ ?next_retry_at_iso: Time?
164
+ ) -> void
165
+
166
+ def to_hash: -> {
167
+ attempt: Integer,
168
+ attempts_remaining: Integer,
169
+ manual: bool,
170
+ max_attempts: Integer,
171
+ processing: bool,
172
+ next_retry_at: Float?,
173
+ next_retry_at_iso: Time?
174
+ }
175
+ end
176
+
177
+ type status =
178
+ :pending | :sent | :softfail | :hardfail | :held | :bounced
179
+
180
+ module Status
181
+ extend ArkEmail::Internal::Type::Enum
182
+
183
+ PENDING: :pending
184
+ SENT: :sent
185
+ SOFTFAIL: :softfail
186
+ HARDFAIL: :hardfail
187
+ HELD: :held
188
+ BOUNCED: :bounced
189
+
190
+ def self?.values: -> ::Array[ArkEmail::Models::EmailRetrieveDeliveriesResponse::Data::status]
191
+ end
114
192
  end
115
193
  end
116
194
  end
@@ -31,7 +31,8 @@ module ArkEmail
31
31
  accepted: Integer,
32
32
  failed: Integer,
33
33
  messages: ::Hash[Symbol, ArkEmail::Models::EmailSendBatchResponse::Data::Message],
34
- total: Integer
34
+ total: Integer,
35
+ sandbox: bool
35
36
  }
36
37
 
37
38
  class Data < ArkEmail::Internal::Type::BaseModel
@@ -43,18 +44,24 @@ module ArkEmail
43
44
 
44
45
  attr_accessor total: Integer
45
46
 
47
+ attr_reader sandbox: bool?
48
+
49
+ def sandbox=: (bool) -> bool
50
+
46
51
  def initialize: (
47
52
  accepted: Integer,
48
53
  failed: Integer,
49
54
  messages: ::Hash[Symbol, ArkEmail::Models::EmailSendBatchResponse::Data::Message],
50
- total: Integer
55
+ total: Integer,
56
+ ?sandbox: bool
51
57
  ) -> void
52
58
 
53
59
  def to_hash: -> {
54
60
  accepted: Integer,
55
61
  failed: Integer,
56
62
  messages: ::Hash[Symbol, ArkEmail::Models::EmailSendBatchResponse::Data::Message],
57
- total: Integer
63
+ total: Integer,
64
+ sandbox: bool
58
65
  }
59
66
 
60
67
  type message = { id: String, token: String }
@@ -31,7 +31,8 @@ module ArkEmail
31
31
  id: String,
32
32
  status: ArkEmail::Models::EmailSendRawResponse::Data::status,
33
33
  to: ::Array[String],
34
- message_id: String
34
+ message_id: String,
35
+ sandbox: bool
35
36
  }
36
37
 
37
38
  class Data < ArkEmail::Internal::Type::BaseModel
@@ -45,18 +46,24 @@ module ArkEmail
45
46
 
46
47
  def message_id=: (String) -> String
47
48
 
49
+ attr_reader sandbox: bool?
50
+
51
+ def sandbox=: (bool) -> bool
52
+
48
53
  def initialize: (
49
54
  id: String,
50
55
  status: ArkEmail::Models::EmailSendRawResponse::Data::status,
51
56
  to: ::Array[String],
52
- ?message_id: String
57
+ ?message_id: String,
58
+ ?sandbox: bool
53
59
  ) -> void
54
60
 
55
61
  def to_hash: -> {
56
62
  id: String,
57
63
  status: ArkEmail::Models::EmailSendRawResponse::Data::status,
58
64
  to: ::Array[String],
59
- message_id: String
65
+ message_id: String,
66
+ sandbox: bool
60
67
  }
61
68
 
62
69
  type status = :pending | :sent
@@ -31,7 +31,8 @@ module ArkEmail
31
31
  id: String,
32
32
  status: ArkEmail::Models::EmailSendResponse::Data::status,
33
33
  to: ::Array[String],
34
- message_id: String
34
+ message_id: String,
35
+ sandbox: bool
35
36
  }
36
37
 
37
38
  class Data < ArkEmail::Internal::Type::BaseModel
@@ -45,18 +46,24 @@ module ArkEmail
45
46
 
46
47
  def message_id=: (String) -> String
47
48
 
49
+ attr_reader sandbox: bool?
50
+
51
+ def sandbox=: (bool) -> bool
52
+
48
53
  def initialize: (
49
54
  id: String,
50
55
  status: ArkEmail::Models::EmailSendResponse::Data::status,
51
56
  to: ::Array[String],
52
- ?message_id: String
57
+ ?message_id: String,
58
+ ?sandbox: bool
53
59
  ) -> void
54
60
 
55
61
  def to_hash: -> {
56
62
  id: String,
57
63
  status: ArkEmail::Models::EmailSendResponse::Data::status,
58
64
  to: ::Array[String],
59
- message_id: String
65
+ message_id: String,
66
+ sandbox: bool
60
67
  }
61
68
 
62
69
  type status = :pending | :sent
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ark-email
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ark
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-01-20 00:00:00.000000000 Z
11
+ date: 2026-01-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cgi