• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

stripe / stripe-java / #16707

14 Dec 2024 12:12AM UTC coverage: 15.91% (-0.08%) from 15.988%
#16707

Pull #1931

github

web-flow
Merge 90c2dfd77 into cf528f2c8
Pull Request #1931: Update generated code

43 of 1442 new or added lines in 28 files covered. (2.98%)

137 existing lines in 17 files now uncovered.

18625 of 117068 relevant lines covered (15.91%)

0.16 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

32.88
/src/main/java/com/stripe/model/Dispute.java
1
// File generated from our OpenAPI spec
2
package com.stripe.model;
3

4
import com.google.gson.annotations.SerializedName;
5
import com.stripe.exception.StripeException;
6
import com.stripe.net.ApiRequest;
7
import com.stripe.net.ApiRequestParams;
8
import com.stripe.net.ApiResource;
9
import com.stripe.net.BaseAddress;
10
import com.stripe.net.RequestOptions;
11
import com.stripe.net.StripeResponseGetter;
12
import com.stripe.param.DisputeCloseParams;
13
import com.stripe.param.DisputeListParams;
14
import com.stripe.param.DisputeRetrieveParams;
15
import com.stripe.param.DisputeUpdateParams;
16
import java.util.List;
17
import java.util.Map;
18
import lombok.EqualsAndHashCode;
19
import lombok.Getter;
20
import lombok.Setter;
21

22
/**
23
 * A dispute occurs when a customer questions your charge with their card issuer. When this happens,
24
 * you have the opportunity to respond to the dispute with evidence that shows that the charge is
25
 * legitimate.
26
 *
27
 * <p>Related guide: <a href="https://stripe.com/docs/disputes">Disputes and fraud</a>
28
 */
