---
title: "Show Study predicted recruitment time"
method: POST
path: "/api/v1/studies/predicted-recruitment-time/"
tags: ["studies"]
---

# Show Study predicted recruitment time

`POST /api/v1/studies/predicted-recruitment-time/`

Returns the predicted recruitment time for a study that has not even been saved as a draft if it was published right now, based on a machine learning model.
The recruitment time is the time from publish to the time when the final participant starts their submission.
It does not account for the time to complete the submission.

## Headers

- `Authorization` string, required

## Request body

- StudyPredictedRecruitmentTimeRequest
  - `filters` StudyPredictedRecruitmentTimeRequestFiltersItems[], required — List of filters to apply to the count. This parameter uses the new, simplified filters schema for interacting with eligibility.
    - union
      - SelectFilter
        - `filter_id` string, required — ID of the "select" type filter.
        - `selected_values` string[], required — This schema applies for filters of the `select` type, as defined in the [filter list response](\#tag/Filters/paths/~1api~1v1~1filters~1/get). Array of IDs matching the response IDs, from the `select` filter's `choices` (see response linked above). String format should match the `data_type` of the `select` filter's `choices` (see response linked above).
        - `weightings` object — Ratios to control the distribution of participants across the selected values. Integer percentages, floats, and exact quantities are valid inputs.
      - RangeFilter
        - `filter_id` string, required — ID of the "range" type filter.
        - `selected_range` RangeFilterSelectedRange, required — This schema applies for filters of the `range` type, as defined in the [filter list response](\#tag/Filters/paths/~1api~1v1~1filters~1/get). A dictionary with two possible objects, 'lower' and 'upper'. At least one must be present and a non-null value. The expected data type for these values is defined by the `range` filter's `data_type` (see response linked above). If the data_type is a date, string format should be a parseable ISO8601 date string. Date values should be provided as a string in ISO 8601 format. Leaving a value as null will result in that bound being set to the lowest or highest possible value, depending on whether it is the upper or lower bound.
          - `lower` union — Your selected lower bound for the range.
            - integer
            - string
            - number, double
          - `upper` union — Your selected upper bound for the range.
            - integer
            - string
            - number, double
        - `weightings` object — Ratios to control the distribution of participants across the selected values. Integers and exact quantities are valid inputs.
      - CompositeFilter
        - `filter_id` 'and' | 'or', required — Composite filter group operator. Use `and` when every child filter must match, or `or` when at least one child filter must match.
        - `selected_filters` CompositeFilterSelectedFiltersItems[], required — Child filters in this group. Children can be select filters, range filters, or supported nested composite groups.
          - union
            - SelectFilter
              - …
            - RangeFilter
              - …
            - CompositeFilter — recursive
  - `workspace_id` string, required — The ID of the workspace the study will be created in.
  - `reward` number, double, required — How much are you going to pay the participants in cents. We use the currency of the workspace
  - `study_type` 'SINGLE' | 'UK_REP_SAMPLE' | 'REP_SAMPLE_UK_ENGLISH_AGE_POLITICAL_AFFILIATION_ETHNICITY' | 'REP_SAMPLE_UK_ENGLISH_AGE_POLITICAL_AFFILIATION' | 'US_REP_SAMPLE' | 'REP_SAMPLE_US_ENGLISH_AGE_POLITICAL_AFFILIATION_ETHNICITY' | 'REP_SAMPLE_US_ENGLISH_AGE_POLITICAL_AFFILIATION' | 'UK_REGIONAL_REP_SAMPLE' | 'US_REGIONAL_REP_SAMPLE', required — Type of study.
  - `total_available_places` number, double, required — How many participants are you looking to recruit
  - `estimated_completion_time` integer, required — Estimated duration in minutes of the experiment or survey
  - `device_compatibility` StudyPredictedRecruitmentTimeRequestDeviceCompatibilityItems[] — Add all devices that participants can use. You can include one or more options.
  - `peripheral_requirements` StudyPredictedRecruitmentTimeRequestPeripheralRequirementsItems[] — Add all requirements that participants have to meet.
  - `study_labels` 'survey' | 'writing_task' | 'annotation' | 'decision_making_task' | 'interview' | 'other' | 'ai_annotation' | 'ai_evaluation' | 'ai_reasoning' | 'ai_fact_checking' | 'ai_safety' | 'ai_data_creation_text' | 'ai_data_creation_audio' | 'ai_data_creation_video' | 'ai_data_creation_images' | 'ai_other' — The field that the study is about to get tagged with.

## Response `200`

Return the predicted recruitment time for the study

- StudyPredictedRecruitmentTimeResponse
  - `precise_recruitment_time_hours` number, double — The predicted recruitment time in hours
  - `lower_bound_hours` number, double — The lower bound of the predicted recruitment time in hours
  - `upper_bound_hours` number, double — The upper bound of the predicted recruitment time in hours
  - `display_string` string — A human-readable string representing the predicted recruitment time
  - `limit_at` number, double — The limit at which the accuracy of the prediction becomes unstable. This should be used when rendering the recruitment times in a GUI. For example if the limit_at is 10, and the predicted recruitment time is 12 hours, the display string should be "10 hours+". This has been done for you in the display_string field.

## Other responses

- `400` — Error

---

[API](https://skmtc.net/prolific/apis/api-reference.md) · [All operations](https://skmtc.net/prolific/apis/api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/prolific/api-reference/versions/dc6f073a9827/schema)
