ZoomInfo GTM Studio API

Audiences as a spreadsheet — folders, audiences, AI-computed columns with declared data dependencies, and rows with single and bulk upsert. Enrichment of an audience is an asynchronous job polled by job ID.

OpenAPI Specification

zoominfo-gtm-gtm-studio-v1-openapi.json Raw ↑
{"openapi":"3.0.0","info":{"title":"GTM Studio API V1","version":"1.0","contact":{"name":"ZoomInfo Customer Support","email":"help@zoominfo.com"},"description":"GTM Studio API for interacting with the GTM Studio related services."},"tags":[{"name":"Audiences"}],"paths":{"/studio/v1/folders":{"post":{"operationId":"Folders_createFolder","summary":"Create New Folder","description":"Creates a new folder for organizing audiences in GTM Studio.\nFolders group related audiences together, making it easier to navigate and manage large collections — for example, grouping by campaign, region, or team.\nSpecify `name` and optionally set `starred` to `true` to mark the folder for quick access. The folder is created empty; audiences are assigned to it via the Create Audience or Update Audience endpoints using `folderId`.\nReturns `201 Created` with the full folder resource including the system-assigned `folderId` and creation metadata.\nReturns `400` if required fields are missing or invalid.","parameters":[],"responses":{"201":{"description":"Created","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/FolderJsonApiModel"}}}},"400":{"description":"Bad Request","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"429":{"description":"Too Many Requests","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}}},"tags":["Audiences"],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/FolderJsonApiModelCreate"}}},"description":"Request body containing the folder creation details"},"security":[{"OAuth2Auth":["api:audience:manage"]}],"x-additional-content-types":["application/json"],"x-api-roles":["lim:wkb"]},"get":{"operationId":"Folders_listFolders","summary":"List Folders","description":"Retrieves a paginated list of all folders, with optional filtering and sorting.\nUse this endpoint to browse the folder structure or to find a `folderId` before creating or moving an audience.\nFilter by `createdById`, `updatedById`, `searchText` (partial name match), or date ranges (`createdAfter`, `createdBefore`, `updatedAfter`, `updatedBefore`).\nUse `sort` to order results by `name`, `createdAt`, `updatedAt`, `audienceCount`, or `recentlyViewed`; prefix with `-` for descending order (default: `-updatedAt`).\nUse `page[number]` and `page[size]` (default `25`, max `100`) to paginate.\nReturns `200` with a paginated array of folder resources including `audiences` (list of audience IDs in each folder) and navigation links.\nReturns `400` if filter or sort parameters are invalid.","parameters":[{"name":"page[number]","in":"query","required":false,"description":"Page number for the results.","schema":{"type":"integer","format":"int32","minimum":1,"default":1},"explode":false},{"name":"page[size]","in":"query","required":false,"description":"Number of records to return per page. Default is 25.","schema":{"type":"integer","format":"int32","minimum":1,"maximum":100,"default":25},"explode":false},{"name":"sort","in":"query","required":false,"description":"Field based on which to sort the results. Use '-' prefix for descending order.\nAllowed values: name, createdAt, updatedAt, audienceCount, recentlyViewed","schema":{"type":"string","default":"-updatedAt"},"explode":false},{"name":"filter[createdById]","in":"query","required":false,"description":"Filter folders by userId of the creator.","schema":{"type":"array","items":{"type":"integer","format":"uint32"}},"explode":false},{"name":"filter[updatedById]","in":"query","required":false,"description":"Filter folders by userId of the last updated person.","schema":{"type":"array","items":{"type":"integer","format":"uint32"}},"explode":false},{"name":"filter[searchText]","in":"query","required":false,"description":"Search folders by name (partial match).","schema":{"type":"string"},"explode":false},{"name":"filter[createdAfter]","in":"query","required":false,"description":"Filter folders created after a specific date. Eg: 2025-10-10T17:08:00Z","schema":{"type":"string","format":"date-time"},"explode":false},{"name":"filter[createdBefore]","in":"query","required":false,"description":"Filter folders created before a specific date. Eg: 2025-10-10T17:08:00Z","schema":{"type":"string","format":"date-time"},"explode":false},{"name":"filter[updatedAfter]","in":"query","required":false,"description":"Filter folders updated after a specific date. Eg: 2025-10-10T17:08:00Z","schema":{"type":"string","format":"date-time"},"explode":false},{"name":"filter[updatedBefore]","in":"query","required":false,"description":"Filter folders updated before a specific date. Eg: 2025-10-10T17:08:00Z","schema":{"type":"string","format":"date-time"},"explode":false}],"responses":{"200":{"description":"Success","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/FolderJsonApiList"}}}},"400":{"description":"Bad Request","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"429":{"description":"Too Many Requests","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}}},"tags":["Audiences"],"security":[{"OAuth2Auth":["api:audience:read"]}],"x-api-roles":["lim:wkb"]}},"/studio/v1/folders/{folderId}":{"get":{"operationId":"Folders_getFolderById","summary":"Get Specific Folder","description":"Retrieves the full state of a single folder by its `folderId`.\nReturns all folder attributes — name, starred status, description, notes, creation and update timestamps, and the list of `audienceId` values contained in the folder.\nUse this endpoint to inspect a folder's contents before operating on its audiences, or to verify folder state after an update.\nReturns `200` with the folder resource.\nReturns `404` if no folder matches the provided `folderId`.","parameters":[{"name":"folderId","in":"path","required":true,"description":"The ID of the folder to retrieve.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/FolderJsonApiModel"}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"404":{"description":"Not Found","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"429":{"description":"Too Many Requests","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}}},"tags":["Audiences"],"security":[{"OAuth2Auth":["api:audience:read"]}],"x-api-roles":["lim:wkb"]},"patch":{"operationId":"Folders_updateFolder","summary":"Update Folder","description":"Updates one or more attributes of an existing folder without requiring a full replacement.\nSupported fields: `name`, `starred`, `description`, and `notes`. Only fields present in the request body are modified; all other attributes remain unchanged.\nUse this endpoint to rename a folder, star or unstar it, or update its description and notes.\nReturns `200` with the updated folder resource.\nReturns `404` if no folder matches the provided `folderId`.","parameters":[{"name":"folderId","in":"path","required":true,"description":"The ID of the folder to update.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/FolderJsonApiModel"}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"429":{"description":"Too Many Requests","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}}},"tags":["Audiences"],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/UpdateFolderJsonApiModel"}}},"description":"Request body containing the folder update details"},"security":[{"OAuth2Auth":["api:audience:manage"]}],"x-additional-content-types":["application/json"],"x-api-roles":["lim:wkb"]},"delete":{"operationId":"Folders_deleteFolder","summary":"Delete Specific Folder","description":"Permanently deletes a folder from GTM Studio.\nDeleting a folder removes the audiences it contained as well.\nThis action is irreversible.\nReturns `204 No Content` on success.\nReturns `404` if no folder matches the provided `folderId`.","parameters":[{"name":"folderId","in":"path","required":true,"description":"The ID of the folder to delete.","schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Success","content":{"application/vnd.api+json":{"schema":{"nullable":true}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"429":{"description":"Too Many Requests","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}}},"tags":["Audiences"],"security":[{"OAuth2Auth":["api:audience:manage"]}],"x-api-roles":["lim:wkb"]}},"/studio/v1/audiences":{"post":{"operationId":"Audiences_createAudience","summary":"Create New Audience","description":"Create a named working list of people (`CONTACT`) or companies (`COMPANY`) to drive a GTM motion — campaign targeting, enrichment runs, outbound sequences, or importing leads from trade shows and events.\n\nYou can define the audience name, audience type (`CONTACT` or `COMPANY`), and the source of the audience.\nSupported audience sources are:\n- `CUSTOM`: audience has no linked source dataset.\n- `ZOOMINFO_PUBLIC_API`: audience is defined by `zoomInfoSearchCriteria`.\nRequests to create audiences can optionally include definitions for columns to be added to the audience.\nIf no column definitions are provided, the audience will be created without any columns, and columns may\nbe added in the future using the [Create New Columns](ref:columns_addcolumns) endpoint.\n\n**Folders:** Every audience must live in a folder. Pass `folderId` to place it in an existing folder (use [List Folders](ref:folders_listfolders) to find one). If `folderId` is omitted, GTM Studio automatically creates a new folder with the same name as the audience.\n\n**Columns:** Define columns up front — they describe the shape of data you intend to load. The `columnId` values returned here are required when loading rows via [Bulk Upsert Rows](ref:rows_upsertrows). Choose `dataType` carefully — it cannot be changed after creation. If `columns` is omitted, the audience is created with no columns; add them later via [Create New Columns](ref:columns_addcolumns) before loading any rows.\n\nFor `zoomInfoSearchCriteria`, use the [Lookup Data](ref:lookupinterface_lookup) endpoint to retrieve valid values.\n\nReturns `201 Created` with the audience resource.\nReturns `400` if required fields are missing or `type` is invalid.","parameters":[{"name":"autoMatchCriteria","in":"query","required":false,"description":"When `true`, the system uses AI to automatically infer and apply match criteria mappings for columns (for example, mapping an \"Email\" column to `CONTACT_EMAIL`). Defaults to `false`. Set to `true` to enable auto-mapping; leave `false` to define match criteria manually.","schema":{"type":"boolean","default":false},"explode":false}],"responses":{"201":{"description":"Created","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/CreateAudienceResponseJsonApiModel"}}}},"400":{"description":"Bad Request","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"429":{"description":"Too Many Requests","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}}},"tags":["Audiences"],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/AudienceJsonApiModel"}}},"description":"Request body containing the audience creation details"},"security":[{"OAuth2Auth":["api:audience:manage"]}],"x-additional-content-types":["application/json"],"x-api-roles":["lim:wkb"]},"get":{"operationId":"Audiences_listAudiences","summary":"List Audiences","description":"Search and browse all GTM Studio audiences. The primary way to discover an `audienceId` before loading rows, managing columns, or triggering enrichment. Also use this to check what audiences already exist before creating a duplicate.\n\n**Filters:**\n- `filter[type]`: `CONTACT` or `COMPANY`\n- `filter[searchText]`: case-insensitive partial match on audience name\n\n**Sorting:** `sort` accepts `name`, `createdAt`, `updatedAt`, or `recordCount`. Prefix with `-` for descending order. Default: `-updatedAt`.\n\n**Pagination:** `page[number]` (default `1`) and `page[size]` (default `25`, max `100`).\n\nReturns `200` with a paginated list of audience resources and navigation links.\nReturns `400` if filter or sort parameters are invalid.","parameters":[{"name":"page[number]","in":"query","required":false,"description":"Page number for the results.","schema":{"type":"integer","format":"int32","minimum":1,"default":1},"explode":false},{"name":"page[size]","in":"query","required":false,"description":"Number of records to return per page. Default is 25.","schema":{"type":"integer","format":"int32","minimum":1,"maximum":100,"default":25},"explode":false},{"name":"sort","in":"query","required":false,"description":"Field based on which to sort the results. Use '-' prefix for descending order.\nAllowed values: name, createdAt, updatedAt, recordCount","schema":{"type":"string","default":"-updatedAt"},"explode":false},{"name":"filter[type]","in":"query","required":false,"description":"Filter audiences by record type. `CONTACT` for person-level records; `COMPANY` for account-level records.","schema":{"$ref":"#/components/schemas/AudienceType"},"explode":false},{"name":"filter[searchText]","in":"query","required":false,"description":"Search audiences by name using a case-insensitive contains match.","schema":{"type":"string"},"explode":false}],"responses":{"200":{"description":"Success","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/AudiencesJsonApiList"}}}},"400":{"description":"Bad Request","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"429":{"description":"Too Many Requests","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}}},"tags":["Audiences"],"security":[{"OAuth2Auth":["api:audience:read"]}],"x-api-roles":["lim:wkb"]}},"/studio/v1/audiences/{audienceId}":{"get":{"operationId":"Audiences_getAudience","summary":"Fetch Audience","description":"Retrieves the full state of a single audience by its `audienceId`.\nReturns all audience attributes — name, type, source origin, current `recordCount`, folder location, creation and update timestamps, and the complete column structure with all column properties.\nUse this endpoint to check audience configuration before writing rows or before running enrichment.\nReturns `200` with the audience resource.\nReturns `404` if no audience matches the provided `audienceId`.","parameters":[{"name":"audienceId","in":"path","required":true,"description":"The unique identifier for the audience","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ReadAudienceDetailJsonApiModel"}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"404":{"description":"Not Found","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"429":{"description":"Too Many Requests","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}}},"tags":["Audiences"],"security":[{"OAuth2Auth":["api:audience:read"]}],"x-api-roles":["lim:wkb"]},"delete":{"operationId":"Audiences_deleteAudience","summary":"Delete Audience","description":"Permanently deletes an audience and all associated data — rows, column definitions, and enrichment history.\nThis action is irreversible; the audience and all its data cannot be recovered after deletion.\nUse this endpoint only when retiring an audience entirely; to remove specific records, use the Delete Rows endpoint instead.\nReturns `204 No Content` on success.\nReturns `404` if no audience matches the provided `audienceId`.","parameters":[{"name":"audienceId","in":"path","required":true,"description":"The unique identifier for the audience","schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"Success","content":{"application/vnd.api+json":{"schema":{"nullable":true}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"429":{"description":"Too Many Requests","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}}},"tags":["Audiences"],"security":[{"OAuth2Auth":["api:audience:manage"]}],"x-api-roles":["lim:wkb"]},"patch":{"operationId":"Audiences_patchAudience","summary":"Update Audience","description":"Updates one or more metadata attributes of an existing audience without requiring a full replacement.\nSupported fields: `name`, `folderId`, `description`, and `notes`. Only fields present in the request body are modified; all other attributes remain unchanged.\nUse this endpoint to rename an audience, move it to a different folder, or update its description or notes.\nReturns `200` with the updated audience resource.\nReturns `400` if the request body is malformed or contains unsupported fields.\nReturns `404` if no audience matches the provided `audienceId`.","parameters":[{"name":"audienceId","in":"path","required":true,"description":"The unique identifier for the audience","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ReadAudienceJsonApiModel"}}}},"400":{"description":"Bad Request","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"429":{"description":"Too Many Requests","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}}},"tags":["Audiences"],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/AudienceUpdateJsonApiModel"}}},"description":"Request body containing the audience patch details"},"security":[{"OAuth2Auth":["api:audience:manage"]}],"x-additional-content-types":["application/json"],"x-api-roles":["lim:wkb"]}},"/studio/v1/audiences/{audienceId}/filter-metadata":{"get":{"operationId":"Audiences_getAudienceFilterMetadata","summary":"Get Audience Filter Metadata","description":"Returns the available filter operators for each column in the specified audience.\nUse this endpoint before building a filter-based row query to discover which operators — such as `EQUALS`, `CONTAINS`, `NOT_EQUALS` are supported for each column.\nThe response includes per-operator configuration: whether multiple values are supported (`isMultipleSupported`), the maximum number of allowed values (`valueCountLimit`), and the minimum character requirement per value for string-based operators (`minCharLimit`).\nUse this metadata to validate filter inputs client-side before sending a List Rows request.\nReturns `200` with a list of `FilterMetadata` objects keyed by `columnId`.\nReturns `404` if no audience matches the provided `audienceId`.","parameters":[{"name":"audienceId","in":"path","required":true,"description":"The unique identifier for the audience","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/AudienceFilterMetadataJsonApiModel"}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"404":{"description":"Not Found","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"429":{"description":"Too Many Requests","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}}},"tags":["Audiences"],"security":[{"OAuth2Auth":["api:audience:read"]}],"x-api-roles":["lim:wkb"]}},"/studio/v1/audiences/{audienceId}/actions/match-criteria":{"post":{"operationId":"Audiences_upsertMatchCriteria","summary":"Upsert Column Match Criteria","description":"Upserts match criteria for the audience's designated match column (the column used for enrichment matching).\nMatch criteria define how audience column values are mapped to ZoomInfo attributes (for example, mapping an \"Email\" column to `CONTACT_EMAIL`) for enrichment resolution.\n\nIf a request body is provided, the supplied match criteria are applied directly — each entry maps an audience `columnId` to a ZoomInfo attribute field.\nIf the request body is omitted or `matchCriteria` is not provided, the system attempts to auto-map match criteria using AI.\nIf the match column does not exist, it will be created automatically.\n\nExisting match criteria on the audience's match column are replaced by the new values.\nReturns `200` with the updated match column resource.\nReturns `400` if a `columnId` does not exist in the audience or a `mappedTo` value is invalid.\nReturns `404` if no audience matches the provided `audienceId`.","parameters":[{"name":"audienceId","in":"path","required":true,"description":"The unique identifier for the audience","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ReadColumnJsonApiModel"}}}},"400":{"description":"Bad Request","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"404":{"description":"Not Found","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"429":{"description":"Too Many Requests","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}}},"tags":["Audiences"],"requestBody":{"required":false,"content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/UpsertMatchCriteriaRequestJsonApiModel"}}},"description":"Request body containing match criteria to apply. If omitted, auto-mapping is attempted for all eligible columns."},"security":[{"OAuth2Auth":["api:audience:manage"]}],"x-additional-content-types":["application/json"],"x-api-roles":["lim:wkb"]}},"/studio/v1/audiences/{audienceId}/actions/enrich":{"post":{"operationId":"Audiences_enrichAudience","summary":"Enrich Audience","description":"Initiates an asynchronous enrichment job that appends ZoomInfo intelligence data to rows in the specified audience.\n\nThe request body must include a `scope` field specifying the enrichment target:\n- `AUDIENCE`: Enriches all rows in the audience. The `rows` and `columns` fields are optional.\n- `ROW`: Enriches specific rows by `rowId`. The `rows` field is required and must contain at least one element. The `columns` field is optional.\n\nThis operation is asynchronous. Returns `202 Accepted` with an `EnrichJob` resource containing the job id.\nPoll the [Get Async Job Status](ref:jobs_getAsyncJobStatus) endpoint at `GET /v1/audiences/{audienceId}/jobs/{jobId}` using that job id to monitor progress and detect `SUCCEEDED`, `PARTIALLY_SUCCEEDED`, or `FAILED` terminal states.\n\nReturns `202 Accepted` on successful job creation.\nReturns `204 No Content` if no rows match the provided scope.\nReturns `400` for malformed requests, missing required fields, or invalid scope combinations.\nReturns `402` if enrichment cannot be processed for the account.\nReturns `404` if no audience matches the provided `audienceId`.","parameters":[{"name":"audienceId","in":"path","required":true,"description":"The unique identifier for the audience","schema":{"type":"string","format":"uuid"}}],"responses":{"202":{"description":"Success","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/EnrichJobJsonApiModel"}}}},"204":{"description":"Success","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/EnrichJobJsonApiModel"}}}},"400":{"description":"Bad Request","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"402":{"description":"Payment Required","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"404":{"description":"Not Found","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"429":{"description":"Too Many Requests","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}}},"tags":["Audiences"],"requestBody":{"required":true,"content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/AudienceEnrichmentJsonApiModel"}}},"description":"Request body containing the enrichment details"},"security":[{"OAuth2Auth":["api:audience:manage"]}],"x-additional-content-types":["application/json"],"x-api-roles":["lim:wkb"]}},"/studio/v1/audiences/{audienceId}/jobs/{jobId}":{"get":{"operationId":"Audiences_getJobStatus","summary":"Get Job Status","description":"Returns the current status and progress of any previously initiated asynchronous job for an audience.\nCovers all job types: `AUDIENCE_CREATE`, `AUDIENCE_ENRICH`, and `ROW_UPSERT`.\nProvide the `audienceId` and `jobId` returned by the originating operation.\nThe response includes the job status — one of `SCHEDULED` (queued), `RUNNING` (actively processing), `SUCCEEDED` (finished successfully), `PARTIALLY_SUCCEEDED` (completed with some failures), `FAILED` (terminated with errors), or `CANCELLED` — and a `percentProgress` value.\nReturns `200` with the job status resource.\nReturns `404` if the `audienceId` or `jobId` does not exist.","parameters":[{"name":"audienceId","in":"path","required":true,"description":"The unique identifier for the audience.","schema":{"type":"string","format":"uuid"}},{"name":"jobId","in":"path","required":true,"description":"The unique identifier for the job.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Success","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/JobStatusResponseJsonApiModel"}}}},"401":{"description":"Unauthorized","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"403":{"description":"Forbidden","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"404":{"description":"Not Found","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}},"429":{"description":"Too Many Requests","content":{"application/vnd.api+json":{"schema":{"$ref":"#/components/schemas/ZoomInfo.Core.Foundations.ErrorResponseModel"}}}}},"tags":["Audiences"],"security":[{"OAuth2Auth":["api:audience:read"]}],"x-api-roles":["lim:wkb"]}},"/studio/v1/audiences/{audienceId}/columns/actions/bulk/create":{"post":{"operationId":"Columns_addColumns","summary":"Create New Columns","description":"Add columns to an audience to define the shape of data it holds. Do this before loading rows — `columnId` values returned here are required by [Bulk Upsert Rows](ref:rows_upsertrows). Choose `dataType` carefully — it cannot be changed after creation.\n\n**Supported `dataType` values for `CUSTOM` columns:**\n- Text: `TEXT` (short labels, names, <2000 chars), `LARGE_TEXT` (notes, descriptions, >2000 chars)\n- Contact data: `EMAIL` (single address), `PHONE` (single number), `URL` (website or domain)\n- Numbers: `INTEGER` (whole numbers), `DECIMAL` (floating-point), `PERCENT`, `CURRENCY`\n- Boolean: `BOOLEAN`, `CHECKBOX`\n- Dates: `DATE` (calendar date, no time component)\n- Arrays: `STRING_LIST`, `NUMBER_LIST`, `EMAIL_LIST`, `PHONE_LIST`, `URL_LIST`\n- Structured: `OBJECT` (JSON)\n\n**Column types:**\n- `CUSTOM` — Values you load directly via Bulk Upsert Rows. Requires `name` a

# --- truncated at 32 KB (157 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/zoominfo/refs/heads/main/openapi/zoominfo-gtm-gtm-studio-v1-openapi.json