29
@Getter
30
@Setter
31
@EqualsAndHashCode(callSuper = false)
32
public class Dispute extends ApiResource
1✔
33
    implements MetadataStore<Dispute>, BalanceTransactionSource {
34
  /**
35
   * Disputed amount. Usually the amount of the charge, but it can differ (usually because of
36
   * currency fluctuation or because only part of the order is disputed).
37
   */
38
  @SerializedName("amount")
39
  Long amount;
40

41
  /**
42
   * List of zero, one, or two balance transactions that show funds withdrawn and reinstated to your
43
   * Stripe account as a result of this dispute.
44
   */
45
  @SerializedName("balance_transactions")
46
  List<BalanceTransaction> balanceTransactions;
47

48
  /** ID of the charge that's disputed. */
49
  @SerializedName("charge")
50
  @Getter(lombok.AccessLevel.NONE)
51
  @Setter(lombok.AccessLevel.NONE)
52
  ExpandableField<Charge> charge;
53

54
  /** Time at which the object was created. Measured in seconds since the Unix epoch. */
55
  @SerializedName("created")
56
  Long created;
57

58
  /**
59
   * Three-letter <a href="https://www.iso.org/iso-4217-currency-codes.html">ISO currency code</a>,
60
   * in lowercase. Must be a <a href="https://stripe.com/docs/currencies">supported currency</a>.
61
   */
62
  @SerializedName("currency")
63
  String currency;
64

65
  /** List of eligibility types that are included in {@code enhanced_evidence}. */
66
  @SerializedName("enhanced_eligibility_types")
67
  List<String> enhancedEligibilityTypes;
68

69
  @SerializedName("evidence")
70
  Evidence evidence;
71

72
  @SerializedName("evidence_details")
73
  EvidenceDetails evidenceDetails;
74

75
  /** Unique identifier for the object. */
76
  @Getter(onMethod_ = {@Override})
77
  @SerializedName("id")
78
  String id;
79

80
  /**
81
   * If true, it's still possible to refund the disputed payment. After the payment has been fully
82
   * refunded, no further funds are withdrawn from your Stripe account as a result of this dispute.
83
   */
84
  @SerializedName("is_charge_refundable")
85
  Boolean isChargeRefundable;
86

87
  /**
88
   * Has the value {@code true} if the object exists in live mode or the value {@code false} if the
89
   * object exists in test mode.
90
   */
91
  @SerializedName("livemode")
92
  Boolean livemode;
93

94
  /**
95
   * Set of <a href="https://stripe.com/docs/api/metadata">key-value pairs</a> that you can attach
96
   * to an object. This can be useful for storing additional information about the object in a
97
   * structured format.
98
   */
99
  @Getter(onMethod_ = {@Override})
100
  @SerializedName("metadata")
101
  Map<String, String> metadata;
102

103
  /** Network-dependent reason code for the dispute. */
104
  @SerializedName("network_reason_code")
105
  String networkReasonCode;
106

107
  /**
108
   * String representing the object's type. Objects of the same type share the same value.
109
   *
110
   * <p>Equal to {@code dispute}.
111
   */
112
  @SerializedName("object")
113
  String object;
114

115
  /** ID of the PaymentIntent that's disputed. */
116
  @SerializedName("payment_intent")
117
  @Getter(lombok.AccessLevel.NONE)
118
  @Setter(lombok.AccessLevel.NONE)
119
  ExpandableField<PaymentIntent> paymentIntent;
120

121
  @SerializedName("payment_method_details")
122
  PaymentMethodDetails paymentMethodDetails;
123

124
  /**
125
   * Reason given by cardholder for dispute. Possible values are {@code bank_cannot_process}, {@code
126
   * check_returned}, {@code credit_not_processed}, {@code customer_initiated}, {@code
127
   * debit_not_authorized}, {@code duplicate}, {@code fraudulent}, {@code general}, {@code
128
   * incorrect_account_details}, {@code insufficient_funds}, {@code product_not_received}, {@code
129
   * product_unacceptable}, {@code subscription_canceled}, or {@code unrecognized}. Learn more about
130
   * <a href="https://stripe.com/docs/disputes/categories">dispute reasons</a>.
131
   */
132
  @SerializedName("reason")
133
  String reason;
134

135
  /**
136
   * Current status of dispute. Possible values are {@code warning_needs_response}, {@code
137
   * warning_under_review}, {@code warning_closed}, {@code needs_response}, {@code under_review},
138
   * {@code won}, or {@code lost}.
139
   *
140
   * <p>One of {@code lost}, {@code needs_response}, {@code under_review}, {@code warning_closed},
141
   * {@code warning_needs_response}, {@code warning_under_review}, or {@code won}.
142
   */
143
  @SerializedName("status")
144
  String status;
145

146
  /** Get ID of expandable {@code charge} object. */
147
  public String getCharge() {
148
    return (this.charge != null) ? this.charge.getId() : null;
1✔
149
  }
150

151
  public void setCharge(String id) {
152
    this.charge = ApiResource.setExpandableFieldId(id, this.charge);
×
153
  }
×
154

155
  /** Get expanded {@code charge}. */
156
  public Charge getChargeObject() {
157
    return (this.charge != null) ? this.charge.getExpanded() : null;
1✔
158
  }
159

160
  public void setChargeObject(Charge expandableObject) {
161
    this.charge = new ExpandableField<Charge>(expandableObject.getId(), expandableObject);
×
162
  }
×
163

164
  /** Get ID of expandable {@code paymentIntent} object. */
165
  public String getPaymentIntent() {
166
    return (this.paymentIntent != null) ? this.paymentIntent.getId() : null;
×
167
  }
168

169
  public void setPaymentIntent(String id) {
170
    this.paymentIntent = ApiResource.setExpandableFieldId(id, this.paymentIntent);
×
171
  }
×
172

173
  /** Get expanded {@code paymentIntent}. */
174
  public PaymentIntent getPaymentIntentObject() {
175
    return (this.paymentIntent != null) ? this.paymentIntent.getExpanded() : null;
×
176
  }
177

178
  public void setPaymentIntentObject(PaymentIntent expandableObject) {
179
    this.paymentIntent =
×
180
        new ExpandableField<PaymentIntent>(expandableObject.getId(), expandableObject);
×
181
  }
×
182

183
  /**
184
   * Closing the dispute for a charge indicates that you do not have any evidence to submit and are
185
   * essentially dismissing the dispute, acknowledging it as lost.
186
   *
187
   * <p>The status of the dispute will change from {@code needs_response} to {@code lost}.
188
   * <em>Closing a dispute is irreversible</em>.
189
   */
190
  public Dispute close() throws StripeException {
191
    return close((Map<String, Object>) null, (RequestOptions) null);
1✔
192
  }
193

194
  /**
195
   * Closing the dispute for a charge indicates that you do not have any evidence to submit and are
196
   * essentially dismissing the dispute, acknowledging it as lost.
197
   *
198
   * <p>The status of the dispute will change from {@code needs_response} to {@code lost}.
199
   * <em>Closing a dispute is irreversible</em>.
200
   */
201
  public Dispute close(RequestOptions options) throws StripeException {
202
    return close((Map<String, Object>) null, options);
×
203
  }
204

205
  /**
206
   * Closing the dispute for a charge indicates that you do not have any evidence to submit and are
207
   * essentially dismissing the dispute, acknowledging it as lost.
208
   *
209
   * <p>The status of the dispute will change from {@code needs_response} to {@code lost}.
210
   * <em>Closing a dispute is irreversible</em>.
211
   */
212
  public Dispute close(Map<String, Object> params) throws StripeException {
213
    return close(params, (RequestOptions) null);
×
214
  }
215

216
  /**
217
   * Closing the dispute for a charge indicates that you do not have any evidence to submit and are
218
   * essentially dismissing the dispute, acknowledging it as lost.
219
   *
220
   * <p>The status of the dispute will change from {@code needs_response} to {@code lost}.
221
   * <em>Closing a dispute is irreversible</em>.
222
   */
223
  public Dispute close(Map<String, Object> params, RequestOptions options) throws StripeException {
224
    String path = String.format("/v1/disputes/%s/close", ApiResource.urlEncodeId(this.getId()));
1✔
225
    ApiRequest request =
1✔
226
        new ApiRequest(BaseAddress.API, ApiResource.RequestMethod.POST, path, params, options);
227
    return getResponseGetter().request(request, Dispute.class);
1✔
228
  }
229

230
  /**
231
   * Closing the dispute for a charge indicates that you do not have any evidence to submit and are
232
   * essentially dismissing the dispute, acknowledging it as lost.
233
   *
234
   * <p>The status of the dispute will change from {@code needs_response} to {@code lost}.
235
   * <em>Closing a dispute is irreversible</em>.
236
   */
237
  public Dispute close(DisputeCloseParams params) throws StripeException {
238
    return close(params, (RequestOptions) null);
1✔
239
  }
240

241
  /**
242
   * Closing the dispute for a charge indicates that you do not have any evidence to submit and are
243
   * essentially dismissing the dispute, acknowledging it as lost.
244
   *
245
   * <p>The status of the dispute will change from {@code needs_response} to {@code lost}.
246
   * <em>Closing a dispute is irreversible</em>.
247
   */
248
  public Dispute close(DisputeCloseParams params, RequestOptions options) throws StripeException {
249
    String path = String.format("/v1/disputes/%s/close", ApiResource.urlEncodeId(this.getId()));
1✔
250
    ApiResource.checkNullTypedParams(path, params);
1✔
251
    ApiRequest request =
1✔
252
        new ApiRequest(
253
            BaseAddress.API,
254
            ApiResource.RequestMethod.POST,
255
            path,
256
            ApiRequestParams.paramsToMap(params),
1✔
257
            options);
258
    return getResponseGetter().request(request, Dispute.class);
1✔
259
  }
260

261
  /** Returns a list of your disputes. */
262
  public static DisputeCollection list(Map<String, Object> params) throws StripeException {
263
    return list(params, (RequestOptions) null);
1✔
264
  }
265

266
  /** Returns a list of your disputes. */
267
  public static DisputeCollection list(Map<String, Object> params, RequestOptions options)
268
      throws StripeException {
269
    String path = "/v1/disputes";
1✔
270
    ApiRequest request =
1✔
271
        new ApiRequest(BaseAddress.API, ApiResource.RequestMethod.GET, path, params, options);
272
    return getGlobalResponseGetter().request(request, DisputeCollection.class);
1✔
273
  }
274

275
  /** Returns a list of your disputes. */
276
  public static DisputeCollection list(DisputeListParams params) throws StripeException {
277
    return list(params, (RequestOptions) null);
1✔
278
  }
279

280
  /** Returns a list of your disputes. */
281
  public static DisputeCollection list(DisputeListParams params, RequestOptions options)
282
      throws StripeException {
283
    String path = "/v1/disputes";
1✔
284
    ApiResource.checkNullTypedParams(path, params);
1✔
285
    ApiRequest request =
1✔
286
        new ApiRequest(
287
            BaseAddress.API,
288
            ApiResource.RequestMethod.GET,
289
            path,
290
            ApiRequestParams.paramsToMap(params),
1✔
291
            options);
292
    return getGlobalResponseGetter().request(request, DisputeCollection.class);
1✔
293
  }
294

295
  /** Retrieves the dispute with the given ID. */
296
  public static Dispute retrieve(String dispute) throws StripeException {
297
    return retrieve(dispute, (Map<String, Object>) null, (RequestOptions) null);
1✔
298
  }
299

300
  /** Retrieves the dispute with the given ID. */
301
  public static Dispute retrieve(String dispute, RequestOptions options) throws StripeException {
302
    return retrieve(dispute, (Map<String, Object>) null, options);
×
303
  }
304

305
  /** Retrieves the dispute with the given ID. */
306
  public static Dispute retrieve(String dispute, Map<String, Object> params, RequestOptions options)
307
      throws StripeException {
308
    String path = String.format("/v1/disputes/%s", ApiResource.urlEncodeId(dispute));
1✔
309
    ApiRequest request =
1✔
310
        new ApiRequest(BaseAddress.API, ApiResource.RequestMethod.GET, path, params, options);
311
    return getGlobalResponseGetter().request(request, Dispute.class);
1✔
312
  }
313

314
  /** Retrieves the dispute with the given ID. */
315
  public static Dispute retrieve(
316
      String dispute, DisputeRetrieveParams params, RequestOptions options) throws StripeException {
317
    String path = String.format("/v1/disputes/%s", ApiResource.urlEncodeId(dispute));
×
318
    ApiResource.checkNullTypedParams(path, params);
×
319
    ApiRequest request =
×
320
        new ApiRequest(
321
            BaseAddress.API,
322
            ApiResource.RequestMethod.GET,
323
            path,
324
            ApiRequestParams.paramsToMap(params),
×
325
            options);
326
    return getGlobalResponseGetter().request(request, Dispute.class);
×
327
  }
328

329
  /**
330
   * When you get a dispute, contacting your customer is always the best first step. If that doesn’t
331
   * work, you can submit evidence to help us resolve the dispute in your favor. You can do this in
332
   * your <a href="https://dashboard.stripe.com/disputes">dashboard</a>, but if you prefer, you can
333
   * use the API to submit evidence programmatically.
334
   *
335
   * <p>Depending on your dispute type, different evidence fields will give you a better chance of
336
   * winning your dispute. To figure out which evidence fields to provide, see our <a
337
   * href="https://stripe.com/docs/disputes/categories">guide to dispute types</a>.
338
   */
339
  @Override
340
  public Dispute update(Map<String, Object> params) throws StripeException {
341
    return update(params, (RequestOptions) null);
1✔
342
  }
343

344
  /**
345
   * When you get a dispute, contacting your customer is always the best first step. If that doesn’t
346
   * work, you can submit evidence to help us resolve the dispute in your favor. You can do this in
347
   * your <a href="https://dashboard.stripe.com/disputes">dashboard</a>, but if you prefer, you can
348
   * use the API to submit evidence programmatically.
349
   *
350
   * <p>Depending on your dispute type, different evidence fields will give you a better chance of
351
   * winning your dispute. To figure out which evidence fields to provide, see our <a
352
   * href="https://stripe.com/docs/disputes/categories">guide to dispute types</a>.
353
   */
354
  @Override
355
  public Dispute update(Map<String, Object> params, RequestOptions options) throws StripeException {
356
    String path = String.format("/v1/disputes/%s", ApiResource.urlEncodeId(this.getId()));
1✔
357
    ApiRequest request =
1✔
358
        new ApiRequest(BaseAddress.API, ApiResource.RequestMethod.POST, path, params, options);
359
    return getResponseGetter().request(request, Dispute.class);
1✔
360
  }
361

362
  /**
363
   * When you get a dispute, contacting your customer is always the best first step. If that doesn’t
364
   * work, you can submit evidence to help us resolve the dispute in your favor. You can do this in
365
   * your <a href="https://dashboard.stripe.com/disputes">dashboard</a>, but if you prefer, you can
366
   * use the API to submit evidence programmatically.
367
   *
368
   * <p>Depending on your dispute type, different evidence fields will give you a better chance of
369
   * winning your dispute. To figure out which evidence fields to provide, see our <a
370
   * href="https://stripe.com/docs/disputes/categories">guide to dispute types</a>.
371
   */
372
  public Dispute update(DisputeUpdateParams params) throws StripeException {
373
    return update(params, (RequestOptions) null);
1✔
374
  }
375

376
  /**
377
   * When you get a dispute, contacting your customer is always the best first step. If that doesn’t
378
   * work, you can submit evidence to help us resolve the dispute in your favor. You can do this in
379
   * your <a href="https://dashboard.stripe.com/disputes">dashboard</a>, but if you prefer, you can
380
   * use the API to submit evidence programmatically.
381
   *
382
   * <p>Depending on your dispute type, different evidence fields will give you a better chance of
383
   * winning your dispute. To figure out which evidence fields to provide, see our <a
384
   * href="https://stripe.com/docs/disputes/categories">guide to dispute types</a>.
385
   */
386
  public Dispute update(DisputeUpdateParams params, RequestOptions options) throws StripeException {
387
    String path = String.format("/v1/disputes/%s", ApiResource.urlEncodeId(this.getId()));
1✔
388
    ApiResource.checkNullTypedParams(path, params);
1✔
389
    ApiRequest request =
1✔
390
        new ApiRequest(
391
            BaseAddress.API,
392
            ApiResource.RequestMethod.POST,
393
            path,
394
            ApiRequestParams.paramsToMap(params),
1✔
395
            options);
396
    return getResponseGetter().request(request, Dispute.class);
1✔
397
  }
398

399
  /**
400
   * For more details about Evidence, please refer to the <a href="https://docs.stripe.com/api">API
401
   * Reference.</a>
402
   */
403
  @Getter
404
  @Setter
405
  @EqualsAndHashCode(callSuper = false)
406
  public static class Evidence extends StripeObject {
1✔
407
    /**
408
     * Any server or activity logs showing proof that the customer accessed or downloaded the
409
     * purchased digital product. This information should include IP addresses, corresponding
410
     * timestamps, and any detailed recorded activity.
411
     */
412
    @SerializedName("access_activity_log")
413
    String accessActivityLog;
414

415
    /** The billing address provided by the customer. */
416
    @SerializedName("billing_address")
417
    String billingAddress;
418

419
    /**
420
     * (ID of a <a href="https://stripe.com/docs/guides/file-upload">file upload</a>) Your
421
     * subscription cancellation policy, as shown to the customer.
422
     */
423
    @SerializedName("cancellation_policy")
424
    @Getter(lombok.AccessLevel.NONE)
425
    @Setter(lombok.AccessLevel.NONE)
426
    ExpandableField<File> cancellationPolicy;
427

428
    /**
429
     * An explanation of how and when the customer was shown your refund policy prior to purchase.
430
     */
431
    @SerializedName("cancellation_policy_disclosure")
432
    String cancellationPolicyDisclosure;
433

434
    /** A justification for why the customer's subscription was not canceled. */
435
    @SerializedName("cancellation_rebuttal")
436
    String cancellationRebuttal;
437

438
    /**
439
     * (ID of a <a href="https://stripe.com/docs/guides/file-upload">file upload</a>) Any
440
     * communication with the customer that you feel is relevant to your case. Examples include
441
     * emails proving that the customer received the product or service, or demonstrating their use
442
     * of or satisfaction with the product or service.
443
     */
444
    @SerializedName("customer_communication")
445
    @Getter(lombok.AccessLevel.NONE)
446
    @Setter(lombok.AccessLevel.NONE)
447
    ExpandableField<File> customerCommunication;
448

449
    /** The email address of the customer. */
450
    @SerializedName("customer_email_address")
451
    String customerEmailAddress;
452

453
    /** The name of the customer. */
454
    @SerializedName("customer_name")
455
    String customerName;
456

457
    /** The IP address that the customer used when making the purchase. */
458
    @SerializedName("customer_purchase_ip")
459
    String customerPurchaseIp;
460

461
    /**
462
     * (ID of a <a href="https://stripe.com/docs/guides/file-upload">file upload</a>) A relevant
463
     * document or contract showing the customer's signature.
464
     */
465
    @SerializedName("customer_signature")
466
    @Getter(lombok.AccessLevel.NONE)
467
    @Setter(lombok.AccessLevel.NONE)
468
    ExpandableField<File> customerSignature;
469

470
    /**
471
     * (ID of a <a href="https://stripe.com/docs/guides/file-upload">file upload</a>) Documentation
472
     * for the prior charge that can uniquely identify the charge, such as a receipt, shipping
473
     * label, work order, etc. This document should be paired with a similar document from the
474
     * disputed payment that proves the two payments are separate.
475
     */
476
    @SerializedName("duplicate_charge_documentation")
477
    @Getter(lombok.AccessLevel.NONE)
478
    @Setter(lombok.AccessLevel.NONE)
479
    ExpandableField<File> duplicateChargeDocumentation;
480

481
    /**
482
     * An explanation of the difference between the disputed charge versus the prior charge that
483
     * appears to be a duplicate.
484
     */
485
    @SerializedName("duplicate_charge_explanation")
486
    String duplicateChargeExplanation;
487

488
    /**
489
     * The Stripe ID for the prior charge which appears to be a duplicate of the disputed charge.
490
     */
491
    @SerializedName("duplicate_charge_id")
492
    String duplicateChargeId;
493

494
    @SerializedName("enhanced_evidence")
495
    EnhancedEvidence enhancedEvidence;
496

497
    /** A description of the product or service that was sold. */
498
    @SerializedName("product_description")
499
    String productDescription;
500

501
    /**
502
     * (ID of a <a href="https://stripe.com/docs/guides/file-upload">file upload</a>) Any receipt or
503
     * message sent to the customer notifying them of the charge.
504
     */
505
    @SerializedName("receipt")
506
    @Getter(lombok.AccessLevel.NONE)
507
    @Setter(lombok.AccessLevel.NONE)
508
    ExpandableField<File> receipt;
509

510
    /**
511
     * (ID of a <a href="https://stripe.com/docs/guides/file-upload">file upload</a>) Your refund
512
     * policy, as shown to the customer.
513
     */
514
    @SerializedName("refund_policy")
515
    @Getter(lombok.AccessLevel.NONE)
516
    @Setter(lombok.AccessLevel.NONE)
517
    ExpandableField<File> refundPolicy;
518

519
    /**
520
     * Documentation demonstrating that the customer was shown your refund policy prior to purchase.
521
     */
522
    @SerializedName("refund_policy_disclosure")
523
    String refundPolicyDisclosure;
524

525
    /** A justification for why the customer is not entitled to a refund. */
526
    @SerializedName("refund_refusal_explanation")
527
    String refundRefusalExplanation;
528

529
    /**
530
     * The date on which the customer received or began receiving the purchased service, in a clear
531
     * human-readable format.
532
     */
533
    @SerializedName("service_date")
534
    String serviceDate;
535

536
    /**
537
     * (ID of a <a href="https://stripe.com/docs/guides/file-upload">file upload</a>) Documentation
538
     * showing proof that a service was provided to the customer. This could include a copy of a
539
     * signed contract, work order, or other form of written agreement.
540
     */
541
    @SerializedName("service_documentation")
542
    @Getter(lombok.AccessLevel.NONE)
543
    @Setter(lombok.AccessLevel.NONE)
544
    ExpandableField<File> serviceDocumentation;
545

546
    /**
547
     * The address to which a physical product was shipped. You should try to include as complete
548
     * address information as possible.
549
     */
550
    @SerializedName("shipping_address")
551
    String shippingAddress;
552

553
    /**
554
     * The delivery service that shipped a physical product, such as Fedex, UPS, USPS, etc. If
555
     * multiple carriers were used for this purchase, please separate them with commas.
556
     */
557
    @SerializedName("shipping_carrier")
558
    String shippingCarrier;
559

560
    /**
561
     * The date on which a physical product began its route to the shipping address, in a clear
562
     * human-readable format.
563
     */
564
    @SerializedName("shipping_date")
565
    String shippingDate;
566

567
    /**
568
     * (ID of a <a href="https://stripe.com/docs/guides/file-upload">file upload</a>) Documentation
569
     * showing proof that a product was shipped to the customer at the same address the customer
570
     * provided to you. This could include a copy of the shipment receipt, shipping label, etc. It
571
     * should show the customer's full shipping address, if possible.
572
     */
573
    @SerializedName("shipping_documentation")
574
    @Getter(lombok.AccessLevel.NONE)
575
    @Setter(lombok.AccessLevel.NONE)
576
    ExpandableField<File> shippingDocumentation;
577

578
    /**
579
     * The tracking number for a physical product, obtained from the delivery service. If multiple
580
     * tracking numbers were generated for this purchase, please separate them with commas.
581
     */
582
    @SerializedName("shipping_tracking_number")
583
    String shippingTrackingNumber;
584

585
    /**
586
     * (ID of a <a href="https://stripe.com/docs/guides/file-upload">file upload</a>) Any additional
587
     * evidence or statements.
588
     */
589
    @SerializedName("uncategorized_file")
590
    @Getter(lombok.AccessLevel.NONE)
591
    @Setter(lombok.AccessLevel.NONE)
592
    ExpandableField<File> uncategorizedFile;
593

594
    /** Any additional evidence or statements. */
595
    @SerializedName("uncategorized_text")
596
    String uncategorizedText;
597

598
    /** Get ID of expandable {@code cancellationPolicy} object. */
599
    public String getCancellationPolicy() {
600
      return (this.cancellationPolicy != null) ? this.cancellationPolicy.getId() : null;
×
601
    }
602

603
    public void setCancellationPolicy(String id) {
604
      this.cancellationPolicy = ApiResource.setExpandableFieldId(id, this.cancellationPolicy);
×
605
    }
×
606

607
    /** Get expanded {@code cancellationPolicy}. */
608
    public File getCancellationPolicyObject() {
609
      return (this.cancellationPolicy != null) ? this.cancellationPolicy.getExpanded() : null;
×
610
    }
611

612
    public void setCancellationPolicyObject(File expandableObject) {
613
      this.cancellationPolicy =
×
614
          new ExpandableField<File>(expandableObject.getId(), expandableObject);
×
615
    }
×
616

617
    /** Get ID of expandable {@code customerCommunication} object. */
618
    public String getCustomerCommunication() {
619
      return (this.customerCommunication != null) ? this.customerCommunication.getId() : null;
×
620
    }
621

622
    public void setCustomerCommunication(String id) {
623
      this.customerCommunication = ApiResource.setExpandableFieldId(id, this.customerCommunication);
×
624
    }
×
625

626
    /** Get expanded {@code customerCommunication}. */
627
    public File getCustomerCommunicationObject() {
628
      return (this.customerCommunication != null) ? this.customerCommunication.getExpanded() : null;
×
629
    }
630

631
    public void setCustomerCommunicationObject(File expandableObject) {
632
      this.customerCommunication =
×
633
          new ExpandableField<File>(expandableObject.getId(), expandableObject);
×
634
    }
×
635

636
    /** Get ID of expandable {@code customerSignature} object. */
637
    public String getCustomerSignature() {
638
      return (this.customerSignature != null) ? this.customerSignature.getId() : null;
×
639
    }
640

641
    public void setCustomerSignature(String id) {
642
      this.customerSignature = ApiResource.setExpandableFieldId(id, this.customerSignature);
×
643
    }
×
644

645
    /** Get expanded {@code customerSignature}. */
646
    public File getCustomerSignatureObject() {
647
      return (this.customerSignature != null) ? this.customerSignature.getExpanded() : null;
×
648
    }
649

650
    public void setCustomerSignatureObject(File expandableObject) {
651
      this.customerSignature =
×
652
          new ExpandableField<File>(expandableObject.getId(), expandableObject);
×
653
    }
×
654

655
    /** Get ID of expandable {@code duplicateChargeDocumentation} object. */
656
    public String getDuplicateChargeDocumentation() {
657
      return (this.duplicateChargeDocumentation != null)
×
658
          ? this.duplicateChargeDocumentation.getId()
×
659
          : null;
×
660
    }
661

662
    public void setDuplicateChargeDocumentation(String id) {
663
      this.duplicateChargeDocumentation =
×
664
          ApiResource.setExpandableFieldId(id, this.duplicateChargeDocumentation);
×
665
    }
×
666

667
    /** Get expanded {@code duplicateChargeDocumentation}. */
668
    public File getDuplicateChargeDocumentationObject() {
669
      return (this.duplicateChargeDocumentation != null)
×
670
          ? this.duplicateChargeDocumentation.getExpanded()
×
671
          : null;
×
672
    }
673

674
    public void setDuplicateChargeDocumentationObject(File expandableObject) {
675
      this.duplicateChargeDocumentation =
×
676
          new ExpandableField<File>(expandableObject.getId(), expandableObject);
×
677
    }
×
678

679
    /** Get ID of expandable {@code receipt} object. */
680
    public String getReceipt() {
681
      return (this.receipt != null) ? this.receipt.getId() : null;
×
682
    }
683

684
    public void setReceipt(String id) {
685
      this.receipt = ApiResource.setExpandableFieldId(id, this.receipt);
×
686
    }
×
687

688
    /** Get expanded {@code receipt}. */
689
    public File getReceiptObject() {
690
      return (this.receipt != null) ? this.receipt.getExpanded() : null;
×
691
    }
692

693
    public void setReceiptObject(File expandableObject) {
694
      this.receipt = new ExpandableField<File>(expandableObject.getId(), expandableObject);
×
695
    }
×
696

697
    /** Get ID of expandable {@code refundPolicy} object. */
698
    public String getRefundPolicy() {
699
      return (this.refundPolicy != null) ? this.refundPolicy.getId() : null;
×
700
    }
701

702
    public void setRefundPolicy(String id) {
703
      this.refundPolicy = ApiResource.setExpandableFieldId(id, this.refundPolicy);
×
704
    }
×
705

706
    /** Get expanded {@code refundPolicy}. */
707
    public File getRefundPolicyObject() {
708
      return (this.refundPolicy != null) ? this.refundPolicy.getExpanded() : null;
×
709
    }
710

711
    public void setRefundPolicyObject(File expandableObject) {
712
      this.refundPolicy = new ExpandableField<File>(expandableObject.getId(), expandableObject);
×
713
    }
×
714

715
    /** Get ID of expandable {@code serviceDocumentation} object. */
716
    public String getServiceDocumentation() {
717
      return (this.serviceDocumentation != null) ? this.serviceDocumentation.getId() : null;
×
718
    }
719

720
    public void setServiceDocumentation(String id) {
721
      this.serviceDocumentation = ApiResource.setExpandableFieldId(id, this.serviceDocumentation);
×
722
    }
×
723

724
    /** Get expanded {@code serviceDocumentation}. */
725
    public File getServiceDocumentationObject() {
726
      return (this.serviceDocumentation != null) ? this.serviceDocumentation.getExpanded() : null;
×
727
    }
728

729
    public void setServiceDocumentationObject(File expandableObject) {
730
      this.serviceDocumentation =
×
731
          new ExpandableField<File>(expandableObject.getId(), expandableObject);
×
732
    }
×
733

734
    /** Get ID of expandable {@code shippingDocumentation} object. */
735
    public String getShippingDocumentation() {
736
      return (this.shippingDocumentation != null) ? this.shippingDocumentation.getId() : null;
×
737
    }
738

739
    public void setShippingDocumentation(String id) {
740
      this.shippingDocumentation = ApiResource.setExpandableFieldId(id, this.shippingDocumentation);
×
741
    }
×
742

743
    /** Get expanded {@code shippingDocumentation}. */
744
    public File getShippingDocumentationObject() {
745
      return (this.shippingDocumentation != null) ? this.shippingDocumentation.getExpanded() : null;
×
746
    }
747

748
    public void setShippingDocumentationObject(File expandableObject) {
749
      this.shippingDocumentation =
×
750
          new ExpandableField<File>(expandableObject.getId(), expandableObject);
×
751
    }
×
752

753
    /** Get ID of expandable {@code uncategorizedFile} object. */
754
    public String getUncategorizedFile() {
755
      return (this.uncategorizedFile != null) ? this.uncategorizedFile.getId() : null;
×
756
    }
757

758
    public void setUncategorizedFile(String id) {
759
      this.uncategorizedFile = ApiResource.setExpandableFieldId(id, this.uncategorizedFile);
×
760
    }
×
761

762
    /** Get expanded {@code uncategorizedFile}. */
763
    public File getUncategorizedFileObject() {
764
      return (this.uncategorizedFile != null) ? this.uncategorizedFile.getExpanded() : null;
×
765
    }
766

767
    public void setUncategorizedFileObject(File expandableObject) {
768
      this.uncategorizedFile =
×
769
          new ExpandableField<File>(expandableObject.getId(), expandableObject);
×
770
    }
×
771

772
    /**
773
     * For more details about EnhancedEvidence, please refer to the <a
774
     * href="https://docs.stripe.com/api">API Reference.</a>
775
     */
776
    @Getter
777
    @Setter
778
    @EqualsAndHashCode(callSuper = false)
779
    public static class EnhancedEvidence extends StripeObject {
×
780
      @SerializedName("visa_compelling_evidence_3")
781
      VisaCompellingEvidence3 visaCompellingEvidence3;
782

783
      @SerializedName("visa_compliance")
784
      VisaCompliance visaCompliance;
785

786
      /**
787
       * For more details about VisaCompellingEvidence3, please refer to the <a
788
       * href="https://docs.stripe.com/api">API Reference.</a>
789
       */
790
      @Getter
791
      @Setter
792
      @EqualsAndHashCode(callSuper = false)
793
      public static class VisaCompellingEvidence3 extends StripeObject {
×
794
        /** Disputed transaction details for Visa Compelling Evidence 3.0 evidence submission. */
795
        @SerializedName("disputed_transaction")
796
        DisputedTransaction disputedTransaction;
797

798
        /**
799
         * List of exactly two prior undisputed transaction objects for Visa Compelling Evidence 3.0
800
         * evidence submission.
801
         */
802
        @SerializedName("prior_undisputed_transactions")
803
        List<Dispute.Evidence.EnhancedEvidence.VisaCompellingEvidence3.PriorUndisputedTransaction>
804
            priorUndisputedTransactions;
805

806
        /**
807
         * For more details about DisputedTransaction, please refer to the <a
808
         * href="https://docs.stripe.com/api">API Reference.</a>
809
         */
810
        @Getter
811
        @Setter
812
        @EqualsAndHashCode(callSuper = false)
813
        public static class DisputedTransaction extends StripeObject {
×
814
          /**
815
           * User Account ID used to log into business platform. Must be recognizable by the user.
816
           */
817
          @SerializedName("customer_account_id")
818
          String customerAccountId;
819

820
          /**
821
           * Unique identifier of the cardholder’s device derived from a combination of at least two
822
           * hardware and software attributes. Must be at least 20 characters.
823
           */
824
          @SerializedName("customer_device_fingerprint")
825
          String customerDeviceFingerprint;
826

827
          /**
828
           * Unique identifier of the cardholder’s device such as a device serial number (e.g.,
829
           * International Mobile Equipment Identity [IMEI]). Must be at least 15 characters.
830
           */
831
          @SerializedName("customer_device_id")
832
          String customerDeviceId;
833

834
          /** The email address of the customer. */
835
          @SerializedName("customer_email_address")
836
          String customerEmailAddress;
837

838
          /** The IP address that the customer used when making the purchase. */
839
          @SerializedName("customer_purchase_ip")
840
          String customerPurchaseIp;
841

842
          /**
843
           * Categorization of disputed payment.
844
           *
845
           * <p>One of {@code merchandise}, or {@code services}.
846
           */
847
          @SerializedName("merchandise_or_services")
848
          String merchandiseOrServices;
849

850
          /** A description of the product or service that was sold. */
851
          @SerializedName("product_description")
852
          String productDescription;
853

854
          /**
855
           * The address to which a physical product was shipped. All fields are required for Visa
856
           * Compelling Evidence 3.0 evidence submission.
857
           */
858
          @SerializedName("shipping_address")
859
          ShippingAddress shippingAddress;
860

861
          /**
862
           * For more details about ShippingAddress, please refer to the <a
863
           * href="https://docs.stripe.com/api">API Reference.</a>
864
           */
865
          @Getter
866
          @Setter
867
          @EqualsAndHashCode(callSuper = false)
868
          public static class ShippingAddress extends StripeObject {
×
869
            /** City, district, suburb, town, or village. */
870
            @SerializedName("city")
871
            String city;
872

873
            /**
874
             * Two-letter country code (<a
875
             * href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-1 alpha-2</a>).
876
             */
877
            @SerializedName("country")
878
            String country;
879

880
            /** Address line 1 (e.g., street, PO Box, or company name). */
881
            @SerializedName("line1")
882
            String line1;
883

884
            /** Address line 2 (e.g., apartment, suite, unit, or building). */
885
            @SerializedName("line2")
886
            String line2;
887

888
            /** ZIP or postal code. */
889
            @SerializedName("postal_code")
890
            String postalCode;
891

892
            /** State, county, province, or region. */
893
            @SerializedName("state")
894
            String state;
895
          }
896
        }
897

898
        /**
899
         * For more details about PriorUndisputedTransaction, please refer to the <a
900
         * href="https://docs.stripe.com/api">API Reference.</a>
901
         */
902
        @Getter
903
        @Setter
904
        @EqualsAndHashCode(callSuper = false)
905
        public static class PriorUndisputedTransaction extends StripeObject {
×
906
          /** Stripe charge ID for the Visa Compelling Evidence 3.0 eligible prior charge. */
907
          @SerializedName("charge")
908
          String charge;
909

910
          /**
911
           * User Account ID used to log into business platform. Must be recognizable by the user.
912
           */
913
          @SerializedName("customer_account_id")
914
          String customerAccountId;
915

916
          /**
917
           * Unique identifier of the cardholder’s device derived from a combination of at least two
918
           * hardware and software attributes. Must be at least 20 characters.
919
           */
920
          @SerializedName("customer_device_fingerprint")
921
          String customerDeviceFingerprint;
922

923
          /**
924
           * Unique identifier of the cardholder’s device such as a device serial number (e.g.,
925
           * International Mobile Equipment Identity [IMEI]). Must be at least 15 characters.
926
           */
927
          @SerializedName("customer_device_id")
928
          String customerDeviceId;
929

930
          /** The email address of the customer. */
931
          @SerializedName("customer_email_address")
932
          String customerEmailAddress;
933

934
          /** The IP address that the customer used when making the purchase. */
935
          @SerializedName("customer_purchase_ip")
936
          String customerPurchaseIp;
937

938
          /** A description of the product or service that was sold. */
939
          @SerializedName("product_description")
940
          String productDescription;
941

942
          /**
943
           * The address to which a physical product was shipped. All fields are required for Visa
944
           * Compelling Evidence 3.0 evidence submission.
945
           */
946
          @SerializedName("shipping_address")
947
          ShippingAddress shippingAddress;
948

949
          /**
950
           * For more details about ShippingAddress, please refer to the <a
951
           * href="https://docs.stripe.com/api">API Reference.</a>
952
           */
953
          @Getter
954
          @Setter
955
          @EqualsAndHashCode(callSuper = false)
956
          public static class ShippingAddress extends StripeObject {
×
957
            /** City, district, suburb, town, or village. */
958
            @SerializedName("city")
959
            String city;
960

961
            /**
962
             * Two-letter country code (<a
963
             * href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-1 alpha-2</a>).
964
             */
965
            @SerializedName("country")
966
            String country;
967

968
            /** Address line 1 (e.g., street, PO Box, or company name). */
969
            @SerializedName("line1")
970
            String line1;
971

972
            /** Address line 2 (e.g., apartment, suite, unit, or building). */
973
            @SerializedName("line2")
974
            String line2;
975

976
            /** ZIP or postal code. */
977
            @SerializedName("postal_code")
978
            String postalCode;
979

980
            /** State, county, province, or region. */
981
            @SerializedName("state")
982
            String state;
983
          }
984
        }
985
      }
986

987
      /**
988
       * For more details about VisaCompliance, please refer to the <a
989
       * href="https://docs.stripe.com/api">API Reference.</a>
990
       */
991
      @Getter
992
      @Setter
993
      @EqualsAndHashCode(callSuper = false)
NEW
994
      public static class VisaCompliance extends StripeObject {
×
995
        /**
996
         * A field acknowledging the fee incurred when countering a Visa compliance dispute. If this
997
         * field is set to true, evidence can be submitted for the compliance dispute. Stripe
998
         * collects a 500 USD (or local equivalent) amount to cover the network costs associated
999
         * with resolving compliance disputes. Stripe refunds the 500 USD network fee if you win the
1000
         * dispute.
1001
         */
1002
        @SerializedName("fee_acknowledged")
1003
        Boolean feeAcknowledged;
1004
      }
1005
    }
1006
  }
1007

1008
  /**
1009
   * For more details about EvidenceDetails, please refer to the <a
1010
   * href="https://docs.stripe.com/api">API Reference.</a>
1011
   */
1012
  @Getter
1013
  @Setter
1014
  @EqualsAndHashCode(callSuper = false)
1015
  public static class EvidenceDetails extends StripeObject {
1✔
1016
    /**
1017
     * Date by which evidence must be submitted in order to successfully challenge dispute. Will be
1018
     * 0 if the customer's bank or credit card company doesn't allow a response for this particular
1019
     * dispute.
1020
     */
1021
    @SerializedName("due_by")
1022
    Long dueBy;
1023

1024
    @SerializedName("enhanced_eligibility")
1025
    EnhancedEligibility enhancedEligibility;
1026

1027
    /** Whether evidence has been staged for this dispute. */
1028
    @SerializedName("has_evidence")
1029
    Boolean hasEvidence;
1030

1031
    /**
1032
     * Whether the last evidence submission was submitted past the due date. Defaults to {@code
1033
     * false} if no evidence submissions have occurred. If {@code true}, then delivery of the latest
1034
     * evidence is <em>not</em> guaranteed.
1035
     */
1036
    @SerializedName("past_due")
1037
    Boolean pastDue;
1038

1039
    /**
1040
     * The number of times evidence has been submitted. Typically, you may only submit evidence
1041
     * once.
1042
     */
1043
    @SerializedName("submission_count")
1044
    Long submissionCount;
1045

1046
    /**
1047
     * For more details about EnhancedEligibility, please refer to the <a
1048
     * href="https://docs.stripe.com/api">API Reference.</a>
1049
     */
1050
    @Getter
1051
    @Setter
1052
    @EqualsAndHashCode(callSuper = false)
1053
    public static class EnhancedEligibility extends StripeObject {
×
1054
      @SerializedName("visa_compelling_evidence_3")
1055
      VisaCompellingEvidence3 visaCompellingEvidence3;
1056

1057
      @SerializedName("visa_compliance")
1058
      VisaCompliance visaCompliance;
1059

1060
      /**
1061
       * For more details about VisaCompellingEvidence3, please refer to the <a
1062
       * href="https://docs.stripe.com/api">API Reference.</a>
1063
       */
1064
      @Getter
1065
      @Setter
1066
      @EqualsAndHashCode(callSuper = false)
1067
      public static class VisaCompellingEvidence3 extends StripeObject {
×
1068
        /**
1069
         * List of actions required to qualify dispute for Visa Compelling Evidence 3.0 evidence
1070
         * submission.
1071
         */
1072
        @SerializedName("required_actions")
1073
        List<String> requiredActions;
1074

1075
        /**
1076
         * Visa Compelling Evidence 3.0 eligibility status.
1077
         *
1078
         * <p>One of {@code not_qualified}, {@code qualified}, or {@code requires_action}.
1079
         */
1080
        @SerializedName("status")
1081
        String status;
1082
      }
1083

1084
      /**
1085
       * For more details about VisaCompliance, please refer to the <a
1086
       * href="https://docs.stripe.com/api">API Reference.</a>
1087
       */
1088
      @Getter
1089
      @Setter
1090
      @EqualsAndHashCode(callSuper = false)
NEW
1091
      public static class VisaCompliance extends StripeObject {
×
1092
        /**
1093
         * Visa compliance eligibility status.
1094
         *
1095
         * <p>One of {@code fee_acknowledged}, or {@code requires_fee_acknowledgement}.
1096
         */
1097
        @SerializedName("status")
1098
        String status;
1099
      }
1100
    }
1101
  }
1102

1103
  /**
1104
   * For more details about PaymentMethodDetails, please refer to the <a
1105
   * href="https://docs.stripe.com/api">API Reference.</a>
1106
   */
1107
  @Getter
1108
  @Setter
1109
  @EqualsAndHashCode(callSuper = false)
1110
  public static class PaymentMethodDetails extends StripeObject {
1✔
1111
    @SerializedName("amazon_pay")
1112
    AmazonPay amazonPay;
1113

1114
    @SerializedName("card")
1115
    Card card;
1116

1117
    @SerializedName("klarna")
1118
    Klarna klarna;
1119

1120
    @SerializedName("paypal")
1121
    Paypal paypal;
1122

1123
    /**
1124
     * Payment method type.
1125
     *
1126
     * <p>One of {@code amazon_pay}, {@code card}, {@code klarna}, or {@code paypal}.
1127
     */
1128
    @SerializedName("type")
1129
    String type;
1130

1131
    /**
1132
     * For more details about AmazonPay, please refer to the <a
1133
     * href="https://docs.stripe.com/api">API Reference.</a>
1134
     */
1135
    @Getter
1136
    @Setter
1137
    @EqualsAndHashCode(callSuper = false)
1138
    public static class AmazonPay extends StripeObject {
×
1139
      /**
1140
       * The AmazonPay dispute type, chargeback or claim
1141
       *
1142
       * <p>One of {@code chargeback}, or {@code claim}.
1143
       */
1144
      @SerializedName("dispute_type")
1145
      String disputeType;
1146
    }
1147

1148
    /**
1149
     * For more details about Card, please refer to the <a href="https://docs.stripe.com/api">API
1150
     * Reference.</a>
1151
     */
1152
    @Getter
1153
    @Setter
1154
    @EqualsAndHashCode(callSuper = false)
1155
    public static class Card extends StripeObject {
1✔
1156
      /**
1157
       * Card brand. Can be {@code amex}, {@code diners}, {@code discover}, {@code eftpos_au},
1158
       * {@code jcb}, {@code link}, {@code mastercard}, {@code unionpay}, {@code visa}, or {@code
1159
       * unknown}.
1160
       */
1161
      @SerializedName("brand")
1162
      String brand;
1163

1164
      /**
1165
       * The type of dispute opened. Different case types may have varying fees and financial
1166
       * impact.
1167
       *
1168
       * <p>One of {@code chargeback}, or {@code inquiry}.
1169
       */
1170
      @SerializedName("case_type")
1171
      String caseType;
1172

1173
      /**
1174
       * The card network's specific dispute reason code, which maps to one of Stripe's primary
1175
       * dispute categories to simplify response guidance. The <a
1176
       * href="https://stripe.com/docs/disputes/categories#network-code-map">Network code map</a>
1177
       * lists all available dispute reason codes by network.
1178
       */
1179
      @SerializedName("network_reason_code")
1180
      String networkReasonCode;
1181
    }
1182

1183
    /**
1184
     * For more details about Klarna, please refer to the <a href="https://docs.stripe.com/api">API
1185
     * Reference.</a>
1186
     */
1187
    @Getter
1188
    @Setter
1189
    @EqualsAndHashCode(callSuper = false)
1190
    public static class Klarna extends StripeObject {
×
1191
      /** The reason for the dispute as defined by Klarna. */
1192
      @SerializedName("reason_code")
1193
      String reasonCode;
1194
    }
1195

1196
    /**
1197
     * For more details about Paypal, please refer to the <a href="https://docs.stripe.com/api">API
1198
     * Reference.</a>
1199
     */
1200
    @Getter
1201
    @Setter
1202
    @EqualsAndHashCode(callSuper = false)
1203
    public static class Paypal extends StripeObject {
×
1204
      /** The ID of the dispute in PayPal. */
1205
      @SerializedName("case_id")
1206
      String caseId;
1207

1208
      /** The reason for the dispute as defined by PayPal. */
1209
      @SerializedName("reason_code")
1210
      String reasonCode;
1211
    }
1212
  }
1213

1214
  @Override
1215
  public void setResponseGetter(StripeResponseGetter responseGetter) {
1216
    super.setResponseGetter(responseGetter);
1✔
1217
    trySetResponseGetter(charge, responseGetter);
1✔
1218
    trySetResponseGetter(evidence, responseGetter);
1✔
1219
    trySetResponseGetter(evidenceDetails, responseGetter);
1✔
1220
    trySetResponseGetter(paymentIntent, responseGetter);
1✔
1221
    trySetResponseGetter(paymentMethodDetails, responseGetter);
1✔
1222
  }
1✔
1223
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc