openapi: 3.0.3 info: title: Demand Accounts Target Groups (Batch) API description: 'Cint''s demand ordering API is REST oriented. It has predictable resource based URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs. Error responses are also JSON-encoded and follow a standard format, providing a unique error ID and detailed information about what went wrong. Authentication is handled via bearer tokens passed in the `Authorization` header. All requests must also include a `Cint-API-Version` header with a date in `YYYY-MM-DD` format to specify the desired API version. Depending on the version you use, endpoint behavior may differ as we improve our API with every version release. While many operations work on a single object per request, the demand ordering API also provides asynchronous batch endpoints for performing bulk updates efficiently on certain resources. For safety, `POST` requests support an `Idempotency-Key` header to allow for safe retries without accidentally performing the same operation twice. ' version: '2025-12-18' servers: - description: Production server url: https://api.cint.com/v1 security: - BearerAuth: [] tags: - name: Target Groups (Batch) description: Asynchronously create, update and delete Target Groups in batches. paths: /demand/accounts/{account_id}/projects/{project_id}/batch-jobs/update-target-group-project-managers: parameters: - $ref: '#/components/parameters/CintAPIVersion-2025-12-18' post: summary: Create a bulk update target group project managers job description: This endpoint creates an asynchronous job to update the project manager for one or more target groups within a specific project. Because the update is processed in the background, a successful request immediately returns a 201 Created status with a Location header. The header contains the URL to the job, which you can use to track its progress. operationId: create_bulk_update_target_group_project_manager_job parameters: - $ref: '#/components/parameters/AccountID' - $ref: '#/components/parameters/ProjectID' requestBody: description: The request body for creating a bulk update job. required: true content: application/json: schema: $ref: '#/components/schemas/CreateBulkUpdateTargetGroupProjectManagerJobRequest' example: - project_manager_id: b551326b-ac9d-4d32-8823-4f025787dab9 - target_group_ids: - 01BTGNYV6HRNK8K8VKZASZCFP1 - 01BTGNYV6HRNK8K8VKZASZCFP2 tags: - Target Groups (Batch) responses: '201': description: Returns a 201 Created response with a Location header pointing to the newly created job. headers: traceparent: description: The `traceparent` header carries the trace ID and parent span ID, as defined by the W3C Trace Context specification. It's used to trace a single request as it moves through multiple services. required: false schema: $ref: '#/components/schemas/Traceparent' tracestate: description: The `tracestate` header complements the `traceparent` header by carrying vendor-specific trace information. This allows different services to add their own data to a trace. required: false schema: $ref: '#/components/schemas/Tracestate' location: description: 'Contains the URL where a new resource can be found, often returned with a `201 Created` response. It follows the format defined in RFC 7231. ' required: true schema: type: string format: uri-reference description: A reference to the resource's location. This can be a full URL, a relative path, or just the resource ID. example: full-url: summary: A full URL to the resource value: https://api.cint.com/demand/business-units relative-path: summary: A relative path to the resource value: /demand/business-units resource-id: summary: A resource ID value: fe666fcd-490c-4cb4-b4e0-2f86e15c27e6 '400': $ref: '#/components/responses/Error_BadRequest' '401': $ref: '#/components/responses/Error_Unauthorized' '403': $ref: '#/components/responses/Error_Forbidden' '404': $ref: '#/components/responses/Error_NotFound' '500': $ref: '#/components/responses/Error_Internal' /demand/accounts/{account_id}/projects/{project_id}/batch-jobs/update-target-group-project-managers/{job_id}: parameters: - $ref: '#/components/parameters/CintAPIVersion-2025-12-18' get: summary: Retrieves a bulk update target group project managers job description: After creating a bulk update job, you can use this endpoint to check its status. You'll need to poll this endpoint until the job's status changes from `Processing` to either `Completed` or `Failed` to get the final results. operationId: get_bulk_update_target_group_project_manager_job parameters: - $ref: '#/components/parameters/AccountID' - $ref: '#/components/parameters/ProjectID' - $ref: '#/components/parameters/JobID' tags: - Target Groups (Batch) responses: '200': description: Returns the details of the bulk update job, including its current status (`Processing` ,`Completed`, or `Failed`) and the final results. headers: traceparent: description: The `traceparent` header carries the trace ID and parent span ID, as defined by the W3C Trace Context specification. It's used to trace a single request as it moves through multiple services. required: false schema: $ref: '#/components/schemas/Traceparent' tracestate: description: The `tracestate` header complements the `traceparent` header by carrying vendor-specific trace information. This allows different services to add their own data to a trace. required: false schema: $ref: '#/components/schemas/Tracestate' content: application/json: schema: $ref: '#/components/schemas/GetBulkUpdateTargetGroupProjectManagerJobResponse' examples: JobProcessing: summary: When the job is processing value: job_id: 01BTGNYV6HRNK8K8VKZASZCFP1 created_at: '2023-01-01T23:00:00.000Z' status: Processing project_manager_id: b551326b-ac9d-4d32-8823-4f025787dab9 updated_target_groups: null failed_target_groups: null JobCompleted: summary: When the job is complete description: An example of a completed job with both successfully updated and failed target groups. value: job_id: 01BTGNYV6HRNK8K8VKZASZCFP1 created_at: '2023-01-01T23:00:00.000Z' status: Completed project_manager_id: b551326b-ac9d-4d32-8823-4f025787dab9 updated_target_groups: data: - target_group_id: 01BTGNYV6HRNK8K8VKZASZCFP1 target_group_name: Test Target Group A has_more: false failed_target_groups: data: - target_group_id: 01BTGNYV6HRNK8K8VKZASZCFP2 target_group_name: Test Target Group B failure_reason: code: TargetGroupNotFound description: Target group not found. has_more: false '400': $ref: '#/components/responses/Error_BadRequest' '401': $ref: '#/components/responses/Error_Unauthorized' '403': $ref: '#/components/responses/Error_Forbidden' '404': $ref: '#/components/responses/Error_NotFound' '500': $ref: '#/components/responses/Error_Internal' components: schemas: JobID: description: The character string representing a unique job ID. type: string example: 01BTGNYV6HRNK8K8VKZASZCFP1 CreateBulkUpdateTargetGroupProjectManagerJobRequest: type: object description: The request body used to create a job that updates the project manager for multiple target groups. properties: project_manager_id: $ref: '#/components/schemas/UserID' target_group_ids: $ref: '#/components/schemas/TargetGroupIds' BulkUpdatedTargetGroups: type: object description: A list of target groups that were successfully processed in the bulk job. properties: data: type: array items: type: object properties: target_group_id: $ref: '#/components/schemas/TargetGroupID' required: - target_group_id has_more: type: boolean description: This field is always `false` as the list of updated or failed target groups is not paginated and will always be returned in full. enum: - false required: - data - has_more BulkJobStatus: type: string description: The status of an asynchronous bulk job. `Processing` indicates the job is still running. `Completed` or `Failed` are terminal states. enum: - Completed - Failed - Processing InvalidParam: type: object description: Describes a single invalid parameter in a request. properties: name: type: string description: The name of the parameter that failed validation. reason: type: string description: A short explanation of why the parameter was invalid. required: - name - reason GetBulkUpdateTargetGroupProjectManagerJobResponse: type: object description: The response payload containing the details of a bulk update job. properties: job_id: $ref: '#/components/schemas/JobID' created_at: type: string format: date-time description: The date and time when the job was created, in ISO 8601 format. example: '2023-01-01T23:00:00.000Z' status: $ref: '#/components/schemas/BulkJobStatus' project_manager_id: description: The unique identifier of the project manager assigned in this job. $ref: '#/components/schemas/UserID' updated_target_groups: description: A list of target groups that were successfully updated by the job. This object is `null` until the job's status is `Completed`. $ref: '#/components/schemas/BulkUpdatedTargetGroups' failed_target_groups: description: A list of target groups that failed to update. This object is `null` until the job's status is `Completed`. $ref: '#/components/schemas/BulkFailedTargetGroups' TargetGroupID: description: A unique identifier for the target group, in ULID format. type: string pattern: ^[0-9A-Z]{26}$ example: 01BTGNYV6HRNK8K8VKZASZCFP1 Traceparent: type: string description: 'The traceparent header carries essential trace context information. This includes the trace ID and parent span ID as defined by the W3C trace context specification. It is used to pinpoint the position of an incoming request within the trace graph, facilitating the tracking of distributed operations. Note: This field is optional and will be automatically generated by the service if not provided in the request. The generated value will be included in the response header.' example: 00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01 BulkFailedTargetGroups: type: object description: A list of target groups that failed to be processed in the bulk job, along with the reason for failure. properties: data: type: array items: type: object properties: target_group_id: $ref: '#/components/schemas/TargetGroupID' failure_reason: $ref: '#/components/schemas/BulkJobFailureReason' required: - target_group_id - failure_reason has_more: type: boolean description: This field is always `false` as the list of updated or failed target groups is not paginated and will always be returned in full. enum: - false required: - data - has_more Error: type: object description: The standard error object returned for all failed API requests. required: - object - detail properties: id: type: string format: uuid description: A unique identifier for this specific error instance. object: type: string description: A short informative string identifying the type of the error pattern: ^([a-z]*_)*([a-z]*)$ detail: type: string description: An error message provides a concise overview of the cause of the error. invalid_params: type: array nullable: true description: An optional field containing a list of invalid parameters may be presented in validation errors for additional information. items: $ref: '#/components/schemas/InvalidParam' BulkJobFailureReason: type: object properties: code: type: string description: A machine-readable code for the failure reason. example: TargetGroupNotFound description: type: string description: A human-readable explanation of why the operation failed for this target group. example: Target group not found. TargetGroupIds: type: array description: An array of unique target group identifiers to be processed in a bulk job. minItems: 1 items: $ref: '#/components/schemas/TargetGroupID' ProjectID: description: The character string representing a unique project ID (ULID format). type: string pattern: ^[0-9A-Z]{26}$ example: 01BTGNYV6HRNK8K8VKZASZCFP0 Tracestate: type: string description: 'The tracestate header provides additional contextual information to the traceparent header. This enriches the tracing context and offers more fine-grained control Note: This field is optional and will be automatically generated by the service if not provided in the request. The generated value will be included in the response header.' example: ot=foo:bar;k1:13 UserID: type: string format: uuid description: A unique identifier for the user. example: b551326b-ac9d-4d32-8823-4f025787dab9 AccountID: description: The account's unique identifier. type: integer format: int32 example: 101 responses: Error_NotFound: description: A requested resource isn't found. content: application/json: schema: $ref: '#/components/schemas/Error' example: id: 7a5972ba-0825-4360-b852-fa2430e47034 object: not_found_error detail: resource not found Error_Internal: description: A request failed due to an internal error. content: application/json: schema: $ref: '#/components/schemas/Error' example: id: d94b8bb2-a540-4a91-9c05-2aa3ae9a5e1e object: unexpected_internal_error detail: an internal error has led to the failure of this operation Error_Forbidden: description: A requested is forbidden. content: application/json: schema: $ref: '#/components/schemas/Error' example: id: fe68cdd2-ee87-4dbf-8950-63c5cbca94c7 object: authorization_error detail: you don't have the right permissions to perform this operation Error_Unauthorized: description: A request is unauthorized. content: application/json: schema: $ref: '#/components/schemas/Error' example: id: 1dcf0f40-f0d1-4cf6-8c00-c3d019d32faf object: authorization_error detail: no valid authorization provided for this operation Error_BadRequest: description: A request is not valid and can't be processed. content: application/json: schema: $ref: '#/components/schemas/Error' example: id: 9e278238-d011-4e05-8327-1ce1d5d26254 object: bad_request_error detail: Expected field 'foo' is missing. parameters: ProjectID: name: project_id description: A unique identifier for the project, in ULID format. in: path required: true schema: $ref: '#/components/schemas/ProjectID' CintAPIVersion-2025-12-18: name: Cint-API-Version in: header required: true schema: type: string example: 2025-12-18 description: 'This header is MANDATORY for all API requests. The API version format is `YYYY-MM-DD`. ' JobID: name: job_id description: The character string representing a unique job ID. in: path required: true schema: $ref: '#/components/schemas/JobID' AccountID: name: account_id description: The account's unique identifier. in: path required: true schema: $ref: '#/components/schemas/AccountID' securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: JWT description: Bearer token used for authentication and authorization. See [Authentication Process](https://developer.cint.com/en/guides#authentication-process) documentation for more information. ApiKeyAuth: type: apiKey in: header name: Authorization description: API Key Authentication