Skip to main content
Version: 2025-12-18

Changelog

ChangedCorrected target group contracts

2 October 2026

Endpoints: Retrieve a draft target group, Create a target group in draft status, Update a target group in draft status, Retrieve a target group's changelog, Validate a profile, Generate a blended profile, Manage a target group's profiles, Calculate the supplier distribution for a new target group

The fields below are now documented as the API returns and accepts them. The API itself has not changed: if you built against the previous documentation, check your integration against these points.

  • Retrieve a draft target group: each supplier in allocations is returned as supplier_id (a string) and supplier_name, not id and name. Open exchange allocations list exchange_suppliers and blocked_suppliers, each allocation group carries a group_id, and a private exchange group returns its supplier in a supplier object. business_unit_id is an integer.
  • Create and update a draft target group: business_unit_id is an integer, as in the Retrieve a draft target group response. A number sent as a string is still accepted. Retrieve target group details and Update launched target group details still return it as a string.
  • Profiling targets without a quota: object is optional. A target with no quota needs only conditions, and quota can be left out or sent as null.
  • profiling on create and update: send profile_adjustment_type with template_id, profiles, or both. For no profiling, leave profiling out or send null.
  • Changelog: old_value and new_value on a test_url_change entry can be null.

ChangedCorrected report contracts

2 October 2026

Endpoints: Generate a report, Report request status, List report requests

The documented report contracts now match what the API returns. The API itself has not changed: if you built report polling on the previous documentation, check it against the values below.

  • Report request status: status is returned as the reporting pipeline recorded it, not as completed/in_progress. It's processing once the job is queued, then the pipeline's run state in upper case, for example RUNNING while the job runs and SUCCESS or FAILED when it ends.
  • Generate a report: a newly requested report always has status processing, not pending/emailed/failed. report_url is returned straight away, before the report has been generated, and level is Title Case (for example Project).
  • List report requests: status is processing, completed or failed, not pending. It's null when the job is in a state the service doesn't recognize, such as a timed-out run.
  • To generate an account-level report, leave filter out of the request. account isn't an accepted filter value. For these reports, create_params.filter is returned as an empty string ("").
  • report_id is a 26-character ULID, not a UUID.

AddedPer-country age limits on profiling questions

1 October 2026

Affected fields: constraints

Endpoints: List profiling questions

Returns the validation rule that applies to a profiling question's answer in the requested locale, such as the minimum and maximum age allowed. Only returned for questions that have a rule.

Version: Added to 2025-12-18.

AddedAllocation changes added to the target-group-updated webhook

1 October 2026

Twelve allocations_* change objects added to the target-group-updated webhook. Four report changes to a target group's open exchange and private exchange allocations, and eight report changes to the allocation groups within them.

Group-scoped change objects carry allocation_group_id, which identifies the allocation group the new value applies to. Without it, a change such as a group maximum percentage moving to 91 gives no indication of which group it belongs to.

Existing change objects are unaffected. If your endpoint ignores object values it does not recognize, no change is needed.

Webhooks: Understanding webhook event notifications

Version: Added to releases from 2025-05-27 onwards.

AddedApply an allocation template to a target group

30 September 2026

You can now point a target group at a saved allocation template instead of building its allocations object by hand. Send an allocation_template reference and Cint loads that template and applies it as the target group's allocation specification.

Key details:

  • allocation_template takes id, the template's ID in ULID format, and type, the scope of the template to load — global, account, or country.
  • allocations and allocation_template are mutually exclusive. Sending both is rejected.
  • When creating or updating a draft target group, exactly one of the two is required. allocations on its own is no longer a required field, so a request that supplies a template instead is now valid.
  • When checking feasibility, both fields remain optional, but you still cannot send both in one request.
  • Updating allocations on a launched or scheduled target group is unchanged. That endpoint takes an allocations object and does not accept a template reference.

Endpoints: Create a target group in draft status, Update a target group in draft status, Calculate feasibility, Calculate feasibility for an existing target group

Version: Added to 2025-12-18.

AddedAllocation changes in the target group changelog

