Skip to content

Overview

About This API

The Specimen Collection Kit API (SCK API) is used for fulfillment-only kit ordering.

Use this API when Probatix is responsible for shipping specimen collection kits, but does not handle the diagnostic workflow itself.

In practice, this API focuses on:

  • browsing orderable specimen collection kit products
  • browsing available specimen collection kits
  • creating kit orders
  • checking shipment-related order details

In this API, products represent orderable catalog items, while kits represent specimen collection kit entities that may need to be tracked separately for operational or billing purposes.

It intentionally does not model diagnostic data such as observations, test results, or broader patient details beyond shipment contact information.

Filtering

Collection endpoints support query parameters for filtering and sorting results.

  • Some filters are single-value parameters: one parameter carries one value.
  • Some filters are repeatable parameters: the same parameter name is sent with [] and can be provided multiple times.
  • Repeated values for repeatable filters are OR-combined.

Single-Value Filters

Use these filters once per field.

If the same singular-value filter is passed multiple times, the last value is generally the one that is applied. However, this is not considered a supported use case and no guarantees are made about that behavior.

DateTime Filter

Used for range filtering on datetime fields with operators such as gt, gte, lt, and lte.

Accepted datetime input formats therefore include:

  • Full ISO 8601 / RFC 3339 timestamps such as 2026-01-01T00:00:00+00:00 or 2026-01-01T00:00:00Z
  • Date-only values such as 2026-02-01
  • Relative datetime expressions such as -30 minutes, yesterday, or first day of this month

Prefer timestamps with an explicit timezone offset or Z to avoid ambiguity. If no timezone is included, the server default timezone (Europe/Berlin) is used.

Examples:

  • createdAt[gt]=2026-01-01T00:00:00+00:00
  • createdAt[gte]=-30 minutes
  • createdAt[lte]=2026-01-31T23:59:59+00:00
  • activatedAt[gte]=2026-01-01T00:00:00Z
  • labIntakeAt[lt]=2026-02-01

Exact Filter

Used for exact matching on scalar values.

Examples:

  • patient.dateOfBirth[]=1994-01-15
  • patient.gender[]=F&patient.gender[]=D
  • diagnosticOrder[]=00112233-4455-6677-8899-aabbccddeeff

Exists Filter

Used to filter for resources where a property is present or absent. This is especially useful for nullable properties.

Examples:

  • exists[activatedAt]=true
  • exists[labIntakeAt]=false
  • exists[unit]=true

Free Text Query Filter

Used for whitespace-tokenized free-text search across a predefined group of fields behind one parameter.

The input is a single string, for example Jane Doe. It is split into tokens like Jane and Doe. Each token must match at least one configured field, so the token groups are AND-combined.

freeTextQuery[...] is a single-string multi-field search parameter. Unlike repeatable filters, this parameter is not sent as [].

It is more restrictive than query[...][] because the individual words should all be present somewhere across the configured fields. For example:

  • freeTextQuery[name]=Jane Doe

Sort Filter

Used to control result ordering.

Examples:

  • sort[createdAt]=asc
  • sort[createdAt]=desc

Repeatable Filters

These filters accept repeated values. Multiple values for the same filter are OR-combined.

Search Filter

Used for case-insensitive partial matching on a single string field.

Examples:

  • search[patient.firstName][]=Jane
  • search[patient.lastName][]=Doe&search[patient.lastName][]=Miller
  • search[patient.email][]=example.com

search[...][] targets one specific field per parameter. For example:

  • search[patient.firstName][]=Jane&search[patient.lastName][]=Doe

This is the most explicit option because each field is filtered independently.

Query Filter

Used for case-insensitive partial matching across a predefined group of fields behind one parameter.

Multiple values for the same query[...][] parameter are OR-combined. Each value is checked against any of the fields configured for that query profile.

query[...][] targets a predefined group of fields behind one parameter. For example:

  • query[name][]=Jane&query[name][]=Doe
  • query[onSiteBooking][]=ZKLAB

Unlike freeTextQuery[...], values are not tokenized automatically. query[name][]=Jane Doe searches for the full string Jane Doe as one value.

JSON Filters

These filters target scalar values inside JSON object fields. Dot-separated paths such as metadata.reference address nested object keys.

json_exact and json_search are rendered as deepObject query parameters in OpenAPI so examples remain faithful to the real request shape.

JSON Exact Filter

Used for exact matching on scalar values inside JSON object fields using dot-separated paths.

OpenAPI example shape:

  • json_exact[metadata.id]=["externalId","anotherId"]

JSON Exists Filter

Used to filter JSON object fields by whether a dot-separated path exists and the value is not JSON null.

Examples:

  • json_exists[metadata.yourReference1]=true
  • json_exists[metadata.partnerReference]=false

JSON Search Filter

Used for case-insensitive partial matching on scalar values inside JSON object fields using dot-separated paths.

OpenAPI example shape:

  • json_search[metadata.id]=["externalId","anotherId"]

Information

  • OpenAPI version: 3.1.0

Value for the X-API-TOKEN header parameter.

Security scheme type: apiKey

Header parameter name: X-API-TOKEN