How to manage quota status for a launched target group
This guide explains how to enable, disable, and manage interlocked quotas for target group profiles that are already launched (in a non-draft status). These capabilities allow you to dynamically adjust your fieldwork strategy.
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.
- Interlocked 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.
Part 1: Managing non-interlocked quotas
This section covers how to enable or disable individual (non-interlocked) profile quotas for a live target group.
How to 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.
- Action: Make a
Example response snippet (GET /profiles showing a disabled profile):
{
"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
AuthorizationandCint-API-Version. - 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.
- Action: Make another
Example response snippet (after enabling, quotas_enabled will be true):
{
"data": [
{
"id": "01JN3WYAXKN1DCHX9WF5617505",
"legacy_id": "244536971",
"question_id": 200842,
"name": "Cardinal regions",
"quotas_enabled": true, // Now enabled
"description": "Regions of the world.",
"conditions": { /* ... */ },
"quotas": { /* ... */ }
},
// ...
]
}
How to 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.
Disabling a profile removes it from being an active quota. Respondents will no longer be screened or 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 "How to 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
AuthorizationandCint-API-Version. - 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.
- Action: Make another
Example response snippet (after disabling, quotas_enabled will be false):
{
"data": [
{
"id": "01JN3WYAXKN1DCHX9WF5617505",
"legacy_id": "244536971",
"question_id": 200842,
"name": "Cardinal regions",
"quotas_enabled": false, // Now disabled
"description": "Regions of the world.",
"conditions": { /* ... */ },
"quotas": { /* ... */ }
}
// ...
]
}
Part 2: Managing 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.
How to 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 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. You need to identify the
idof the interlocked profile itself, which is theprofile_idyou'll use in the next step. - Outcome: Cache the
idof the interlocked profile you intend to remove.
- Action: Make a
Example response snippet (GET /profiles showing interlocked profile):
{
"data": [],
"interlocked_profile": {
"id": "01JP2K4BKAAVS6RFRZ8NXMR3CA", // This is the profile 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}/profiles/{profile_id}/remove-interlocks
- Path parameters: Include your
account_id,project_id,target_group_id, and theprofile_idof the interlocked profile in the URL. - Request headers: Include
AuthorizationandCint-API-Version. - Request body: This endpoint has no request body.
- 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:
- Action: Make a
curl -X POST \
'https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/profiles/{profile_id}/remove-interlocks' \
-H 'Authorization: Bearer <YOUR_JWT_TOKEN>' \
-H 'Cint-API-Version: 2025-05-27'
- 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.
{
"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 "How to 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).
How to 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 the create interlocked profile endpoint.POST https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/profiles/create-interlocked-profile
- Path parameters: Include your
account_id,project_id, andtarget_group_idin the URL. - Request headers: Include
Authorization,Cint-API-Version, andContent-Type: application/json. - Request body:
- 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:
{
"target_group_filling_goal": 50,
"profiles": [
"01JP2JKW9ZC2VHR9WKYP9SD4KV",
"01JP2JKW9ZC2VHR9WKYP9SD4KZ"
]
}
- Example cURL request for
Create an interlocked profile:
curl -X POST \
'https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/profiles/create-interlocked-profile' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer <YOUR_JWT_TOKEN>' \
-H 'Cint-API-Version: 2025-05-27' \
-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.
{
"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 404 Not Found: Theaccount_id,project_id, ortarget_group_idin your URL, or theprofile_id/interlock_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 theinterlock_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/orinterlock_idused in the call is correct.
- Confirm the profile
- 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.