30 September 2026

Twelve allocations_* change objects added to the target group changelog. Four report changes to a target group's open exchange and private exchange allocations, and eight report changes to the allocation groups within them.

Group-scoped change objects carry allocation_group_id, which identifies the allocation group the new value applies to. It is the same identifier that the allocation specification returns as group_id, serialized as a string, and stable for the group's lifetime.

The new values are also accepted by the change type filter, so you can narrow the changelog to allocation changes alone.

Existing change objects are unaffected. If your integration ignores object values it does not recognize, no change is needed.

Endpoints: Retrieve a target group changelog

Version: Added to 2025-12-18.

AddedCountry allocation templates

17 September 2026

Country allocation templates let you save a reusable allocation setup that is scoped to a single country within a single business unit of your account. Unlike account templates, they can also include suppliers your business unit has a private relationship with.

Key details:

  • Set is_default to true to make a template the default for its combination of business unit and country, replacing any previous default.
  • The request body uses nested open_exchange and private_exchange objects, rather than the flat supply_allocations array used by account templates.
  • Bulk endpoints let you save one setup across several countries, or inactivate several templates, in a single request. Both can partially succeed and return 207 Multi-Status.
  • Retrieving a template for a specific locale strips out suppliers that are no longer valid in that locale.

Endpoints: Create a country allocation template, Retrieve a country allocation template by ID, Retrieve a country allocation template for a locale by ID, Update a country allocation template, Inactivate a country allocation template, List country allocation templates, Retrieve the default country allocation template, Bulk create country allocation templates, Bulk inactivate country allocation templates, Retrieve the IDs of relevant default allocation templates

Version: Added to 2025-12-18.

AddedExclude respondents by activity status

9 September 2026

You can now target specific respondent statuses in respondent activity exclusions using the new optional respondent_statuses array on each exclusion item. Previously, the activity-history check matched only a Complete status (the concurrent-participation check for live target groups is unchanged).

List the same project or target group more than once, pairing each entry with a distinct set of statuses and its own duration, to apply different exclusion windows to different statuses. When omitted, respondent_statuses defaults to ["Complete"], so existing configurations are unaffected. Supported statuses: Complete, Terminate, SecurityFailure, OverQuota, FinancialTerm, PreClientSurveyProcess.

Statuses other than Complete require your account to have access to this feature.

Endpoints: Set respondent activity exclusions, Retrieve respondent activity exclusions, Create target group, Update target group, Get target group

AddedOptional gzip compression for webhook deliveries

7 September 2026

You can now receive webhook request bodies compressed with gzip. Set compression to gzip when you create or update a webhook, and every delivery for that webhook carries the Content-Encoding: gzip header. Content-Type stays application/json, because compression changes only how the body is encoded, not its media type.

Key details:

  • Compression is not enabled by default. Omit the field, or set it to null, to keep receiving uncompressed bodies.
  • The Cint-Signature header still covers the uncompressed JSON, so your existing verification code keeps working.
  • Updating a webhook replaces it, so an update that omits compression disables it. Include the field in every update to keep compression on.

Endpoints: Create webhook, Update webhook

Version: Added to all available versions.

AddedSet the filling strategy on draft target groups

31 August 2026

You can now set an optional filling_strategy when you create or update a draft target group, and it is returned when you fetch the target group. It determines how progress toward the fielding goal is counted:

  • prescreens — every respondent who passes screening counts toward the goal.
  • completes — only respondents who finish the survey count toward the goal.
  • automated — the Fielding Assistant manages how the goal is filled for you.

Key details:

  • The field is optional. If you leave it out on create, the strategy is chosen from your Fielding Assistant setup: automated when pacing, overfill prevention, fill balancing, or a soft launch is on; otherwise prescreens. Leaving it out on update keeps the current value.
  • If you set a value, it must be automated when the Fielding Assistant is managing the quotas, and completes or prescreens otherwise; a mismatch is rejected and the response names the conflicting settings.

Endpoints: Create target group, Update target group, Get target group

Version: Added to 2025-12-18.

