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

box / box-java-sdk / #5922

17 Dec 2025 05:03PM UTC coverage: 35.498% (-0.4%) from 35.917%
#5922

push

github

web-flow
fix: add taxonomy to Metadata Field (read) definition (box/box-openapi#572) (#1644)

Co-authored-by: box-sdk-build <box-sdk-build@box.com>

2 of 2 new or added lines in 1 file covered. (100.0%)

535 existing lines in 31 files now uncovered.

18926 of 53316 relevant lines covered (35.5%)

0.35 hits per line

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

46.67
/src/main/java/com/box/sdkgen/managers/search/SearchForContentQueryParams.java
1
package com.box.sdkgen.managers.search;
2

3
import com.box.sdkgen.schemas.metadatafilter.MetadataFilter;
4
import com.box.sdkgen.serialization.json.EnumWrapper;
5
import com.box.sdkgen.serialization.json.Valuable;
6
import com.fasterxml.jackson.core.JsonGenerator;
7
import com.fasterxml.jackson.core.JsonParser;
8
import com.fasterxml.jackson.databind.DeserializationContext;
9
import com.fasterxml.jackson.databind.JsonDeserializer;
10
import com.fasterxml.jackson.databind.JsonNode;
11
import com.fasterxml.jackson.databind.JsonSerializer;
12
import com.fasterxml.jackson.databind.SerializerProvider;
13
import java.io.IOException;
14
import java.util.ArrayList;
15
import java.util.List;
16

17
public class SearchForContentQueryParams {
18

19
  /**
20
   * The string to search for. This query is matched against item names, descriptions, text content
21
   * of files, and various other fields of the different item types.
22
   *
23
   * <p>This parameter supports a variety of operators to further refine the results returns.
24
   *
25
   * <p>* `""` - by wrapping a query in double quotes only exact matches are returned by the API.
26
   * Exact searches do not return search matches based on specific character sequences. Instead,
27
   * they return matches based on phrases, that is, word sequences. For example: A search for
28
   * `"Blue-Box"` may return search results including the sequence `"blue.box"`, `"Blue Box"`, and
29
   * `"Blue-Box"`; any item containing the words `Blue` and `Box` consecutively, in the order
30
   * specified. * `AND` - returns items that contain both the search terms. For example, a search
31
   * for `marketing AND BoxWorks` returns items that have both `marketing` and `BoxWorks` within its
32
   * text in any order. It does not return a result that only has `BoxWorks` in its text. * `OR` -
33
   * returns items that contain either of the search terms. For example, a search for `marketing OR
34
   * BoxWorks` returns a result that has either `marketing` or `BoxWorks` within its text. Using
35
   * this operator is not necessary as we implicitly interpret multi-word queries as `OR` unless
36
   * another supported boolean term is used. * `NOT` - returns items that do not contain the search
37
   * term provided. For example, a search for `marketing AND NOT BoxWorks` returns a result that has
38
   * only `marketing` within its text. Results containing `BoxWorks` are omitted.
39
   *
40
   * <p>We do not support lower case (that is, `and`, `or`, and `not`) or mixed case (that is,
41
   * `And`, `Or`, and `Not`) operators.
42
   *
43
   * <p>This field is required unless the `mdfilters` parameter is defined.
44
   */
45
  public String query;
46

47
  /**
48
   * Limits the search results to either the files that the user has access to, or to files
49
   * available to the entire enterprise.
50
   *
51
   * <p>The scope defaults to `user_content`, which limits the search results to content that is
52
   * available to the currently authenticated user.
53
   *
54
   * <p>The `enterprise_content` can be requested by an admin through our support channels. Once
55
   * this scope has been enabled for a user, it will allow that use to query for content across the
56
   * entire enterprise and not only the content that they have access to.
57
   */
58
  public EnumWrapper<SearchForContentQueryParamsScopeField> scope;
59

60
  /**
61
   * Limits the search results to any files that match any of the provided file extensions. This
62
   * list is a comma-separated list of file extensions without the dots.
63
   */
64
  public List<String> fileExtensions;
65

66
  /**
67
   * Limits the search results to any items created within a given date range.
68
   *
69
   * <p>Date ranges are defined as comma separated RFC3339 timestamps.
70
   *
71
   * <p>If the start date is omitted (`,2014-05-17T13:35:01-07:00`) anything created before the end
72
   * date will be returned.
73
   *
74
   * <p>If the end date is omitted (`2014-05-15T13:35:01-07:00,`) the current date will be used as
75
   * the end date instead.
76
   */
77
  public List<String> createdAtRange;
78

79
  /**
80
   * Limits the search results to any items updated within a given date range.
81
   *
82
   * <p>Date ranges are defined as comma separated RFC3339 timestamps.
83
   *
84
   * <p>If the start date is omitted (`,2014-05-17T13:35:01-07:00`) anything updated before the end
85
   * date will be returned.
86
   *
87
   * <p>If the end date is omitted (`2014-05-15T13:35:01-07:00,`) the current date will be used as
88
   * the end date instead.
89
   */
90
  public List<String> updatedAtRange;
91

92
  /**
93
   * Limits the search results to any items with a size within a given file size range. This applied
94
   * to files and folders.
95
   *
96
   * <p>Size ranges are defined as comma separated list of a lower and upper byte size limit
97
   * (inclusive).
98
   *
99
   * <p>The upper and lower bound can be omitted to create open ranges.
100
   */
101
  public List<Long> sizeRange;
102

103
  /**
104
   * Limits the search results to any items that are owned by the given list of owners, defined as a
105
   * list of comma separated user IDs.
106
   *
107
   * <p>The items still need to be owned or shared with the currently authenticated user for them to
108
   * show up in the search results. If the user does not have access to any files owned by any of
109
   * the users an empty result set will be returned.
110
   *
111
   * <p>To search across an entire enterprise, we recommend using the `enterprise_content` scope
112
   * parameter which can be requested with our support team.
113
   */
114
  public List<String> ownerUserIds;
115

116
  /**
117
   * Limits the search results to any items that have been updated by the given list of users,
118
   * defined as a list of comma separated user IDs.
119
   *
120
   * <p>The items still need to be owned or shared with the currently authenticated user for them to
121
   * show up in the search results. If the user does not have access to any files owned by any of
122
   * the users an empty result set will be returned.
123
   *
124
   * <p>This feature only searches back to the last 10 versions of an item.
125
   */
126
  public List<String> recentUpdaterUserIds;
127

128
  /**
129
   * Limits the search results to items within the given list of folders, defined as a comma
130
   * separated lists of folder IDs.
131
   *
132
   * <p>Search results will also include items within any subfolders of those ancestor folders.
133
   *
134
   * <p>The folders still need to be owned or shared with the currently authenticated user. If the
135
   * folder is not accessible by this user, or it does not exist, a `HTTP 404` error code will be
136
   * returned instead.
137
   *
138
   * <p>To search across an entire enterprise, we recommend using the `enterprise_content` scope
139
   * parameter which can be requested with our support team.
140
   */
141
  public List<String> ancestorFolderIds;
142

143
  /**
144
   * Limits the search results to any items that match the search query for a specific part of the
145
   * file, for example the file description.
146
   *
147
   * <p>Content types are defined as a comma separated lists of Box recognized content types. The
148
   * allowed content types are as follows.
149
   *
150
   * <p>* `name` - The name of the item, as defined by its `name` field. * `description` - The
151
   * description of the item, as defined by its `description` field. * `file_content` - The actual
152
   * content of the file. * `comments` - The content of any of the comments on a file or folder. *
153
   * `tags` - Any tags that are applied to an item, as defined by its `tags` field.
154
   */
155
  public List<EnumWrapper<SearchForContentQueryParamsContentTypesField>> contentTypes;
156

157
  /**
158
   * Limits the search results to any items of this type. This parameter only takes one value. By
159
   * default the API returns items that match any of these types.
160
   *
161
   * <p>* `file` - Limits the search results to files, * `folder` - Limits the search results to
162
   * folders, * `web_link` - Limits the search results to web links, also known as bookmarks.
163
   */
164
  public EnumWrapper<SearchForContentQueryParamsTypeField> type;
165

166
  /**
167
   * Determines if the search should look in the trash for items.
168
   *
169
   * <p>By default, this API only returns search results for items not currently in the trash
170
   * (`non_trashed_only`).
171
   *
172
   * <p>* `trashed_only` - Only searches for items currently in the trash * `non_trashed_only` -
173
   * Only searches for items currently not in the trash * `all_items` - Searches for both trashed
174
   * and non-trashed items.
175
   */
176
  public EnumWrapper<SearchForContentQueryParamsTrashContentField> trashContent;
177

178
  /**
179
   * Limits the search results to any items for which the metadata matches the provided filter. This
180
   * parameter is a list that specifies exactly **one** metadata template used to filter the search
181
   * results. The parameter is required unless the `query` parameter is provided.
182
   */
183
  public List<MetadataFilter> mdfilters;
184

185
  /**
186
   * Defines the order in which search results are returned. This API defaults to returning items by
187
   * relevance unless this parameter is explicitly specified.
188
   *
189
   * <p>* `relevance` (default) returns the results sorted by relevance to the query search term.
190
   * The relevance is based on the occurrence of the search term in the items name, description,
191
   * content, and additional properties. * `modified_at` returns the results ordered in descending
192
   * order by date at which the item was last modified.
193
   */
194
  public EnumWrapper<SearchForContentQueryParamsSortField> sort;
195

196
  /**
197
   * Defines the direction in which search results are ordered. This API defaults to returning items
198
   * in descending (`DESC`) order unless this parameter is explicitly specified.
199
   *
200
   * <p>When results are sorted by `relevance` the ordering is locked to returning items in
201
   * descending order of relevance, and this parameter is ignored.
202
   */
203
  public EnumWrapper<SearchForContentQueryParamsDirectionField> direction;
204

205
  /** Defines the maximum number of items to return as part of a page of results. */
206
  public Long limit;
207

208
  /**
209
   * Defines whether the search results should include any items that the user recently accessed
210
   * through a shared link.
211
   *
212
   * <p>When this parameter has been set to true, the format of the response of this API changes to
213
   * return a list of [Search Results with Shared
214
   * Links](https://developer.box.com/reference/resources/search-results-with-shared-links).
215
   */
216
  public Boolean includeRecentSharedLinks;
217

218
  /**
219
   * A comma-separated list of attributes to include in the response. This can be used to request
220
   * fields that are not normally returned in a standard response.
221
   *
222
   * <p>Be aware that specifying this parameter will have the effect that none of the standard
223
   * fields are returned in the response unless explicitly specified, instead only fields for the
224
   * mini representation are returned, additional to the fields requested.
225
   */
226
  public List<String> fields;
227

228
  /**
229
   * The offset of the item at which to begin the response.
230
   *
231
   * <p>Queries with offset parameter value exceeding 10000 will be rejected with a 400 response.
232
   */
233
  public Long offset;
234

235
  /**
236
   * Limits the search results to items that were deleted by the given list of users, defined as a
237
   * list of comma separated user IDs.
238
   *
239
   * <p>The `trash_content` parameter needs to be set to `trashed_only`.
240
   *
241
   * <p>If searching in trash is not performed, an empty result set is returned. The items need to
242
   * be owned or shared with the currently authenticated user for them to show up in the search
243
   * results.
244
   *
245
   * <p>If the user does not have access to any files owned by any of the users, an empty result set
246
   * is returned.
247
   *
248
   * <p>Data available from 2023-02-01 onwards.
249
   */
250
  public List<String> deletedUserIds;
251

252
  /**
253
   * Limits the search results to any items deleted within a given date range.
254
   *
255
   * <p>Date ranges are defined as comma separated RFC3339 timestamps.
256
   *
257
   * <p>If the start date is omitted (`2014-05-17T13:35:01-07:00`), anything deleted before the end
258
   * date will be returned.
259
   *
260
   * <p>If the end date is omitted (`2014-05-15T13:35:01-07:00`), the current date will be used as
261
   * the end date instead.
262
   *
263
   * <p>The `trash_content` parameter needs to be set to `trashed_only`.
264
   *
265
   * <p>If searching in trash is not performed, then an empty result is returned.
266
   *
267
   * <p>Data available from 2023-02-01 onwards.
268
   */
269
  public List<String> deletedAtRange;
270

UNCOV
271
  public SearchForContentQueryParams() {}
×
272

273
  protected SearchForContentQueryParams(Builder builder) {
1✔
274
    this.query = builder.query;
1✔
275
    this.scope = builder.scope;
1✔
276
    this.fileExtensions = builder.fileExtensions;
1✔
277
    this.createdAtRange = builder.createdAtRange;
1✔
278
    this.updatedAtRange = builder.updatedAtRange;
1✔
279
    this.sizeRange = builder.sizeRange;
1✔
280
    this.ownerUserIds = builder.ownerUserIds;
1✔
281
    this.recentUpdaterUserIds = builder.recentUpdaterUserIds;
1✔
282
    this.ancestorFolderIds = builder.ancestorFolderIds;
1✔
283
    this.contentTypes = builder.contentTypes;
1✔
284
    this.type = builder.type;
1✔
285
    this.trashContent = builder.trashContent;
1✔
286
    this.mdfilters = builder.mdfilters;
1✔
287
    this.sort = builder.sort;
1✔
288
    this.direction = builder.direction;
1✔
289
    this.limit = builder.limit;
1✔
290
    this.includeRecentSharedLinks = builder.includeRecentSharedLinks;
1✔
291
    this.fields = builder.fields;
1✔
292
    this.offset = builder.offset;
1✔
293
    this.deletedUserIds = builder.deletedUserIds;
1✔
294
    this.deletedAtRange = builder.deletedAtRange;
1✔
295
  }
1✔
296

297
  public String getQuery() {
298
    return query;
1✔
299
  }
300

301
  public EnumWrapper<SearchForContentQueryParamsScopeField> getScope() {
302
    return scope;
1✔
303
  }
304

305
  public List<String> getFileExtensions() {
306
    return fileExtensions;
1✔
307
  }
308

309
  public List<String> getCreatedAtRange() {
310
    return createdAtRange;
1✔
311
  }
312

313
  public List<String> getUpdatedAtRange() {
314
    return updatedAtRange;
1✔
315
  }
316

317
  public List<Long> getSizeRange() {
318
    return sizeRange;
1✔
319
  }
320

321
  public List<String> getOwnerUserIds() {
322
    return ownerUserIds;
1✔
323
  }
324

325
  public List<String> getRecentUpdaterUserIds() {
326
    return recentUpdaterUserIds;
1✔
327
  }
328

329
  public List<String> getAncestorFolderIds() {
330
    return ancestorFolderIds;
1✔
331
  }
332

333
  public List<EnumWrapper<SearchForContentQueryParamsContentTypesField>> getContentTypes() {
334
    return contentTypes;
1✔
335
  }
336

337
  public EnumWrapper<SearchForContentQueryParamsTypeField> getType() {
338
    return type;
1✔
339
  }
340

341
  public EnumWrapper<SearchForContentQueryParamsTrashContentField> getTrashContent() {
342
    return trashContent;
1✔
343
  }
344

345
  public List<MetadataFilter> getMdfilters() {
346
    return mdfilters;
1✔
347
  }
348

349
  public EnumWrapper<SearchForContentQueryParamsSortField> getSort() {
350
    return sort;
1✔
351
  }
352

353
  public EnumWrapper<SearchForContentQueryParamsDirectionField> getDirection() {
354
    return direction;
1✔
355
  }
356

357
  public Long getLimit() {
358
    return limit;
1✔
359
  }
360

361
  public Boolean getIncludeRecentSharedLinks() {
362
    return includeRecentSharedLinks;
1✔
363
  }
364

365
  public List<String> getFields() {
366
    return fields;
1✔
367
  }
368

369
  public Long getOffset() {
370
    return offset;
1✔
371
  }
372

373
  public List<String> getDeletedUserIds() {
374
    return deletedUserIds;
1✔
375
  }
376

377
  public List<String> getDeletedAtRange() {
378
    return deletedAtRange;
1✔
379
  }
380

381
  public static class Builder {
1✔
382

383
    protected String query;
384

385
    protected EnumWrapper<SearchForContentQueryParamsScopeField> scope;
386

387
    protected List<String> fileExtensions;
388

389
    protected List<String> createdAtRange;
390

391
    protected List<String> updatedAtRange;
392

393
    protected List<Long> sizeRange;
394

395
    protected List<String> ownerUserIds;
396

397
    protected List<String> recentUpdaterUserIds;
398

399
    protected List<String> ancestorFolderIds;
400

401
    protected List<EnumWrapper<SearchForContentQueryParamsContentTypesField>> contentTypes;
402

403
    protected EnumWrapper<SearchForContentQueryParamsTypeField> type;
404

405
    protected EnumWrapper<SearchForContentQueryParamsTrashContentField> trashContent;
406

407
    protected List<MetadataFilter> mdfilters;
408

409
    protected EnumWrapper<SearchForContentQueryParamsSortField> sort;
410

411
    protected EnumWrapper<SearchForContentQueryParamsDirectionField> direction;
412

413
    protected Long limit;
414

415
    protected Boolean includeRecentSharedLinks;
416

417
    protected List<String> fields;
418

419
    protected Long offset;
420

421
    protected List<String> deletedUserIds;
422

423
    protected List<String> deletedAtRange;
424

425
    public Builder query(String query) {
426
      this.query = query;
1✔
427
      return this;
1✔
428
    }
429

430
    public Builder scope(SearchForContentQueryParamsScopeField scope) {
431
      this.scope = new EnumWrapper<SearchForContentQueryParamsScopeField>(scope);
×
UNCOV
432
      return this;
×
433
    }
434

435
    public Builder scope(EnumWrapper<SearchForContentQueryParamsScopeField> scope) {
436
      this.scope = scope;
×
UNCOV
437
      return this;
×
438
    }
439

440
    public Builder fileExtensions(List<String> fileExtensions) {
441
      this.fileExtensions = fileExtensions;
×
UNCOV
442
      return this;
×
443
    }
444

445
    public Builder createdAtRange(List<String> createdAtRange) {
446
      this.createdAtRange = createdAtRange;
×
UNCOV
447
      return this;
×
448
    }
449

450
    public Builder updatedAtRange(List<String> updatedAtRange) {
451
      this.updatedAtRange = updatedAtRange;
×
UNCOV
452
      return this;
×
453
    }
454

455
    public Builder sizeRange(List<Long> sizeRange) {
456
      this.sizeRange = sizeRange;
×
UNCOV
457
      return this;
×
458
    }
459

460
    public Builder ownerUserIds(List<String> ownerUserIds) {
461
      this.ownerUserIds = ownerUserIds;
×
UNCOV
462
      return this;
×
463
    }
464

465
    public Builder recentUpdaterUserIds(List<String> recentUpdaterUserIds) {
466
      this.recentUpdaterUserIds = recentUpdaterUserIds;
×
UNCOV
467
      return this;
×
468
    }
469

470
    public Builder ancestorFolderIds(List<String> ancestorFolderIds) {
471
      this.ancestorFolderIds = ancestorFolderIds;
1✔
472
      return this;
1✔
473
    }
474

475
    public Builder contentTypes(List<? extends Valuable> contentTypes) {
476
      this.contentTypes =
×
UNCOV
477
          EnumWrapper.wrapValuableEnumList(
×
478
              contentTypes, SearchForContentQueryParamsContentTypesField.class);
UNCOV
479
      return this;
×
480
    }
481

482
    public Builder type(SearchForContentQueryParamsTypeField type) {
483
      this.type = new EnumWrapper<SearchForContentQueryParamsTypeField>(type);
×
UNCOV
484
      return this;
×
485
    }
486

487
    public Builder type(EnumWrapper<SearchForContentQueryParamsTypeField> type) {
488
      this.type = type;
×
UNCOV
489
      return this;
×
490
    }
491

492
    public Builder trashContent(SearchForContentQueryParamsTrashContentField trashContent) {
493
      this.trashContent =
1✔
494
          new EnumWrapper<SearchForContentQueryParamsTrashContentField>(trashContent);
495
      return this;
1✔
496
    }
497

498
    public Builder trashContent(
499
        EnumWrapper<SearchForContentQueryParamsTrashContentField> trashContent) {
500
      this.trashContent = trashContent;
×
UNCOV
501
      return this;
×
502
    }
503

504
    public Builder mdfilters(List<MetadataFilter> mdfilters) {
505
      this.mdfilters = mdfilters;
1✔
506
      return this;
1✔
507
    }
508

509
    public Builder sort(SearchForContentQueryParamsSortField sort) {
510
      this.sort = new EnumWrapper<SearchForContentQueryParamsSortField>(sort);
×
UNCOV
511
      return this;
×
512
    }
513

514
    public Builder sort(EnumWrapper<SearchForContentQueryParamsSortField> sort) {
515
      this.sort = sort;
×
UNCOV
516
      return this;
×
517
    }
518

519
    public Builder direction(SearchForContentQueryParamsDirectionField direction) {
520
      this.direction = new EnumWrapper<SearchForContentQueryParamsDirectionField>(direction);
×
UNCOV
521
      return this;
×
522
    }
523

524
    public Builder direction(EnumWrapper<SearchForContentQueryParamsDirectionField> direction) {
525
      this.direction = direction;
×
UNCOV
526
      return this;
×
527
    }
528

529
    public Builder limit(Long limit) {
530
      this.limit = limit;
×
UNCOV
531
      return this;
×
532
    }
533

534
    public Builder includeRecentSharedLinks(Boolean includeRecentSharedLinks) {
535
      this.includeRecentSharedLinks = includeRecentSharedLinks;
1✔
536
      return this;
1✔
537
    }
538

539
    public Builder fields(List<String> fields) {
540
      this.fields = fields;
×
UNCOV
541
      return this;
×
542
    }
543

544
    public Builder offset(Long offset) {
545
      this.offset = offset;
×
UNCOV
546
      return this;
×
547
    }
548

549
    public Builder deletedUserIds(List<String> deletedUserIds) {
550
      this.deletedUserIds = deletedUserIds;
×
UNCOV
551
      return this;
×
552
    }
553

554
    public Builder deletedAtRange(List<String> deletedAtRange) {
555
      this.deletedAtRange = deletedAtRange;
×
UNCOV
556
      return this;
×
557
    }
558

559
    public SearchForContentQueryParams build() {
560
      return new SearchForContentQueryParams(this);
1✔
561
    }
562
  }
563

564
  public static class ContentTypesDeserializer
565
      extends JsonDeserializer<List<EnumWrapper<SearchForContentQueryParamsContentTypesField>>> {
566

567
    public final JsonDeserializer<EnumWrapper<SearchForContentQueryParamsContentTypesField>>
568
        elementDeserializer;
569

570
    public ContentTypesDeserializer() {
571
      super();
×
UNCOV
572
      this.elementDeserializer =
×
573
          new SearchForContentQueryParamsContentTypesField
574
              .SearchForContentQueryParamsContentTypesFieldDeserializer();
UNCOV
575
    }
×
576

577
    @Override
578
    public List<EnumWrapper<SearchForContentQueryParamsContentTypesField>> deserialize(
579
        JsonParser p, DeserializationContext ctxt) throws IOException {
580
      JsonNode node = p.getCodec().readTree(p);
×
581
      List<EnumWrapper<SearchForContentQueryParamsContentTypesField>> elements = new ArrayList<>();
×
582
      for (JsonNode item : node) {
×
583
        JsonParser pa = item.traverse(p.getCodec());
×
584
        pa.nextToken();
×
585
        elements.add(elementDeserializer.deserialize(pa, ctxt));
×
586
      }
×
UNCOV
587
      return elements;
×
588
    }
589
  }
590

591
  public static class ContentTypesSerializer
592
      extends JsonSerializer<List<EnumWrapper<SearchForContentQueryParamsContentTypesField>>> {
593

594
    public final JsonSerializer<EnumWrapper<SearchForContentQueryParamsContentTypesField>>
595
        elementSerializer;
596

597
    public ContentTypesSerializer() {
598
      super();
×
UNCOV
599
      this.elementSerializer =
×
600
          new SearchForContentQueryParamsContentTypesField
601
              .SearchForContentQueryParamsContentTypesFieldSerializer();
UNCOV
602
    }
×
603

604
    @Override
605
    public void serialize(
606
        List<EnumWrapper<SearchForContentQueryParamsContentTypesField>> value,
607
        JsonGenerator gen,
608
        SerializerProvider serializers)
609
        throws IOException {
610
      gen.writeStartArray();
×
611
      for (EnumWrapper<SearchForContentQueryParamsContentTypesField> item : value) {
×
612
        elementSerializer.serialize(item, gen, serializers);
×
613
      }
×
614
      gen.writeEndArray();
×
UNCOV
615
    }
×
616
  }
617
}
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