How to get feasibility estimates for the target group you would like to launch
Feasibility requests let you simulate a target group launch based on your targeting criteria. This provides insights into your potential audience reach and costs to help you refine your project plan and budget.
Before you can get the feasibility for a target group, you'll need to have:
- Your unique account ID:
{account_id}path parameter - Your API authentication token (JWT):
<YOUR_JWT_TOKEN> - Your business unit ID:
<YOUR_BUSINESS_UNIT_ID>
For a deeper understanding of how our feasibility calculations work, you can refer to our guide on how Cint's feasibility works.
See the feasibility API reference documentation for further references.
Step 1: Prepare your feasibility request body
First, you'll construct the JSON payload that defines the parameters for your feasibility query. This includes details like your desired locale, expected incidence rate, defined profile, and completes goal, along with pricing information.
For the direct cURL examples, skip to Step 2: Make the feasibility request.
Fields to consider:
business_unit_id(string, required): This is your unique business unit identifier.locale(string, required): The target locale (e.g., "eng_us"). See our list of supported locales for all valid codes.collects_pii(boolean, required): You should set this totrueif your survey collects personally identifiable information, andfalseotherwise.expected_incidence_rate(number, required): Your expected survey incidence rate (IR) as a decimal (e.g., 0.5 for 50%).expected_length_of_interview_minutes(number, required): Your estimated length of interview (LOI) in minutes (e.g., 20).completes_goal(number, required): Your desired number of completes (e.g., 40).fielding_specification(object, required): This defines the fieldwork start and end dates.start_at(string, required): The start date and time of fieldwork in RFC3339 UTC format.end_at(string, required): The end date and time of fieldwork in RFC3339 UTC format.
price(object, conditionally required): The proposed cost per interview. This is specific to business units associated with the dynamic pricing model. Find out more about feasibility for dynamic pricing here. Parameter is ignored if using rate card pricing model.value(string, required): The monetary value.currency_code(string, required): The ISO 4217 currency code (e.g., "USD").
rate_card_price_boost(object, conditionally optional): An optional amount to add to your rate card price. This is specific to business units associated with rate card pricing model. Find out more about feasibility for rate card pricing here. Parameter is ignored if using dynamic pricing model.value(string, required): The monetary value.currency_code(string, required): The ISO 4217 currency code.
profiling(object, required): This contains an array defining the demographic and behavioral targeting criteria. This matches the profile used when creating a target group. An empty array ([]) means no specific profile targeting beyond the locale. You can refer to the Cint profile question library for valid profile questions and options.profile_adjustment_type(string, required): The method for adjusting the profile. Valid values arepercentageornominal.profiles(array of objects, required): An array of profile objects defining your targeting criteria.object(string, required): The profile object type. For regular profiles, useregular.quotas_enabled(boolean, required): Set totrueto enable quotas for this profile.targets(array of objects, required): An array of target objects defining specific targeting conditions and quotas.conditions(array of objects, required): An array of condition objects that specify the targeting criteria.object(string, required): The condition object type. For range conditions, userange.question_id(integer, required): The unique identifier for the profiling question.min(integer, required): The minimum value for the range condition.max(integer, required): The maximum value for the range condition.
quota(object, required): The quota settings for this target.- For percentage-based quotas:
completes_goal_percentage(integer, required): The percentage of the total completes goal allocated to this target (e.g., 50 for 50%).
- For absolute quotas:
completes_goal(integer, required): The absolute number of completes allocated to this target (e.g., 250).
- For percentage-based quotas:
allocations(object, optional): Allows you to specify allocations for different supplier sources. If omitted, the system will use default allocation settings.open_exchange_allocations(object, optional): Defines allocations for the Open Exchange supply source.min_completes(integer, optional): The minimum number of completes to allocate from Open Exchange.max_completes(integer, optional): The maximum number of completes to allocate from Open Exchange.groups(array of objects, optional): An array of group allocation objects for more granular control.group_id(string, required): The unique identifier for the supply group.min_completes(integer, required): The minimum number of completes to allocate from this group.max_completes(integer, required): The maximum number of completes to allocate from this group.
Step 2: Make the feasibility request
Next, you'll send your prepared request body to the feasibility endpoint.
- API endpoint:
POST https://api.cint.com/v1/demand/accounts/{account_id}/target-groups/calculate-feasibility
Reminder, you will need the following to make the request:
- Your unique account ID:
{account_id}path parameter - Your API authentication token (JWT):
<YOUR_JWT_TOKEN> - Your business unit ID:
<YOUR_BUSINESS_UNIT_ID> - Cint API Version:
2025-12-18
Example cURL request
- Rate card pricing
- Dynamic pricing
curl -L 'https://api.cint.com/v1/demand/accounts/{account_id}/target-groups/calculate-feasibility' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <YOUR_JWT_TOKEN>' \
-H 'Cint-API-Version: 2025-12-18' \
-d '{
"business_unit_id": "<YOUR_BUSINESS_UNIT_ID>",
"locale": "eng_us",
"collects_pii": false,
"expected_incidence_rate": 0.25,
"expected_length_of_interview_minutes": 15,
"completes_goal": 500,
"fielding_specification": {
"start_at": "2026-08-01T10:00:00.000Z",
"end_at": "2026-08-31T10:00:00.000Z"
},
"rate_card_price_boost": {
"value": "2.00",
"currency_code": "USD"
},
"profiling": {
"profile_adjustment_type": "nominal",
"profiles": [
{
"object": "regular",
"quotas_enabled": true,
"targets": [
{
"conditions": [
{
"object": "range",
"question_id": 42,
"min": 18,
"max": 34
}
],
"quota": {
"completes_goal": 250
}
},
{
"conditions": [
{
"object": "range",
"question_id": 42,
"min": 35,
"max": 65
}
],
"quota": {
"completes_goal": 250
}
}
]
}
]
}'
curl -L 'https://api.cint.com/v1/demand/accounts/{account_id}/target-groups/calculate-feasibility' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer <YOUR_JWT_TOKEN>' \
-H 'Cint-API-Version: 2025-12-18' \
-d '{
"business_unit_id": "<YOUR_BUSINESS_UNIT_ID>",
"locale": "eng_us",
"collects_pii": false,
"expected_incidence_rate": 0.25,
"expected_length_of_interview_minutes": 15,
"completes_goal": 500,
"fielding_specification": {
"start_at": "2026-08-01T10:00:00.000Z",
"end_at": "2026-08-31T10:00:00.000Z"
},
"price": {
"value": "1.00",
"currency_code": "USD"
},
"profiling": {
"profile_adjustment_type": "nominal",
"profiles": [
{
"object": "regular",
"quotas_enabled": true,
"targets": [
{
"conditions": [
{
"object": "range",
"question_id": 42,
"min": 18,
"max": 34
}
],
"quota": {
"completes_goal": 250
}
},
{
"conditions": [
{
"object": "range",
"question_id": 42,
"min": 35,
"max": 65
}
],
"quota": {
"completes_goal": 250
}
}
]
}
]
}
}'
Remember to replace all bracketed placeholders (e.g., <YOUR_BUSINESS_UNIT_ID>, {account_id}) with your actual values.
Step 3: Interpret the feasibility response
A successful request will return an HTTP 200 OK status code and a JSON object containing the feasibility estimate.
Example successful response
- Rate card pricing
- Dynamic pricing
{
"suggested_price": {
"value": "1.25",
"currency_code": "USD",
"currency_scale": 2
},
"suggested_completes_goal_range": {
"min": 450,
"max": 525
},
"profiles": [
{
"object": "regular",
"targets": [
{
"conditions": [
{
"object": "range",
"question_id": 12413,
"min": 18,
"max": 34
}
],
"quota": {
"min_completes": {
"projected_completes_goal": 225
},
"max_completes": {
"projected_completes_goal": 262
}
}
}
]
}
],
"allocations": {
"open_exchange_allocations": {
"min_completes": 450,
"max_completes": 525,
"groups": []
}
}
}
Response field descriptions:
suggested_price(object): The recommended cost per interview (CPI) based on your query.value(string): The monetary value.currency_code(string): The ISO 4217 currency code.currency_scale(integer): The number of decimal places for the currency.
suggested_completes_goal_range(object): A range that indicates the minimum and maximum number of completes you can achieve.min(integer): The minimum achievable completes.max(integer): The maximum achievable completes.
profiles(array of objects): An array reflecting the profile targets and their respective quotas as defined in your request.object(string): The profile object type.targets(array of objects): An array of target objects defining specific targeting conditions and quotas.conditions(array of objects): An array of condition objects that specify the targeting criteria.quota(object): The quota settings for this target.min_completes(object): The minimum completes achievable for this target.projected_completes_goal(integer): The projected minimum completes goal.
max_completes(object): The maximum completes achievable for this target.projected_completes_goal(integer): The projected maximum completes goal.
allocations(object, optional): Allows you to specify allocations for different supplier sources, if available. This will benullif it's not applicable or not provided.open_exchange_allocations(object): Details about the Open Exchange allocations.min_completes(integer): The minimum number of completes allocated from Open Exchange.max_completes(integer): The maximum number of completes allocated from Open Exchange.groups(array of objects): An array of group allocation objects for more granular control. This will be an empty array if no specific groups were defined.
{
"suggested_price": {
"value": "2.73",
"currency_code": "USD",
"currency_scale": 2
},
"suggested_price_range": {
"min": {
"value": "2.73",
"currency_code": "USD",
"currency_scale": 2
},
"max": {
"value": "2.73",
"currency_code": "USD",
"currency_scale": 2
}
},
"suggested_completes_goal_range": {
"min": 450,
"max": 525
},
"profiles": [
{
"object": "regular",
"targets": [
{
"conditions": [
{
"object": "range",
"question_id": 12413,
"min": 18,
"max": 34
}
],
"quota": {
"min_completes": {
"projected_completes_goal": 225
},
"max_completes": {
"projected_completes_goal": 262
}
}
}
]
}
],
"allocations": {
"open_exchange_allocations": {
"min_completes": 450,
"max_completes": 525,
"groups": []
}
}
}
Response field descriptions:
suggested_price(object): The recommended cost per interview (CPI) based on your query.value(string): The monetary value.currency_code(string): The ISO 4217 currency code.currency_scale(integer): The number of decimal places for the currency.
suggested_price_range(object): A range that indicates the minimum and maximum suggested CPI.min(object): The minimum suggested price.max(object): The maximum suggested price.
suggested_completes_goal_range(object): A range that indicates the minimum and maximum number of completes you can achieve.min(integer): The minimum achievable completes.max(integer): The maximum achievable completes.
profiles(array of objects): An array reflecting the profile targets and their respective quotas as defined in your request.object(string): The profile object type.targets(array of objects): An array of target objects defining specific targeting conditions and quotas.conditions(array of objects): An array of condition objects that specify the targeting criteria.quota(object): The quota settings for this target.min_completes(object): The minimum completes achievable for this target.projected_completes_goal(integer): The projected minimum completes goal.
max_completes(object): The maximum completes achievable for this target.projected_completes_goal(integer): The projected maximum completes goal.
allocations(object, optional): Allows you to specify allocations for different supplier sources, if available. This will benullif it's not applicable or not provided.
Feasibility with profiles
If you have defined profiles for your target group, include them in your feasibility request to receive detailed feasibility information for each quota defined in your profiles.
Please review the draft target group feasibility API reference closely, as you'll need to map your profile objects.
Example cURL request:
curl -X POST \
'https://api.cint.com/v1/demand/accounts/{account_id}/target-groups/calculate-feasibility' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_JWT_TOKEN>' \
-H 'Cint-API-Version: 2025-12-18' \
-d '{
"business_unit_id": "<YOUR_BUSINESS_UNIT_ID>",
"locale": "eng_us",
"collects_pii": false,
"expected_incidence_rate": 0.25,
"expected_length_of_interview_minutes": 15,
"completes_goal": 500,
"fielding_specification": {
"start_at": "2026-08-01T10:00:00.000Z",
"end_at": "2026-08-31T10:00:00.000Z"
},
"profiling": {
"profile_adjustment_type": "nominal",
"profiles": [
{
"object": "regular",
"quotas_enabled": true,
"targets": [
{
"conditions": [
{
"object": "range",
"question_id": 42,
"min": 18,
"max": 34
}
],
"quota": {
"completes_goal": 250
}
},
{
"conditions": [
{
"object": "range",
"question_id": 42,
"min": 35,
"max": 65
}
],
"quota": {
"completes_goal": 250
}
}
]
}
]
}
}'
Remember to replace all bracketed placeholders (e.g., <YOUR_BUSINESS_UNIT_ID>) with your actual values.
A successful request will return an HTTP 200 OK status code and a JSON object containing the feasibility estimate.
Example response:
{
"suggested_price": {
"value": "0.623098203",
"currency_code": "USD",
"currency_scale": 2
},
"suggested_price_range": {
"min": {
"value": "0.577661639",
"currency_code": "USD",
"currency_scale": 2
},
"max": {
"value": "0.623098203",
"currency_code": "USD",
"currency_scale": 2
}
},
"suggested_filling_goal_range": {
"min": 500,
"max": 500
},
"profiles": [
{
"object": "regular",
"targets": [
{
"conditions": [
{
"object": "range",
"question_id": 42,
"min": 18,
"max": 34
}
],
"quota": {
"min_completes": {
"projected_completes_goal": 250,
"projected_completes_percentage": 100
},
"max_completes": {
"projected_completes_goal": 250,
"projected_completes_percentage": 100
}
}
},
{
"conditions": [
{
"object": "range",
"question_id": 42,
"min": 35,
"max": 65
}
],
"quota": {
"min_completes": {
"projected_completes_goal": 250,
"projected_completes_percentage": 100
},
"max_completes": {
"projected_completes_goal": 250,
"projected_completes_percentage": 100
}
}
}
]
}
],
"allocations": {
"open_exchange_allocations": {
"exchange_min_completes": 500,
"exchange_max_completes": 500,
"groups": []
}
}
}
Troubleshooting Common Issues
- HTTP 400 Bad Request:
- Check that all required fields in the request body are present and correctly formatted (e.g., dates are RFC3339 UTC, numeric values should be provided as numbers, not strings).
- Ensure your
expected_incidence_rate(IR) is between 0.01 and 1.00 (as a numeric value, not a string). - Verify locale is valid and supported.
- Inspect the response body for any feedback on specific invalid parameters/attributes.
- HTTP 401 Unauthorized: Your JWT token is missing or invalid. Refer to the Authentication Guide.
- HTTP 403 Forbidden: Your JWT token is valid, but it does not have the necessary permissions for this operation.
- HTTP 404 Not Found: The
account_idin the URL path is incorrect or does not exist. - Unrealistic Feasibility Results (e.g., 0 completes):
- Review your profiles array. Are the question IDs and options valid? Are the quotas realistic for the target demographic?
- Check your
expected_incidence_rate(IR) andexpected_length_of_interview_minutes(LOI). Very low IRs or very long LOIs can severely impact feasibility. - Ensure your
fielding_specification.start_atandfielding_specification.end_atdefine a sufficient fielding window. - Consider increasing your CPI to make the opportunity more attractive to panelists.
- "insert your Business Unit ID" / Placeholders: Make sure you've replaced all placeholder values (<YOUR_BUSINESS_UNIT_ID>, <YOUR_ACCOUNT_ID>, etc.) with your actual data before making the request.