ChangedCorrected Intelligent Calendar contracts

3 August 2026

Endpoints: Suggest time range, Suggest days

The documented Intelligent Calendar contracts now match the API.

  • The time range response returns suggested_start and suggested_end, not start and end. This applies to every API version — the service has returned these names since June 2024, so clients reading start/end received undefined.
  • locale is required on suggest time range.
  • days, start, and end are optional on suggest time range: provide either days alone, or both start and end. Combining them returns 400.
  • incidence_rate bounds are exclusive: values of exactly 0 or 1 are rejected.
  • price requires both value and currency_code. value must be a positive decimal greater than 0 encoded as a string, and currency_code accepts USD only.
  • Error examples on both endpoints now show the object values the service emits: bad_request, unauthorized, and internal_server_error.
  • A 401 on these endpoints means either that credentials are missing or invalid, or that the caller doesn't have the role required for the operation. Both cases return object: unauthorized.

ChangedCorrected questions-translation response schema

23 July 2026

Endpoints: Questions translation

The documented response schema now matches the API. Condition objects no longer show request-only fields: range conditions omit min/max, and open_ended conditions omit open_ended_values. The option_mask description now notes that it is populated only for questions that use an answer mask (and is an empty string otherwise).

ChangedRemoved obsolete profile validation error code

16 July 2026

Endpoints: Generate blended profile, Validate profiles, Manage profiles

The blended_classification_feature_not_enabled_069 error code has been removed from the profile validation error codes. Control blended profiles are now available to all accounts, so the API no longer returns this error.

ChangedAutomatic deduplication of open-ended values

1 July 2026

Endpoints: Create or update draft target group, Manage profiles, Validate profiles, Supplier distribution (draft)

Submitting duplicate open-ended values no longer causes the request to fail. The API now automatically removes duplicates in the request before validating or saving, but rejects duplicates in selection or range conditions.

The API applies the following deduplication rules:

  • Removes duplicates within each group
  • Keeps a value repeated across groups only in the first group it appears in
  • Drops any group left empty after deduplication

AddedControl blended profiles

22 June 2026

You can now use the blended_type field on blended profiles to choose between interlock (default, full matrix expansion) and control (targeted demographic capping).

Control blended profiles let you select specific conditions from two or more existing profiles and group them under a single blended profile with per-target quotas — without expanding the full matrix. This is useful for capping or pausing specific high-incidence demographic combinations.

Key details:

  • One control blended profile per target group, with up to five targets.
  • Each control target must reference conditions from at least two distinct standalone profiles.
  • Control and interlock blended profiles cannot share the same question_id in the same target group.
  • New validation error codes 065–076 for control blended profile rules.

Endpoints: Create target group, Update target group, Manage profiles, Feasibility, Validate profiles

Version: Added to 2025-12-18.

AddedReconciliation improvements: project-scoped completes, submission types, and new download option

22 June 2026

A set of related improvements to the reconciliation API, introducing a new submission workflow for project-scoped completes, better visibility into submission history, and an additional download option for outstanding completes.

Submit completes at the project level

You can now submit completes for reconciliation scoped to a specific project, without needing to supply reason codes. This is designed for workflows where you are approving a known list of respondents as completes rather than reversing individual statuses with coded reasons. Submit a CSV containing one respondent ID (UUID) per line. The submission is processed asynchronously — you'll receive a request_id in the response to track progress.

New endpoint:

Reconciliation submissions now expose submission type

Reconciliation submissions now include a submission_type field so you can see at a glance whether a submission was used to approve or reject respondent IDs. This makes it easier to audit and filter reconciliation history.

Updated endpoints:

Values:

  • approved_rids — respondent IDs submitted for approval.
  • rejected_rids — respondent IDs submitted for rejection.

Download remaining project completes

After an approved_rids submission has finished processing, you can now download a file of the completes that remain outstanding for the associated project. This gives you a clear picture of what still needs to be accounted for without cross-referencing data outside the API.

Updated endpoint: GET /demand/accounts/{account_id}/reconciliations/{request_id}/downloads/{download_type}

