Manage quota status for a launched target group
This guide explains how to enable, disable, and manage blended quotas for target group profiles that are already launched (in a non-draft status).
During fieldwork, you may need to modify your quota strategy. For instance, you might open up certain criteria if fieldwork is slow, or remove complex interlocks to speed up completion. Cint's API offers robust capabilities to update and manage your quotas and conditions on the fly.
Key Concepts:
- Enabled quota: Respondents are counted against this profile's set quota target.
- Disabled quota: Respondents are not counted against this profile, and its quota target is inactive. They are no longer screened or allocated based on this specific quota.
- Blended profile quotas: These combine multiple profile conditions (e.g., Age AND Gender) to create specific, intersecting quota cells (e.g., "Males 25-34"). They are powerful but can sometimes slow down fieldwork if too restrictive.
Manage non-interlocked quotas
This section covers how to enable or disable individual (non-interlocked) profile quotas for a live target group.
Enable a non-interlocked quota
If you want a specific profile to actively count respondents against its quota, you need to enable it.
Steps:
- Retrieve Profiles and IDs:
- Action: Make a
GETcall to the Get Profiles endpoint for your target group.GET https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/profiles
- Purpose: This will return a list of all profiles associated with your target group, along with their unique
ids and currentquotas_enabledstatus. - Outcome: Cache the
idof the profile(s) you wish to enable. - Example Response Snippet (
GET /profilesshowing a disabled profile): JSON
- Action: Make a
{
"data": [
{
"id": "01JN3WYAXKN1DCHX9WF5617505",
"legacy_id": "244536971",
"question_id": 200842,
"name": "Cardinal regions",
"quotas_enabled": false, // Currently disabled
"description": "Regions of the world.",
"conditions": { /* ... */ },
"quotas": { /* ... */ }
},
// ... other profiles
]
}
- Enable Quota for Profile:
- Action: Make a
POSTrequest to theEnable quotas for a profileendpoint.POST https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/profiles/{profile_id}/enable-quotas
- Path Parameter: Include the specific
profile_idyou want to enable in the URL. - Headers: Include
Authorization,Cint-API-Version, and theIf-MatchETag of the target group. - Request Body: This endpoint typically has no request body.
- Purpose: To activate the quota for the specified profile.
- Action: Make a
- Verify Quota Status:
- Action: Make another
GETcall to the Get Profiles endpoint (as in Step 1). - Purpose: Check if the
quotas_enabledparameter for your desired profile is now set totrue. This confirms the change. - Example Response Snippet (after enabling,
quotas_enabledwill betrue): JSON
- Action: Make another
{
"data": [
{
"id": "01JN3WYAXKN1DCHX9WF5617505",
"legacy_id": "244536971",
"question_id": 200842,
"name": "Cardinal regions",
"quotas_enabled": true, // Now enabled
"description": "Regions of the world.",
"conditions": { /* ... */ },
"quotas": { /* ... */ }
},
// ...
]
}
Disable a non-interlocked quota
Sometimes, you might need to open up targeting criteria, especially if fieldwork is slow. Disabling a profile removes it from being an active quota, meaning respondents will no longer be screened or allocated based on it.
Important: Disabling a profile removes it from being an active quota. Respondents will no longer be screened and allocated based on this profile's criteria.
Steps:
- Retrieve Profiles and IDs:
- Action: Make a
GETcall to the Get Profiles endpoint (same as Step 1 in "Enable"). - Purpose: Obtain the
idof the profile(s) you wish to disable. - Outcome: Cache the
idof the profile(s).
- Action: Make a
- Disable Quota for Profile:
- Action: Make a
POSTrequest to theDisable quotas for a profileendpoint.POST https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/profiles/{profile_id}/disable-quotas
- Path Parameter: Include the specific
profile_idyou want to disable in the URL. - Headers: Include
Authorization,Cint-API-Version, and theIf-MatchETag of the target group. - Request Body: This endpoint typically has no request body.
- Purpose: To deactivate the quota for the specified profile.
- Action: Make a
- Verify Quota Status:
- Action: Make another
GETcall to the Get Profiles endpoint. - Purpose: Check if the
quotas_enabledparameter for the desired profile is now set tofalse. This confirms the change. - Example Response Snippet (after disabling,
quotas_enabledwill befalse): JSON
- Action: Make another
{
"data": [
{
"id": "01JN3WYAXKN1DCHX9WF5617505",
"legacy_id": "244536971",
"question_id": 200842,
"name": "Cardinal regions",
"quotas_enabled": false, // Now disabled
"description": "Regions of the world.",
"conditions": { /* ... */ },
"quotas": { /* ... */ }
}
// ...
]
}
Manage interlocked quotas
Interlocked quotas are powerful for precise audience distribution but can sometimes hinder fieldwork if too complex. This section explains how to remove existing interlocks or create new ones for live target groups.
Remove interlock conditions from quotas
Removing interlocks can help ease complexity and potentially speed up fieldwork. When you remove an interlock, the individual profile quotas (e.g., Age and Gender) will remain, but they will no longer be linked in a combined quota.
Example: You have Age and Gender profiles interlocked, and you want to remove the interlocking between them.
Steps:
- Retrieve Interlocked Profile ID:
- Action: Make a
GETcall to the Get Profiles endpoint (as in Part 1, Step 1). - Purpose: This provides you with a list of profiles, including their
ids and theinterlock_ids (if they are part of an interlock). You need to identify theidof the interlocked profile itself, not just the individual profiles within it. - Outcome: Cache the
idof the interlocked profile you intend to remove. - Example Response Snippet (
GET /profilesshowing interlocked ID): JSON
- Action: Make a
{
"data": [],
"interlocked_profile": {
"id": "01JP2K4BKAAVS6RFRZ8NXMR3CA", // This is the interlocked profiler ID you need
"name": "AGE, GENDER",
"quotas_enabled": true,
"depends_on_questions": [42, 43],
// ... (rest of interlocked profile details)
},
"profiles": [
{
"id": "01JP2JKW9ZC2VHR9WKYP9SD4KV", // Individual Age profile
"interlock_id": "01JP2K4BKAAVS6RFRZ8NXMR3CA", // Points to the interlocked ID
// ...
},
{
"id": "01JP2JKW9ZC2VHR9WKYP9SD4KZ", // Individual Gender profile
"interlock_id": "01JP2K4BKAAVS6RFRZ8NXMR3CA", // Points to the interlocked ID
// ...
}
]
}
- Remove interlocks:
- Action: Make a
POSTrequest to theRemove interlocksendpoint.POST https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/interlocked-profiles/remove
- Path Parameters: Include your
account_id,project_id, andtarget_group_idin the URL. - Request Headers: Include
Authorization,Cint-API-Version, and theIf-MatchETag of the target group. - Request Body:
- Content-Type:
application/json - Structure: JSON
- Content-Type:
- Action: Make a
{
"interlocked_profile_id": "01JP2K4BKAAVS6RFRZ8NXMR3CA"
}
interlocked_profile_id(string, required): The unique ID of the interlocked profile you obtained in Step 1.- Purpose: This action dissolves the interlocking relationship between the specified profiles. The API will respond with an updated structure of profiling for the target group, reflecting the removal of the interlock and showing the individual profile quotas.
- Example cURL Request for
Remove interlocks: Bash
curl -X POST \
'https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/interlocked-profiles/remove' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_JWT_TOKEN>' \
-H 'Cint-API-Version: 2025-12-18' \
-H 'If-Match: W/"<YOUR_CURRENT_ETAG>"' \
-d '{
"interlocked_profile_id": "01JP2K4BKAAVS6RFRZ8NXMR3CA"
}'
- Outcome: A successful
POSTrequest will return anHTTP 200 OKstatus code. The response body will contain the updated target group profile structure.
- Example Response from
Remove interlocks: The response will show the individual profiles (e.g., Age and Gender) now present in thedataarray, each withis_interlocked: false, and theinterlocked_profileobject will no longer be present or will benull. Theirquotas_enabledwill remaintrueunless explicitly disabled. JSON
{
"data": [
{
"id": "01JP2JKW9ZC2VHR9WKYP9SD4KV", // Individual Age profile
"legacy_id": "246353061",
"question_id": 42,
"name": "AGE",
"quotas_enabled": true, // Quotas remain enabled
"description": "What is your age?",
"conditions": { /* ... */ },
"quotas": { /* ... */ },
"is_interlocked": false // Now a non-interlocked profile
},
{
"id": "01JP2JKW9ZC2VHR9WKYP9SD4KZ", // Individual Gender profile
"legacy_id": "246353063",
"question_id": 43,
"name": "GENDER",
"quotas_enabled": true, // Quotas remain enabled
"description": "Are you...?",
"conditions": { /* ... */ },
"quotas": { /* ... */ },
"is_interlocked": false // Now a non-interlocked profile
}
]
}
- Result: Your live target group will now contain multiple non-interlocked profiles for each question that was previously part of the interlocked section. Each of these individual profiles will have its quotas enabled by default.
Next step (optional): Disable individual quotas
If your goal was not just to remove the interlock but also to completely disable the quotas for these individual profiles, you would then follow the steps in "Disable a non-interlocked quota" (Part 1, Steps 2-3) for each of the now-unlocked individual profiles (e.g., for the Age profile and the Gender profile separately).
Enable (create) interlocked quotas
If you launched your target group without interlocked quotas or previously removed them, you can add them back in. This will create a new, combined quota structure.
Steps:
-
Retrieve Profile IDs:
- Action: If you don't have them cached, make a
GETcall to the Get Profiles endpoint to retrieve theids of the non-interlocked profiles you want to combine. - Purpose: Gather the specific profile
ids (e.g., for "Age" and "Gender") that you intend to interlock.
- Action: If you don't have them cached, make a
-
Create an Interlocked Profile:
- Action: Make a
POSTcall to theCreate an interlocked profileendpoint.POST https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/interlocked-profiles/create
- Path Parameters: Include your
account_id,project_id, andtarget_group_idin the URL. - Request Headers: Include
Authorization,Cint-API-Version,Content-Type: application/json, and theIf-MatchETag of the target group. - Request Body: JSON
- Action: Make a
{
"target_group_filling_goal": 5, // Total filling goal for the target group
"profiles": [
"01JN1FRXKDTQBG6WE3FC4AN8CX", // ID of Age profile
"01JN1FRXKERTZ3DYJKRC02M2ND" // ID of Gender profile
]
}
target_group_filling_goal(integer, required): The overall desired number of completes for the target group. This value helps calculate the nominal quotas for the interlocked segments.profiles(array of strings, required): An array containing theids of the individual profiles you want to interlock.- Purpose: This generates a new interlocked profile from the specified non-interlocked profiles.
- Example Request Body for
Create an interlocked profile: JSON
{
"target_group_filling_goal": 50,
"profiles": [
"01JP2JKW9ZC2VHR9WKYP9SD4KV",
"01JP2JKW9ZC2VHR9WKYP9SD4KZ"
]
}
- Example cURL Request for
Create an interlocked profile: Bash
curl -X POST \
'https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/interlocked-profiles/create' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_JWT_TOKEN>' \
-H 'Cint-API-Version: 2025-12-18' \
-H 'If-Match: W/"<YOUR_CURRENT_ETAG>"' \
-d '{
"target_group_filling_goal": 50,
"profiles": [
"01JP2JKW9ZC2VHR9WKYP9SD4KV",
"01JP2JKW9ZC2VHR9WKYP9SD4KZ"
]
}'
- Outcome: A successful response will return a new structure of profiling for the target group, now including the newly generated
interlocked_profileobject. The individual profiles (Age and Gender in this example) will now have aninterlock_idpointing to the new combined interlock.
- Example Response from
Create an interlocked profile: The response shows theinterlocked_profilewith its ownid, name, and derived quotas for each segment (e.g., "18-24, Male"). Theprofilesarray within this response will show your original Age and Gender profiles, now updated with aninterlock_idlinking them to the new combined interlock. JSON
{
"data": [],
"interlocked_profile": {
"id": "01JP2K4BKAAVS6RFRZ8NXMR3CA",
"name": "AGE, GENDER",
"quotas_enabled": true,
"depends_on_questions": [42, 43],
"quotas": {
"ungrouped": [
{
"id": "01JP2K4BKB35DE38AGEWT3F2GK",
"text": "18-24, Male",
"quota_percentage": 0, // These will be calculated when used in target group
"filling_goal": 0,
"quota_nominal": 0,
"condition": { /* ... */ }
},
// ... other interlocked segments (18-24 Female, 25-35 Male, etc.)
],
"grouped": []
},
"profiles": [
{
"id": "01JP2JKW9ZC2VHR9WKYP9SD4KV", // Original Age profile
"question_id": 42,
"interlock_id": "01JP2K4BKAAVS6RFRZ8NXMR3CA", // Now linked to the new interlock
"quotas_enabled": true,
// ... other Age profile details
},
{
"id": "01JP2JKW9ZC2VHR9WKYP9SD4KZ", // Original Gender profile
"question_id": 43,
"interlock_id": "01JP2K4BKAAVS6RFRZ8NXMR3CA", // Now linked to the new interlock
"quotas_enabled": true,
// ... other Gender profile details
}
]
}
}
Troubleshooting
HTTP 412 Precondition failed: This error occurs if theIf-MatchETag header you sent with yourPOSTrequest is outdated. Always perform aGETcall to retrieve the latest ETag immediately before making an update request to a live target group.HTTP 404 Not found: Theaccount_id,project_id, ortarget_group_idin your URL, or theprofile_id/interlocked_profile_idin the request body, is incorrect or does not exist.HTTP 400 Bad request:- For
Create an interlocked profile, ensuretarget_group_filling_goalis provided as an integer and theprofilesarray contains valid profile IDs from your target group. - For
Remove interlocks, ensure theinterlocked_profile_idin the request body is valid and corresponds to an active interlocked profile. - Verify that the target group is in a non-draft (live) status for these operations.
- Check for any other validation messages in the error response (e.g., if one of the profiles you're trying to interlock is already part of another interlock).
- For
- Quota not changing:
- Confirm the
profile_idand/orinterlocked_profile_idused in the call is correct. - Verify the target group's ETag was up-to-date.
- Confirm the
- Interlock complexity/feasibility: Be aware that highly complex or restrictive interlocked quotas might limit respondent availability, potentially increasing costs and extending fieldwork time. Monitor your target group statistics and utilize the Feasibility System to assess impact.