Pass remaining-project-completes as the download_type.

Addedsupplier_id added to target-group-updated webhook change objects

16 June 2026

supplier_id added to supplier-scoped change objects on the target-group-updated webhook. The field identifies the supplier a change applies to and is currently included on private_exchange_cpi_change change objects.

Webhooks: Understanding webhook event notifications

Version: Added to releases from 2025-05-27 onwards.

Addedrespondent_update_date added to the sessions data webhook

3 June 2026

respondent_update_date added to the sessions data webhook payload (com.cint.session.updated). This timestamp records the most recent update to a respondent session record and is updated on every status change, including reconciliations. It differs from respondent_last_date_change, which is set once when the session first reaches a terminal status and does not change thereafter.

Webhooks: Understanding webhook event notifications

Version: Added to releases from 2025-05-27 onwards.

AddedConfigurable duration for respondent activity exclusions

27 April 2026

The respondent activity exclusions duration is now configurable. You can specify how far back exclusion checks should look using a new duration field in ISO-8601 period format (date-based only, e.g. P30D, P2W, P3M, P1Y). Allowed values are between 1 and 396 days. If no duration is provided, the window defaults to P90D (90 days), preserving the previous behavior.

Updated endpoints:

AddedRespondent activity exclusions

20 April 2026

You can now exclude respondents from entering a target group based on their participation history in other projects or target groups. Exclusions are evaluated dynamically at the moment a respondent attempts to enter a survey, enabling real-time overlap prevention for concurrent live studies.

Key capabilities:

  • Unified API workflow: Pass an array of project and target group IDs in a single request to define multi-layered exclusions.
  • Real-time enforcement: Exclusion checks happen at the point of entry, keeping your sample accurate for live studies.
  • Automated 90-day window: Respondents with a Completed or In-client status in any excluded project or target group are automatically excluded for 90 days. Duration is not currently configurable.

New endpoints:

Updated endpoints:

Our configurable exclusions period will be out soon, which will allow you to make edits to the respondent activity exclusions duration period.

AddedPrivate exchange CPI added to target-group-updated webhook

27 January 2026

private_exchange_cpi_change added to the target-group-updated webhook to notify when there are changes to cost per interview (CPI) for private exchanges.

Endpoints: target-group-updated webhook

Version: Added to releases from 2025-05-27 onwards.

BreakingNew Cint Exchange Demand API version 2025-12-18

18 December 2025

We're committed to continually enhancing the Cint Exchange Demand API to help you get to insights faster and more efficiently. Based on your feedback, the 2025-12-18 API version introduces improvements across design, structure, and performance.

Please use version 2025-12-18 to access the improvements outlined below.

New integration policy

The release of the Cint Exchange Demand API version 2025-12-18 introduces a new forward-only integration policy.

What is a forward-only integration

Once the 2025-12-18 version is used for a resource such as profiling, older API versions for the same resource will not be supported.

Why we are introducing this change

The new API version introduces advanced data structures, such as open-ended grouping, that are not compatible with legacy API versions. Updating a resource that has been created or modified using the newer version via older endpoints may lead to data inconsistencies, corruption, or integration errors. This policy helps preserve data integrity, ensures access to the full capabilities of the latest API version, and delivers a consistent, interchangeable experience.

What this means for you

If you begin using the Cint Exchange Demand API version 2025-12-18 for a specific resource, for example profiling, all subsequent create, write, or update operations for that resource must use the 2025-12-18 version of the API.

This approach ensures stability, data consistency, and long-term compatibility as the platform evolves.

How can you start integration?

Please contact your Cint integration consultant to learn more about our latest API version and how to enable access on your account.

Key changes

Profiling
New profiling features
  • Group open-ended questions. This allows multiple free-text questions to be bundled under a single group instead of completely separate items. Example: product feedback grouping two questions such as "what did you like most about the product?" and "what did you like least about the product?"
  • Apply a profile template to target group endpoints.
  • Apply a profile template combined with your own profiling setup.
  • Give quotas their own name using the name field to improve tracking.
Updated profiling features
  • Interlocked profiles are no longer a standalone object and are now part of the profiling object known as "blended profiles".
  • The target object is now the central piece that links questions, conditions, and quotas. Existing use of profiles will need to be refactored to accommodate the change.
  • Property fields have been renamed to improve clarity:
    • filling_goal → completes_goal
    • quota_percentage → completes_goal_percentage
    • quota_nominal → completes_goal
    • index → condition
    • indexes → conditions
    • ungrouped → target
    • grouped → target
    • interlocked_profiles → now specified by the ENUM value blended within profiles: []
  • Endpoints have been renamed:
    • /apply-profiles → /manage-profiles
    • /create_interlocked_profile → /create-blended-profile
    • /generate-interlocked-profile → /generate-blended-profile
    • /panel-distribution → /supplier-quota-distribution
Removed profiling endpoints

The endpoints below have been removed to accommodate the declarative profiles endpoint for launched target groups:

  • PUT https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/profiles/disable-quotas
  • GET https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/profiles
  • POST https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/profiles/:profile_id/convert-to-regular-profile
  • POST https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/profiles/:profile_id/group-quotas
Example: New profile markup
"profiles": [
  {
    "object": "regular",
    "id": "01JY5Q1GY7JWX1JHQH8D1W2N9Z",
    "name": "birth gender",
    "description": "¿Es usted…?",
    "description_translated": "What is your gender?",
    "quotas_enabled": true,
    "targets": [
      {
        "id": "01JY5V5NDSVHG8S3FX63Y73K3F",
        "text": "Hombre",
        "text_translated": "Male",
        "conditions": [
          {
            "object": "selection",
            "question_id": 43,
            "option": "1"
          }
        ],
        "quota": {
          "name": "SF-BirthGender-Quota-1",
          "completes_goal_percentage": 49.21,
          "completes_goal": 492,
          "completes": 0,
          "prescreens": 0
        }
      }
    ]
  }
]
Feasibility

Updated the feasibility endpoint to simplify calls by removing the requirement for project_id:

  • Removed: POST https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/calculate-feasibility
  • New endpoint: POST https://api.cint.com/v1/demand/accounts/{account_id}/target-groups/calculate-feasibility

The supplier_ids: [] within the allocations: {} object now matches its usage across other endpoints.

General improvements

Updated error messages clarify what went wrong to increase clarity.

Additional changes

  • human_readable_id now follows snake_case standard. Affected endpoint: GET https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}
  • Target group performance endpoint currency format updated to match all other endpoints: "completes_cost": {"value": "2.7352", "currency_code": "USD", "currency_scale": null}
  • client_cpi renamed to client_cost_per_interview_note to clarify it refers to a note, not the actual CPI.
  • pricing_model and type enum value ratecard changed to rate_card (snake_case). Affected endpoints:
    • https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}
    • https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/overview
    • https://api.cint.com/v1/demand/accounts/{account_id}/business-units/{business_unit_id}/generate-price-prediction

Deprecated endpoints and attributes

  • Removed feasibility endpoint (deprecated in 2025-05-27): POST https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/calculate-feasibility
  • Removed Exclusion endpoints (deprecated in 2025-05-27):
    • GET https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/exclusions/cid
    • POST https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/exclusions/cid
    • GET https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/exclusions/rid
    • POST https://api.cint.com/v1/demand/accounts/{account_id}/projects/{project_id}/target-groups/{target_group_id}/exclusions/rid
  • Removed Download Report (deprecated from 2025-05-27): GET https://api.cint.com/v1/demand/accounts/{account_id}/reports/download
  • Removed purchase_order_number attribute (deprecated in 2025-05-27). Affected endpoints: GET/POST/PUT project endpoints.
  • Removed name attribute (deprecated in 2025-05-27). Affected endpoints: target-groups endpoints.

Next steps

If you already have an existing integration, please contact your Cint integration consultant for access to the latest version of the Cint Exchange Demand API.

If you're not yet integrated with the Cint Exchange Demand API, please contact your Cint integration consultant to learn more.