{ "openapi": "3.0.0", "info": { "title": "StreetMetrics Public API", "description": "", "version": "3.0", "contact": {} }, "tags": [ { "name": "public", "description": "" } ], "servers": [ { "url": "https://dashboard.streetmetrics.io/v3/public/" } ], "components": { "securitySchemes": { "bearer": { "scheme": "bearer", "bearerFormat": "JWT", "type": "http" } }, "schemas": { "ErrorResponseDto": { "type": "object", "properties": { "status": { "type": "string", "description": "Status of the response", "example": "error" }, "statusCode": { "type": "number", "description": "HTTP status code", "example": 400 }, "errorCode": { "type": "string", "description": "Custom error code", "example": "ERR001" }, "message": { "type": "string", "description": "Error message", "example": "Invalid input data" }, "details": { "type": "object", "description": "Additional details about the error", "nullable": true }, "timestamp": { "type": "string", "description": "Timestamp of the error", "example": "2024-08-26T14:56:29.000Z" }, "path": { "type": "string", "description": "Request path where the error occurred", "example": "/api/v1/resource" } }, "required": [ "status", "statusCode", "errorCode", "message", "details", "timestamp", "path" ] }, "ClientMediaFaceEntityDto": { "type": "object", "properties": { "mediaId": { "type": "number", "description": "Unique identifier for the media entity" }, "facePosition": { "type": "string", "description": "Position of the face on the media" }, "faceDimension": { "type": "object", "description": "Dimensions of the face" } }, "required": [ "mediaId", "facePosition", "faceDimension" ] }, "ClientMediaEntityDto": { "type": "object", "properties": { "mediaId": { "type": "number", "description": "Unique identifier for the media entity" }, "classRef": { "type": "string", "description": "Reference class for the media entity" }, "assetOwner": { "type": "string", "description": "Owner of the asset" }, "productType": { "type": "string", "description": "Type of product associated with the media" }, "combined": { "type": "boolean", "description": "Indicates if the media is combined" }, "assetType": { "type": "string", "description": "Type of asset" }, "mediaFormat": { "type": "string", "description": "Format of the media" }, "mediaPlacement": { "type": "string", "description": "Placement of the media" }, "faces": { "description": "List of faces associated with the media", "type": "array", "items": { "$ref": "#/components/schemas/ClientMediaFaceEntityDto" } } }, "required": [ "mediaId", "classRef", "assetOwner", "productType", "combined", "assetType", "mediaFormat", "mediaPlacement", "faces" ] }, "ClientAssetEntityDto": { "type": "object", "properties": { "assetOwner": { "type": "string", "description": "The owner of the asset." }, "assetType": { "type": "string", "description": "The type of the asset." }, "assetRef": { "type": "string", "description": "The asset identifier as it appears through the API feed." }, "classRef": { "type": "string", "description": "The class associated with the asset - this defined the media products the asset can support" }, "displayName": { "type": "string", "description": "The name of the asset as it will appear in the StreetMetrics platform." }, "assetStatus": { "type": "string", "description": "The status of the asset." }, "metaData": { "type": "object", "description": "The metadata of the asset." } } }, "ClientFrameEntityDto": { "type": "object", "properties": { "frameId": { "type": "number", "description": "Unique identifier for the frame entity" }, "frameRef": { "type": "string", "description": "Reference for the frame" }, "frameWidth": { "type": "number", "description": "Width of the frame" }, "frameHeight": { "type": "number", "description": "Height of the frame" }, "frameElevation": { "type": "number", "description": "Elevation of the frame" }, "frameType": { "type": "string", "description": "Type of the frame" }, "expositionAngle": { "type": "number", "description": "Exposition angle of the frame" }, "expositionWidth": { "type": "number", "description": "Exposition width of the frame" }, "market": { "type": "object", "nullable": true, "description": "Market information for the frame" } }, "required": [ "frameId", "frameRef", "frameWidth", "frameHeight", "frameElevation", "frameType", "expositionAngle", "expositionWidth", "market" ] }, "ClientAdGroupEntityResponseDto": { "type": "object", "properties": { "flightId": { "type": "number", "example": 1, "description": "The ID of the ad group" }, "flightRef": { "type": "string", "example": "FL12345", "description": "The reference string of the ad group" }, "activeFrom": { "type": "number", "example": 1627843200, "description": "Unix timestamp representing the start of the ad group" }, "activeTo": { "type": "number", "example": 1627846800, "description": "Unix timestamp representing the end of the ad group" }, "productType": { "type": "string", "example": "Digital", "description": "The product type of the ad group" }, "flightGroup": { "enum": [ "SELECTIVE", "ACCUMULATIVE" ], "type": "string", "description": "The group this ad group belongs to" }, "mediaPositions": { "type": "string", "items": { "type": "string", "enum": [ "LEFT", "RIGHT", "CENTER", "FRONT", "BACK" ] }, "enum": [ "LEFT", "RIGHT", "CENTER", "FRONT", "BACK" ], "example": [ "LEFT" ], "description": "Positions of the media in the ad group" }, "inventoryType": { "type": "string", "example": "OOH", "description": "Type of inventory for the ad group" }, "metaData": { "type": "object", "description": "Additional metadata for the ad group" }, "createdAt": { "format": "date-time", "type": "string", "example": "2023-07-29T12:34:56Z", "description": "The date and time the ad group was created" }, "updatedAt": { "format": "date-time", "type": "string", "example": "2023-08-01T15:22:11Z", "description": "The date and time the ad group was last updated" }, "media": { "description": "Associated media entity (optional)", "allOf": [ { "$ref": "#/components/schemas/ClientMediaEntityDto" } ] }, "assets": { "description": "Associated assets (optional)", "type": "array", "items": { "$ref": "#/components/schemas/ClientAssetEntityDto" } }, "frames": { "description": "Associated frames (optional)", "type": "array", "items": { "$ref": "#/components/schemas/ClientFrameEntityDto" } } }, "required": [ "flightId", "flightRef", "activeFrom", "activeTo", "productType", "flightGroup", "mediaPositions", "inventoryType", "metaData", "createdAt", "updatedAt" ] }, "GetAdGroupResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "description": "The retrieved Ad Group", "allOf": [ { "$ref": "#/components/schemas/ClientAdGroupEntityResponseDto" } ] } }, "required": [ "statusCode", "meta", "data" ] }, "GetAdGroupsResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "description": "List of ad groups", "allOf": [ { "$ref": "#/components/schemas/ClientAdGroupEntityResponseDto" } ] } }, "required": [ "statusCode", "meta", "data" ] }, "CreateTransitAdGroupDto": { "type": "object", "properties": { "assetOwner": { "type": "string" }, "productType": { "type": "string" }, "assetMediaPositions": { "type": "array", "items": { "type": "string", "enum": [ "LEFT", "RIGHT", "CENTER", "FRONT", "BACK" ] } }, "flightRef": { "type": "string" }, "activeFrom": { "type": "number" }, "activeTo": { "type": "number" }, "campaignId": { "type": "number", "maximum": 2147483647 }, "type": { "type": "string", "enum": [ "STATIC", "DIGITAL" ] } }, "required": [ "assetOwner", "productType", "assetMediaPositions", "flightRef", "activeFrom", "activeTo", "campaignId", "type" ] }, "CreateAdGroupResponse": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "type": "number", "description": "The ID of the created ad group" } }, "required": [ "statusCode", "meta", "data" ] }, "CreateStationaryAdGroupDto": { "type": "object", "properties": { "flightRef": { "type": "string" }, "activeFrom": { "type": "number" }, "activeTo": { "type": "number" }, "campaignId": { "type": "number", "maximum": 2147483647 }, "type": { "type": "string", "enum": [ "STATIC", "DIGITAL" ] } }, "required": [ "flightRef", "activeFrom", "activeTo", "campaignId", "type" ] }, "AttachAssetsToAdGroupDto": { "type": "object", "properties": { "assetIds": { "type": "array", "items": { "type": "number", "maximum": 2147483647, "minimum": 1 } } }, "required": [ "assetIds" ] }, "AttachAssetsToAdGroupResponse": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "type": "boolean", "description": "Whether the assets were successfully attached to the ad group" } }, "required": [ "statusCode", "meta", "data" ] }, "AttachFramesToAdGroupDto": { "type": "object", "properties": { "frameIds": { "type": "array", "items": { "type": "number", "maximum": 2147483647, "minimum": 1 } } }, "required": [ "frameIds" ] }, "AttachFramesToAdGroupResponse": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "type": "boolean", "description": "Whether the frames were successfully attached to the ad group" } }, "required": [ "statusCode", "meta", "data" ] }, "AttachCreativesToAdGroupDto": { "type": "object", "properties": { "creativeIds": { "type": "array", "items": { "type": "number", "maximum": 2147483647, "minimum": 1 } } }, "required": [ "creativeIds" ] }, "AttachCreativesToAdGroupResponse": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "type": "boolean", "description": "Whether the creatives were successfully attached to the ad group" } }, "required": [ "statusCode", "meta", "data" ] }, "PutUpdateAttachedAssetsDto": { "type": "object", "properties": { "assetIds": { "type": "array", "items": { "type": "number", "maximum": 2147483647, "minimum": 1 } } }, "required": [ "assetIds" ] }, "AuthDto": { "type": "object", "properties": { "email": { "type": "string" }, "password": { "type": "string" } }, "required": [ "email" ] }, "AuthResponse": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "type": "string", "description": "The token to attach to subsequent requests" } }, "required": [ "statusCode", "meta", "data" ] }, "ClientAttributionStudyEntityDto": { "type": "object", "properties": { "status": { "type": "string" }, "attributionId": { "type": "number" }, "campaignId": { "type": "number" }, "studyName": { "type": "string" }, "studyType": { "type": "string" }, "campaignGoals": { "type": "string" }, "startDate": { "type": "number" }, "endDate": { "type": "number" }, "postStudyEndDate": { "type": "number" }, "isPartOfOtherEffort": { "type": "boolean" }, "pauseOtherChannels": { "type": "boolean" }, "brandFocused": { "type": "boolean" }, "adsAligned": { "type": "boolean" }, "createdAt": { "format": "date-time", "type": "string" }, "updatedAt": { "format": "date-time", "type": "string" }, "analysisType": { "type": "string" }, "campaigns": { "type": "array", "items": { "type": "object" } } }, "required": [ "status", "attributionId", "campaignId", "studyName", "studyType", "campaignGoals", "startDate", "endDate", "postStudyEndDate", "isPartOfOtherEffort", "pauseOtherChannels", "brandFocused", "adsAligned", "createdAt", "updatedAt", "analysisType", "campaigns" ] }, "CreateAttributionStudyDto": { "type": "object", "properties": { "studyName": { "type": "string", "description": "Name of the attribution study", "example": "My Attribution Study" }, "analysisType": { "enum": [ "RETARGETING", "CONVERSION", "LIFT" ], "type": "string", "description": "Analysis type of the attribution study", "example": "LIFT" }, "studyType": { "enum": [ "Web", "Footfall", "Mobile" ], "type": "string", "description": "Study type of the attribution study", "example": "Web" }, "campaignId": { "type": "number", "minimum": 1, "maximum": 2147483647, "description": "Campaign ID of the attribution study", "example": 1 }, "startDate": { "type": "number", "description": "Start date of the attribution study", "example": 1715001600 }, "endDate": { "type": "number", "description": "End date of the attribution study", "example": 1715001600 }, "postStudyEndDate": { "type": "number", "description": "Post study end date of the attribution study", "example": 1715001600 }, "campaignGoals": { "type": "string", "description": "Campaign goals of the attribution study", "example": "Increase website visits" }, "isPartOfOtherEffort": { "type": "boolean", "description": "Is this study a part of a greater measurement effort?", "example": true }, "pauseOtherChannels": { "type": "boolean", "description": "Is your client pausing other media channels during the operator campaigns?", "example": true }, "brandFocused": { "type": "boolean", "description": "Are the ads brand awareness focused?", "example": true }, "adsAligned": { "type": "boolean", "description": "Are the ads aligned with the responses we're measuring?", "example": true }, "mediaMix": { "items": { "type": "array" }, "description": "If no to pauseOtherChannels, where else is the advertiser running advertisements?", "example": [ "TV", "Digital" ], "type": "array" } }, "required": [ "studyName", "analysisType", "studyType", "campaignId", "startDate", "endDate", "postStudyEndDate", "campaignGoals", "isPartOfOtherEffort", "pauseOtherChannels", "brandFocused", "adsAligned", "mediaMix" ] }, "ClientAttributionConversionsByDateResponseDto": { "type": "object", "properties": { "summaryBinGrouping": { "type": "string", "nullable": true, "example": "2025-05-19 00:00:00.000", "description": "Summary bin grouping value (only present when summaryBin parameter is specified)" }, "observedConversionsGross": { "type": "number", "nullable": true, "example": 2033, "description": "Observed conversions gross" }, "observedConversionsEffective": { "type": "number", "nullable": true, "example": 482, "description": "Observed conversions effective" }, "observedConversionsViewable": { "type": "number", "nullable": true, "example": 1238, "description": "Observed conversions viewable" }, "upsampledConversionsGross": { "type": "number", "nullable": true, "example": 14377, "description": "Upsampled conversions gross" }, "upsampledConversionsEffective": { "type": "number", "nullable": true, "example": 3507, "description": "Upsampled conversions effective" }, "upsampledConversionsViewable": { "type": "number", "nullable": true, "example": 8897, "description": "Upsampled conversions viewable" } }, "required": [ "observedConversionsGross", "observedConversionsEffective", "observedConversionsViewable", "upsampledConversionsGross", "upsampledConversionsEffective", "upsampledConversionsViewable" ] }, "GetConversionsByDateResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "description": "Conversions grouped by date", "type": "array", "items": { "$ref": "#/components/schemas/ClientAttributionConversionsByDateResponseDto" } } }, "required": [ "statusCode", "meta", "data" ] }, "ClientAttributionConversionsByAdGroupResponseDto": { "type": "object", "properties": { "adGroupRef": { "type": "string", "example": "Summer2025AdGroupRef", "description": "The ad group ref" }, "summaryBinGrouping": { "type": "string", "nullable": true, "example": "2025-05-19 00:00:00.000", "description": "Summary bin grouping value (only present when summaryBin parameter is specified)" }, "observedConversionsGross": { "type": "number", "nullable": true, "example": 2033, "description": "Observed conversions gross" }, "observedConversionsEffective": { "type": "number", "nullable": true, "example": 482, "description": "Observed conversions effective" }, "observedConversionsViewable": { "type": "number", "nullable": true, "example": 1238, "description": "Observed conversions viewable" }, "upsampledConversionsGross": { "type": "number", "nullable": true, "example": 14377, "description": "Upsampled conversions gross" }, "upsampledConversionsEffective": { "type": "number", "nullable": true, "example": 3507, "description": "Upsampled conversions effective" }, "upsampledConversionsViewable": { "type": "number", "nullable": true, "example": 8897, "description": "Upsampled conversions viewable" } }, "required": [ "adGroupRef", "observedConversionsGross", "observedConversionsEffective", "observedConversionsViewable", "upsampledConversionsGross", "upsampledConversionsEffective", "upsampledConversionsViewable" ] }, "GetConversionsByAdGroupResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "description": "Conversions grouped by ad group", "type": "array", "items": { "$ref": "#/components/schemas/ClientAttributionConversionsByAdGroupResponseDto" } } }, "required": [ "statusCode", "meta", "data" ] }, "ClientAttributionConversionsByUnitResponseDto": { "type": "object", "properties": { "id": { "type": "number", "example": 1, "description": "The ID of the unit" }, "ref": { "type": "string", "example": "ADG12345", "description": "The unit ref" }, "type": { "type": "string", "example": "ASSET", "description": "ASSET or FRAME" }, "summaryBinGrouping": { "type": "string", "nullable": true, "example": "2025-05-19 00:00:00.000", "description": "Summary bin grouping value (only present when summaryBin parameter is specified)" }, "observedConversionsGross": { "type": "number", "nullable": true, "example": 2033, "description": "Observed conversions gross" }, "observedConversionsEffective": { "type": "number", "nullable": true, "example": 482, "description": "Observed conversions effective" }, "observedConversionsViewable": { "type": "number", "nullable": true, "example": 1238, "description": "Observed conversions viewable" }, "upsampledConversionsGross": { "type": "number", "nullable": true, "example": 14377, "description": "Upsampled conversions gross" }, "upsampledConversionsEffective": { "type": "number", "nullable": true, "example": 3507, "description": "Upsampled conversions effective" }, "upsampledConversionsViewable": { "type": "number", "nullable": true, "example": 8897, "description": "Upsampled conversions viewable" } }, "required": [ "id", "ref", "type", "observedConversionsGross", "observedConversionsEffective", "observedConversionsViewable", "upsampledConversionsGross", "upsampledConversionsEffective", "upsampledConversionsViewable" ] }, "GetConversionsByUnitResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "description": "Conversions grouped by unit", "type": "array", "items": { "$ref": "#/components/schemas/ClientAttributionConversionsByUnitResponseDto" } } }, "required": [ "statusCode", "meta", "data" ] }, "AssetPatchUpdateDto": { "type": "object", "properties": { "assetOwner": { "type": "string", "description": "The owner of the asset." }, "assetType": { "enum": [ "DEFAULT", "BIKE", "BUS", "CAR", "MOBILE_BILLBOARD", "PEDI_CAB", "TRUCK", "SCOOTER", "TAXI", "LIGHT_RAIL", "BOX_VAN", "SEMI_TRAILER", "TROLLEY", "DOUBLE_DECKER", "TOUR_BUS", "DELIVERY_TRUCK", "STATIONARY" ], "type": "string", "description": "The type of the asset." }, "assetRef": { "type": "string", "description": "The asset identifier as it appears through the API feed." }, "classRef": { "type": "string", "description": "The class associated with the asset - this defined the media products the asset can support" }, "displayName": { "type": "string", "description": "The name of the asset as it will appear in the StreetMetrics platform." }, "assetStatus": { "enum": [ "ACTIVE", "INACTIVE", "RETIRED" ], "type": "string", "description": "The status of the asset." } } }, "ClientCampaignEntityResponseDto": { "type": "object", "properties": { "campaignId": { "type": "number", "example": 1, "description": "The ID of the campaign" }, "campaignRef": { "type": "string", "example": "CMP12345", "description": "The reference code of the campaign" }, "contractId": { "type": "string", "example": "CON12345", "description": "The reference code of the contract" }, "industry": { "type": "string", "example": "Automotive", "description": "The industry of the campaign" }, "activeFrom": { "type": "number", "example": 1625097600, "description": "The start date of the campaign" }, "activeTo": { "type": "number", "example": 1625097600, "description": "The end date of the campaign" }, "metaData": { "type": "object", "example": { "advertiser": "StreetMetrics" }, "description": "The metadata of the campaign" }, "createdAt": { "format": "date-time", "type": "string", "example": "2023-07-29T12:34:56Z", "description": "The date and time the campaign was created" }, "updatedAt": { "format": "date-time", "type": "string", "example": "2023-08-01T15:22:11Z", "description": "The date and time the campaign was last updated" }, "adGroups": { "description": "The ad groups of the campaign", "type": "array", "items": { "type": "object" } } }, "required": [ "campaignId", "campaignRef", "contractId", "industry", "activeFrom", "activeTo", "metaData", "createdAt", "updatedAt" ] }, "GetCampaignResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "$ref": "#/components/schemas/ClientCampaignEntityResponseDto" } }, "required": [ "statusCode", "meta", "data" ] }, "GetCampaignsResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/ClientCampaignEntityResponseDto" } } }, "required": [ "statusCode", "meta", "data" ] }, "CreateCampaignDto": { "type": "object", "properties": { "campaignRef": { "type": "string", "example": "CMP12345", "description": "The reference code of the campaign" }, "advertiser": { "type": "string", "example": "Advertiser Name", "description": "The advertiser of the campaign" }, "marketId": { "example": [ 1, 2, 3 ], "description": "The market IDs of the campaign", "type": "array", "items": { "type": "number", "maximum": 2147483647, "minimum": 1 } }, "contractId": { "type": "string", "example": "CON12345", "description": "The reference code of the contract" }, "industry": { "type": "string", "example": "Automotive", "description": "The industry of the campaign", "enum": [ "Alcohol", "Automotive, Dealers & Services", "Cannabis", "Consumer Goods", "Education", "Employment", "Entertainment", "Financial", "Government, Politics & Organizations", "Healthcare", "Insurance", "Lottery", "Legal", "Non-Profit", "Other", "Real Estate", "Restaurants", "Retail", "Service Providers", "Technology", "Travel", "Utilities" ] }, "goal": { "type": "number", "minimum": 0, "example": 1000, "description": "The goal of the campaign" }, "activeFrom": { "type": "number", "example": 1625097600, "description": "The start date of the campaign (NOTE: Please refrain from passing this value directly, as it will automatically be set each day based on its ad groups)" }, "activeTo": { "type": "number", "example": 1625097600, "description": "The end date of the campaign (NOTE: Please refrain from passing this value directly, as it will automatically be set each day based on its ad groups)" }, "displayName": { "type": "string", "example": "Campaign Display Name", "description": "The display name of the campaign" }, "budget": { "type": "number", "minimum": 0, "example": 1000, "description": "The budget of the campaign" }, "cpm": { "type": "number", "minimum": 0, "example": 1000, "description": "The CPM of the campaign" } }, "required": [ "campaignRef", "advertiser", "marketId" ] }, "CreateCampaignResponse": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "type": "number", "description": "The ID of the created campaign" } }, "required": [ "statusCode", "meta", "data" ] }, "CreativeResponseDto": { "type": "object", "properties": { "creativeId": { "type": "number", "description": "Unique identifier for the creative", "example": 123 }, "creativeRef": { "type": "string", "description": "Creative reference string", "example": "summer-campaign-banner" }, "displayName": { "type": "string", "description": "Display name of the creative", "example": "Summer Campaign Banner" } }, "required": [ "creativeId", "creativeRef", "displayName" ] }, "GetCreativesResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "description": "Array of creative objects", "type": "array", "items": { "$ref": "#/components/schemas/CreativeResponseDto" } } }, "required": [ "statusCode", "meta", "data" ] }, "GetCreativeByIdResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "description": "Creative object", "allOf": [ { "$ref": "#/components/schemas/CreativeResponseDto" } ] } }, "required": [ "statusCode", "meta", "data" ] }, "CreateFrameDto": { "type": "object", "properties": { "frameRef": { "type": "string", "description": "Unique reference for the frame" }, "frameType": { "type": "string", "description": "Type of frame", "enum": [ "digital", "static" ] }, "frameMedia": { "type": "string", "description": "Media type of the frame", "enum": [ "bulletin", "poster", "place", "junior poster", "panel", "display", "wall", "permanent bulletin", "junior bulletin", "spectacular", "custom" ] }, "frameWidth": { "type": "number", "description": "Width of the frame in specified metrics" }, "frameHeight": { "type": "number", "description": "Height of the frame in specified metrics" }, "frameElevation": { "type": "number", "description": "Elevation of the frame" }, "expositionAngle": { "description": "Angle of exposition (cardinal direction or 0 to 360)", "oneOf": [ { "type": "string", "enum": [ "n", "ne", "e", "se", "s", "sw", "w", "nw" ] }, { "type": "number", "minimum": 0, "maximum": 360 } ] }, "city": { "type": "string", "description": "City where the frame is located" }, "county": { "type": "string", "description": "County where the frame is located" }, "flipDuration": { "type": "number", "description": "Duration of flip for digital frames" }, "frameMetrics": { "type": "string", "description": "Measurement unit", "enum": [ "feet", "meters" ] }, "frameName": { "type": "string", "description": "Display name for the frame" }, "frameOwner": { "type": "string", "description": "Owner of the frame" }, "geopathId": { "type": "string", "description": "Geopath ID if available" }, "neighborhood": { "type": "string", "description": "Neighborhood where frame is located" }, "postalCode": { "type": "string", "description": "Postal code of frame location" }, "primaryRead": { "type": "string", "description": "Primary read type", "enum": [ "left", "right", "parallel", "perpendicular", "center" ] }, "primaryRoad": { "type": "string", "description": "Primary road near the frame" }, "siteAddress": { "type": "string", "description": "Street address of the frame" }, "siteType": { "type": "string", "description": "Type of site", "enum": [ "freestanding", "exterior wall", "furniture", "place" ] }, "siteLat": { "type": "number", "description": "Latitude of frame location", "minimum": -90, "maximum": 90 }, "siteLon": { "type": "number", "description": "Longitude of frame location", "minimum": -180, "maximum": 180 }, "siteName": { "type": "string", "description": "Name of the site" }, "siteRef": { "type": "string", "description": "Reference ID for the site" }, "stateProvince": { "type": "string", "description": "State/Province", "enum": [ "alabama", "alaska", "arizona", "arkansas", "california", "colorado", "connecticut", "delaware", "district of columbia", "florida", "georgia", "hawaii", "idaho", "illinois", "indiana", "iowa", "kansas", "kentucky", "louisiana", "maine", "maryland", "massachusetts", "michigan", "minnesota", "mississippi", "missouri", "montana", "nebraska", "nevada", "new hampshire", "new jersey", "new mexico", "new york", "north carolina", "north dakota", "ohio", "oklahoma", "oregon", "pennsylvania", "rhode island", "south carolina", "south dakota", "tennessee", "texas", "utah", "vermont", "virginia", "washington", "west virginia", "wisconsin", "wyoming" ] }, "totalSlots": { "type": "number", "description": "Total number of slots" }, "illuminationStart": { "type": "string", "description": "Time when illumination starts (HH:mm)" }, "illuminationEnd": { "type": "string", "description": "Time when illumination ends (HH:mm)" }, "mediaCustom": { "type": "string", "description": "Custom media information" }, "expositionWidth": { "type": "number", "nullable": true, "description": "Width of exposition" }, "polygon": { "type": "string", "description": "WKT polygon string representing the frame area" }, "marketId": { "type": "number" } }, "required": [ "frameRef", "frameType", "frameMedia", "frameWidth", "frameHeight", "expositionAngle", "city", "frameMetrics", "frameOwner", "postalCode", "siteType", "siteLat", "siteLon", "stateProvince" ] }, "PatchFrameDto": { "type": "object", "properties": { "frameRef": { "type": "string", "description": "Unique reference for the frame" }, "frameType": { "type": "string", "description": "Type of frame", "enum": [ "digital", "static" ] }, "frameMedia": { "type": "string", "description": "Media type of the frame", "enum": [ "bulletin", "poster", "place", "junior poster", "panel", "display", "wall", "permanent bulletin", "junior bulletin", "spectacular", "custom" ] }, "frameWidth": { "type": "number", "description": "Width of the frame in specified metrics" }, "frameHeight": { "type": "number", "description": "Height of the frame in specified metrics" }, "frameElevation": { "type": "number", "description": "Elevation of the frame" }, "expositionAngle": { "description": "Angle of exposition (cardinal direction or 0 to 360)", "oneOf": [ { "type": "string", "enum": [ "n", "ne", "e", "se", "s", "sw", "w", "nw" ] }, { "type": "number", "minimum": 0, "maximum": 360 } ] }, "city": { "type": "string", "description": "City where the frame is located" }, "county": { "type": "string", "description": "County where the frame is located" }, "flipDuration": { "type": "number", "description": "Duration of flip for digital frames" }, "frameMetrics": { "type": "string", "description": "Measurement unit", "enum": [ "feet", "meters" ] }, "frameName": { "type": "string", "description": "Display name for the frame" }, "frameOwner": { "type": "string", "description": "Owner of the frame" }, "geopathId": { "type": "string", "description": "Geopath ID if available" }, "neighborhood": { "type": "string", "description": "Neighborhood where frame is located" }, "postalCode": { "type": "string", "description": "Postal code of frame location" }, "primaryRead": { "type": "string", "description": "Primary read type", "enum": [ "left", "right", "parallel", "perpendicular", "center" ] }, "primaryRoad": { "type": "string", "description": "Primary road near the frame" }, "siteAddress": { "type": "string", "description": "Street address of the frame" }, "siteType": { "type": "string", "description": "Type of site", "enum": [ "freestanding", "exterior wall", "furniture", "place" ] }, "siteLat": { "type": "number", "description": "Latitude of frame location", "minimum": -90, "maximum": 90 }, "siteLon": { "type": "number", "description": "Longitude of frame location", "minimum": -180, "maximum": 180 }, "siteName": { "type": "string", "description": "Name of the site" }, "siteRef": { "type": "string", "description": "Reference ID for the site" }, "stateProvince": { "type": "string", "description": "State/Province", "enum": [ "alabama", "alaska", "arizona", "arkansas", "california", "colorado", "connecticut", "delaware", "district of columbia", "florida", "georgia", "hawaii", "idaho", "illinois", "indiana", "iowa", "kansas", "kentucky", "louisiana", "maine", "maryland", "massachusetts", "michigan", "minnesota", "mississippi", "missouri", "montana", "nebraska", "nevada", "new hampshire", "new jersey", "new mexico", "new york", "north carolina", "north dakota", "ohio", "oklahoma", "oregon", "pennsylvania", "rhode island", "south carolina", "south dakota", "tennessee", "texas", "utah", "vermont", "virginia", "washington", "west virginia", "wisconsin", "wyoming" ] }, "totalSlots": { "type": "number", "description": "Total number of slots" }, "illuminationStart": { "type": "string", "description": "Time when illumination starts (HH:mm)" }, "illuminationEnd": { "type": "string", "description": "Time when illumination ends (HH:mm)" }, "mediaCustom": { "type": "string", "description": "Custom media information" }, "expositionWidth": { "type": "number", "nullable": true, "description": "Width of exposition" }, "polygon": { "type": "string", "description": "WKT polygon string representing the frame area" }, "marketId": { "type": "number" } } }, "ClientMarketEntityDto": { "type": "object", "properties": { "marketId": { "type": "number", "example": 1, "description": "The ID of the market" }, "marketName": { "type": "string", "example": "New York", "description": "The name of the market" } }, "required": [ "marketId", "marketName" ] }, "GetMarketsResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "description": "List of markets", "type": "array", "items": { "$ref": "#/components/schemas/ClientMarketEntityDto" } } }, "required": [ "statusCode", "meta", "data" ] }, "CreatePixelDto": { "type": "object", "properties": { "campaignId": { "type": "number" }, "displayName": { "type": "string" }, "page": { "enum": [ "Checkout Page", "Contact Us Page", "Directory Page", "Education Page", "Homepage", "Landing Page", "Location Page", "Product Page" ], "type": "string", "description": "Page must be a valid page type. Possible values: Checkout Page, Contact Us Page, Directory Page, Education Page, Homepage, Landing Page, Location Page, Product Page" }, "funnelStage": { "enum": [ "Visit Page", "Consideration Page", "Conversion Page" ], "type": "string", "description": "Funnel stage must be a valid funnel stage. Possible values: Visit Page, Consideration Page, Conversion Page" }, "url": { "type": "string" }, "notes": { "type": "string" } }, "required": [ "displayName", "page", "funnelStage" ] }, "CreatePixelResponse": { "type": "object", "properties": { "data": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object", "properties": {} } }, "required": [ "data", "message", "meta" ] }, "ClientPixelEntity": { "type": "object", "properties": { "pixelId": { "type": "number" }, "pixelUUID": { "type": "string" }, "campaign": { "type": "object" }, "campaignId": { "type": "number" }, "metaData": { "type": "object" } }, "required": [ "pixelId", "pixelUUID", "campaign", "campaignId", "metaData" ] }, "GetPixelsResponseDto": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ClientPixelEntity" } }, "message": { "type": "string" }, "meta": { "type": "object", "properties": {} } }, "required": [ "data", "message", "meta" ] }, "GetPixelResponseDto": { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/ClientPixelEntity" }, "message": { "type": "string" }, "meta": { "type": "object", "properties": {} } }, "required": [ "data", "message", "meta" ] }, "AttachCampaignToPixelDto": { "type": "object", "properties": { "campaignId": { "type": "number" } }, "required": [ "campaignId" ] }, "UpdatePixelDto": { "type": "object", "properties": { "displayName": { "type": "string" }, "page": { "enum": [ "Checkout Page", "Contact Us Page", "Directory Page", "Education Page", "Homepage", "Landing Page", "Location Page", "Product Page" ], "type": "string", "description": "Page must be a valid page type. Possible values: Checkout Page, Contact Us Page, Directory Page, Education Page, Homepage, Landing Page, Location Page, Product Page" }, "funnelStage": { "enum": [ "Visit Page", "Consideration Page", "Conversion Page" ], "type": "string", "description": "Funnel stage must be a valid funnel stage. Possible values: Visit Page, Consideration Page, Conversion Page" }, "url": { "type": "string" }, "notes": { "type": "string" } } }, "AttachAttributionStudyToPixelDto": { "type": "object", "properties": { "attributionId": { "type": "number" } }, "required": [ "attributionId" ] }, "ClientReportingImpressionsByDateResponseDto": { "type": "object", "properties": { "summaryBinGrouping": { "type": "object", "example": "2021-01-01", "description": "Date in string format" }, "impressions": { "type": "number", "example": 1000, "description": "Number of impressions for the given date" }, "impressionsLts": { "type": "number", "example": 100, "description": "Number of LTS impressions for the given date. Currently available for stationary, only." }, "impressionsOts": { "type": "number", "example": 200, "description": "Number of OTS impressions for the given date. Currently available for stationary, only." } }, "required": [ "summaryBinGrouping", "impressions", "impressionsLts", "impressionsOts" ] }, "GetImpressionsByDateResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "description": "Impressions grouped by date", "type": "array", "items": { "$ref": "#/components/schemas/ClientReportingImpressionsByDateResponseDto" } } }, "required": [ "statusCode", "meta", "data" ] }, "ClientReportingImpressionsByAdGroupResponseDto": { "type": "object", "properties": { "adGroupId": { "type": "number", "example": 1, "description": "The ID of the ad group" }, "adGroupRef": { "type": "string", "example": "ADG12345", "description": "The reference code of the ad group" }, "impressions": { "type": "number", "example": 500, "description": "Number of impressions for the ad group" }, "summaryBinGrouping": { "type": "object", "example": "LIFETIME", "description": "The summary bin date grouping" }, "impressionsLts": { "type": "number", "example": 100, "description": "Number of LTS impressions for the given ad group. Currently available for stationary, only." }, "impressionsOts": { "type": "number", "example": 200, "description": "Number of OTS impressions for the given ad group. Currently available for stationary, only." } }, "required": [ "adGroupId", "adGroupRef", "impressions", "summaryBinGrouping", "impressionsLts", "impressionsOts" ] }, "GetImpressionsByAdGroupResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "description": "Impressions grouped by ad group", "type": "array", "items": { "$ref": "#/components/schemas/ClientReportingImpressionsByAdGroupResponseDto" } } }, "required": [ "statusCode", "meta", "data" ] }, "ClientReportingImpressionsByUnitResponseDto": { "type": "object", "properties": { "id": { "type": "number", "example": 1, "description": "The ID of the unit" }, "ref": { "type": "string", "example": "ADG12345", "description": "The reference code of the unit" }, "type": { "type": "string", "example": "ASSET", "description": "ASSET or FRAME" }, "impressions": { "type": "number", "example": 200, "description": "Number of impressions for the unit" }, "rollupTimestamp": { "type": "number", "example": 1672531200, "description": "The rollup timestamp for the summary bin date grouping" }, "summaryBinGrouping": { "type": "string", "example": "2021-01-01", "description": "The summary bin date grouping" }, "impressionsLts": { "type": "number", "example": 100, "description": "Number of LTS impressions for the given unit. Currently available for stationary, only." }, "impressionsOts": { "type": "number", "example": 200, "description": "Number of OTS impressions for the given unit. Currently available for stationary, only." } }, "required": [ "id", "ref", "type", "impressions", "rollupTimestamp", "summaryBinGrouping", "impressionsLts", "impressionsOts" ] }, "GetImpressionsByUnitResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "description": "Impressions grouped by unit", "type": "array", "items": { "$ref": "#/components/schemas/ClientReportingImpressionsByUnitResponseDto" } } }, "required": [ "statusCode", "meta", "data" ] }, "ClientReportingDemographicsResponseDto": { "type": "object", "properties": { "category": { "type": "string", "example": "CATEGORY", "description": "The category of the demographics" }, "group": { "type": "string", "example": "GROUP", "description": "The group of the demographics" }, "deviceCount": { "type": "number", "example": 100, "description": "The number of devices for the demographics" }, "percent": { "type": "number", "example": 50, "description": "The percentage of the demographics" } }, "required": [ "category", "group", "deviceCount", "percent" ] }, "GetDemographicsResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "description": "Demographics data grouped by campaign", "type": "array", "items": { "$ref": "#/components/schemas/ClientReportingDemographicsResponseDto" } } }, "required": [ "statusCode", "meta", "data" ] }, "ClientReportingAffinitiesResponseDto": { "type": "object", "properties": { "category": { "type": "string", "example": "CATEGORY", "description": "The category of the affinities" }, "group": { "type": "string", "example": "GROUP", "description": "The group of the affinities" }, "deviceCount": { "type": "number", "example": 100, "description": "The number of devices for the affinities" }, "percent": { "type": "number", "example": 50, "description": "The percentage of the affinities (gross composition)" }, "ltsPercent": { "type": "number", "example": 45, "description": "The LTS percentage of the affinities" }, "otsPercent": { "type": "number", "example": 55, "description": "The OTS percentage of the affinities" }, "grossPercent": { "type": "number", "example": 50, "description": "The gross percentage of the affinities" }, "ltsComposition": { "type": "number", "example": 45, "description": "The LTS composition of the affinities" }, "otsComposition": { "type": "number", "example": 55, "description": "The OTS composition of the affinities" }, "grossComposition": { "type": "number", "example": 50, "description": "The gross composition of the affinities" } }, "required": [ "category", "group", "deviceCount", "percent", "ltsPercent", "otsPercent", "grossPercent", "ltsComposition", "otsComposition", "grossComposition" ] }, "GetAffinitiesResponseDto": { "type": "object", "properties": { "statusCode": { "type": "number" }, "message": { "type": "string" }, "meta": { "type": "object" }, "data": { "description": "Affinities data grouped by campaign", "type": "array", "items": { "$ref": "#/components/schemas/ClientReportingAffinitiesResponseDto" } } }, "required": [ "statusCode", "meta", "data" ] }, "ClientReportingUfResponseDto": { "type": "object", "properties": { "id": { "type": "number", "example": 1, "description": "The ID of the campaign" }, "ref": { "type": "string", "example": "ADG12345", "description": "The reference code of campaign" }, "date": { "type": "string", "example": "2021-01-01", "description": "The date of the uniques and frequency data" }, "uniquesGross": { "type": "number", "example": 100, "description": "The number of uniques gross" }, "frequencyGross": { "type": "number", "example": 100, "description": "The number of frequency gross" }, "uniquesOts": { "type": "number", "example": 100, "description": "The number of uniques OTS" }, "frequencyOts": { "type": "number", "example": 100, "description": "The number of frequency OTS" }, "uniquesLts": { "type": "number", "example": 100, "description": "The number of uniques LTS" }, "frequencyLts": { "type": "number", "example": 100, "description": "The number of frequency LTS" } }, "required": [ "id", "ref", "date", "uniquesGross", "frequencyGross", "uniquesOts", "frequencyOts", "uniquesLts", "frequencyLts" ] }, "ClientReportingUfResponseDtoAdgroup": { "type": "object", "properties": { "id": { "type": "number", "example": 1, "description": "The ID of the Ad Group" }, "ref": { "type": "string", "example": "ADG12345", "description": "The reference code of the Ad Group" }, "date": { "type": "string", "example": "2021-01-01", "description": "The date of the uniques and frequency data" }, "uniquesGross": { "type": "number", "example": 100, "description": "The number of uniques gross" }, "frequencyGross": { "type": "number", "example": 100, "description": "The number of frequency gross" }, "uniquesOts": { "type": "number", "example": 100, "description": "The number of uniques OTS" }, "frequencyOts": { "type": "number", "example": 100, "description": "The number of frequency OTS" }, "uniquesLts": { "type": "number", "example": 100, "description": "The number of uniques LTS" }, "frequencyLts": { "type": "number", "example": 100, "description": "The number of frequency LTS" } }, "required": [ "id", "ref", "date", "uniquesGross", "frequencyGross", "uniquesOts", "frequencyOts", "uniquesLts", "frequencyLts" ] }, "ClientReportingUfResponseDtoUnit": { "type": "object", "properties": { "id": { "type": "number", "example": 1, "description": "The ID of the Unit" }, "ref": { "type": "string", "example": "ADG12345", "description": "The reference code of the Unit" }, "date": { "type": "string", "example": "2021-01-01", "description": "The date of the uniques and frequency data" }, "uniquesGross": { "type": "number", "example": 100, "description": "The number of uniques gross" }, "frequencyGross": { "type": "number", "example": 100, "description": "The number of frequency gross" }, "uniquesOts": { "type": "number", "example": 100, "description": "The number of uniques OTS" }, "frequencyOts": { "type": "number", "example": 100, "description": "The number of frequency OTS" }, "uniquesLts": { "type": "number", "example": 100, "description": "The number of uniques LTS" }, "frequencyLts": { "type": "number", "example": 100, "description": "The number of frequency LTS" }, "type": { "type": "string", "example": "ASSET", "description": "ASSET or FRAME" } }, "required": [ "id", "ref", "date", "uniquesGross", "frequencyGross", "uniquesOts", "frequencyOts", "uniquesLts", "frequencyLts", "type" ] } } }, "paths": { "/ad-groups/{id}": { "get": { "operationId": "AdGroupController_getAdGroup", "summary": "Retrieve a specific Ad Group by ID", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "The ID of the Ad Group to retrieve", "schema": { "type": "number" } }, { "name": "include", "required": false, "in": "query", "description": "Specific entities to include in the AdGroup response. Only valid for AdGroup entities. Possible values: media, assets, frames", "example": [ "media" ], "schema": { "type": "string" } } ], "responses": { "200": { "description": "Ad Group retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAdGroupResponseDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "404": { "description": "Ad Group not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Ad Groups" ] }, "delete": { "operationId": "AdGroupController_deleteAdGroup", "summary": "Delete an Ad Group", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "The ID of the ad group", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Ad Group deleted successfully" }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Ad Groups" ] } }, "/ad-groups": { "get": { "operationId": "AdGroupController_getAdGroups", "summary": "Retrieve a list of Ad Groups", "parameters": [ { "name": "limit", "required": false, "in": "query", "description": "Limit the number of results (max 10000)", "schema": { "type": "number" } }, { "name": "sort", "required": false, "in": "query", "description": "Field to sort by", "schema": { "type": "string" } }, { "name": "order", "required": false, "in": "query", "description": "Order direction", "schema": { "enum": [ "ASC", "DESC" ], "type": "string" } }, { "name": "cursor", "required": false, "in": "query", "description": "Cursor for pagination. \n The cursor is used to fetch the next set of results in a paginated response.\n Typically, it is provided in the 'nextCursor' field of the previous response.\n Usage:\n - Start by making an initial request without a cursor.\n - In the response, you'll receive a 'nextCursor' if there are more results to fetch.\n - Use this 'nextCursor' value as the cursor in your subsequent request to fetch the next page of results.\n - Continue this process until the 'nextCursor' is null or not provided, indicating there are no more results.\n Example: \n \n ?cursor=12345\n ", "schema": { "type": "string" } }, { "name": "include", "required": false, "in": "query", "description": "Specific entities to include in the AdGroup response. Only valid for AdGroup entities. Possible values: media, assets, frames", "example": [ "media" ], "schema": { "type": "string" } }, { "name": "search", "required": false, "in": "query", "description": "Search query string. The syntax is 'fieldName.operation(a|o):value'.\n The a|o (AND|OR) is optional and if not provided, it is considered as AND.\n Additional searches can be chained with a comma.\n Supported operations are:\n - gt: Greater than\n - lt: Less than\n - gte: Greater than or equal to\n - lte: Less than or equal to\n - eq: Equal to\n - ne: Not equal to\n - ilike: Case-insensitive like\n - like: Case-sensitive like\n - startilike: Case-insensitive like at the start\n - endilike: Case-insensitive like at the end\n - startlike: Case-sensitive like at the start\n - endlike: Case-sensitive like at the end\n Logical operators:\n - a: AND\n - o: OR\n Examples:\n - assetRef.ilike:E62\n Returns all assets with assetRef like E62\n - createdAt.gte:2021-01-01\n Returns all assets created after 2021-01-01\n - status.eqo:PENDING,status.eqo:APPROVED\n Returns all assets with status either PENDING OR APPROVED\n - name.startilike:John\n Returns all assets with name starting with John\n - age.gtea:30,age.lt:40\n Returns all assets with age greater than or equal to 30 and less than 40", "example": "assetRef.ilike:E62,createdAt.gte:2021-01-01", "schema": { "type": "string" } }, { "name": "campaignId", "required": false, "in": "query", "description": "The ID of the campaign to filter ad groups by", "schema": { "type": "number" } } ], "responses": { "200": { "description": "List of Ad Groups retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAdGroupsResponseDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "404": { "description": "Ad Groups not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Ad Groups" ] } }, "/ad-groups/transit": { "post": { "operationId": "AdGroupController_createTransitAdGroup", "summary": "Create a new Transit Ad Group", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTransitAdGroupDto" } } } }, "responses": { "201": { "description": "Ad Group created successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateAdGroupResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Ad Groups" ] } }, "/ad-groups/stationary": { "post": { "operationId": "AdGroupController_createStationaryAdGroup", "summary": "Create a new Stationary Ad Group", "parameters": [], "requestBody": { "required": true, "description": "Details of the Ad Group to create", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateStationaryAdGroupDto" } } } }, "responses": { "201": { "description": "Ad Group created successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateAdGroupResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Ad Groups" ] } }, "/ad-groups/{id}/assets": { "post": { "operationId": "AdGroupController_attachAssets", "summary": "Attach assets to a Transit Ad Group", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "The ID of the ad group", "schema": { "type": "number" } } ], "requestBody": { "required": true, "description": "The assets to attach to the ad group", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AttachAssetsToAdGroupDto" } } } }, "responses": { "201": { "description": "Assets attached successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AttachAssetsToAdGroupResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Ad Groups" ] }, "put": { "operationId": "AdGroupController_putUpdateAssets", "summary": "Replace assets attached to a Transit Ad Group", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "The ID of the ad group", "schema": { "type": "number" } } ], "requestBody": { "required": true, "description": "The assets to update (this is a full replacement, any assets not included in this request will be detached)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PutUpdateAttachedAssetsDto" } } } }, "responses": { "200": { "description": "Assets updated successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AttachAssetsToAdGroupResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Ad Groups" ] } }, "/ad-groups/{id}/frames": { "post": { "operationId": "AdGroupController_attachFrames", "summary": "Attach frames to a Stationary Ad Group", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "The ID of the ad group", "schema": { "type": "number" } } ], "requestBody": { "required": true, "description": "The frames to attach to the ad group", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AttachFramesToAdGroupDto" } } } }, "responses": { "201": { "description": "Frames attached successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AttachFramesToAdGroupResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Ad Groups" ] }, "put": { "operationId": "AdGroupController_putUpdateFrames", "summary": "Update frames attached to a Stationary Ad Group", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "The ID of the ad group", "schema": { "type": "number" } } ], "requestBody": { "required": true, "description": "The frames to update (this is a full replacement, any frames not included in this request will be detached)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AttachFramesToAdGroupDto" } } } }, "responses": { "200": { "description": "Frames updated successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AttachFramesToAdGroupResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Ad Groups" ] } }, "/ad-groups/{id}/creatives": { "post": { "operationId": "AdGroupController_attachCreatives", "summary": "Attach creatives to a Stationary or Transit Ad group", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "The ID of the ad group", "schema": { "type": "number" } } ], "requestBody": { "required": true, "description": "The creatives to attach to the ad group. You can only upload creatives that match the ad group inventory type (Stationary or Transit)", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AttachCreativesToAdGroupDto" } } } }, "responses": { "201": { "description": "Creatives attached successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AttachCreativesToAdGroupResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Ad Groups" ] } }, "/auth/authenticate": { "post": { "operationId": "AuthController_authenticate", "summary": "Authenticate a user", "parameters": [ { "name": "api-key", "required": true, "in": "header", "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AuthDto" } } } }, "responses": { "201": { "description": "User authenticated successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AuthResponse" } } } } }, "tags": [ "Authentication" ] } }, "/attribution-studies/files/{id}": { "get": { "operationId": "AttributionStudyController_getAttributionStudyFile", "summary": "Download an attribution study file as a ZIP", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "ID of the attribution study", "schema": { "type": "number" } } ], "responses": { "200": { "description": "File downloaded successfully" }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "404": { "description": "File not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Attribution Studies" ] } }, "/attribution-studies/{id}": { "get": { "operationId": "AttributionStudyController_getAttributionStudy", "summary": "Get a specific attribution study by ID", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "ID of the attribution study", "schema": { "type": "number" } }, { "name": "limit", "required": false, "in": "query", "description": "Limit the number of results (max 10000)", "schema": { "type": "number" } }, { "name": "sort", "required": false, "in": "query", "description": "Field to sort by", "schema": { "type": "string" } }, { "name": "order", "required": false, "in": "query", "description": "Order direction", "schema": { "enum": [ "ASC", "DESC" ], "type": "string" } }, { "name": "cursor", "required": false, "in": "query", "description": "Cursor for pagination. \n The cursor is used to fetch the next set of results in a paginated response.\n Typically, it is provided in the 'nextCursor' field of the previous response.\n Usage:\n - Start by making an initial request without a cursor.\n - In the response, you'll receive a 'nextCursor' if there are more results to fetch.\n - Use this 'nextCursor' value as the cursor in your subsequent request to fetch the next page of results.\n - Continue this process until the 'nextCursor' is null or not provided, indicating there are no more results.\n Example: \n \n ?cursor=12345\n ", "schema": { "type": "string" } }, { "name": "include", "required": false, "in": "query", "description": "Entities to include in the response. Possible values: campaigns", "schema": { "type": "string" } }, { "name": "search", "required": false, "in": "query", "description": "Search query string. The syntax is 'fieldName.operation(a|o):value'.\n The a|o (AND|OR) is optional and if not provided, it is considered as AND.\n Additional searches can be chained with a comma.\n Supported operations are:\n - gt: Greater than\n - lt: Less than\n - gte: Greater than or equal to\n - lte: Less than or equal to\n - eq: Equal to\n - ne: Not equal to\n - ilike: Case-insensitive like\n - like: Case-sensitive like\n - startilike: Case-insensitive like at the start\n - endilike: Case-insensitive like at the end\n - startlike: Case-sensitive like at the start\n - endlike: Case-sensitive like at the end\n Logical operators:\n - a: AND\n - o: OR\n Examples:\n - assetRef.ilike:E62\n Returns all assets with assetRef like E62\n - createdAt.gte:2021-01-01\n Returns all assets created after 2021-01-01\n - status.eqo:PENDING,status.eqo:APPROVED\n Returns all assets with status either PENDING OR APPROVED\n - name.startilike:John\n Returns all assets with name starting with John\n - age.gtea:30,age.lt:40\n Returns all assets with age greater than or equal to 30 and less than 40", "example": "assetRef.ilike:E62,createdAt.gte:2021-01-01", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Attribution study retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClientAttributionStudyEntityDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "404": { "description": "Attribution study not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Attribution Studies" ] } }, "/attribution-studies": { "get": { "operationId": "AttributionStudyController_getAttributionStudies", "summary": "Get a list of attribution studies", "parameters": [ { "name": "limit", "required": false, "in": "query", "description": "Limit the number of results (max 10000)", "schema": { "type": "number" } }, { "name": "sort", "required": false, "in": "query", "description": "Field to sort by", "schema": { "type": "string" } }, { "name": "order", "required": false, "in": "query", "description": "Order direction", "schema": { "enum": [ "ASC", "DESC" ], "type": "string" } }, { "name": "cursor", "required": false, "in": "query", "description": "Cursor for pagination. \n The cursor is used to fetch the next set of results in a paginated response.\n Typically, it is provided in the 'nextCursor' field of the previous response.\n Usage:\n - Start by making an initial request without a cursor.\n - In the response, you'll receive a 'nextCursor' if there are more results to fetch.\n - Use this 'nextCursor' value as the cursor in your subsequent request to fetch the next page of results.\n - Continue this process until the 'nextCursor' is null or not provided, indicating there are no more results.\n Example: \n \n ?cursor=12345\n ", "schema": { "type": "string" } }, { "name": "include", "required": false, "in": "query", "description": "Entities to include in the response. Possible values: campaigns", "schema": { "type": "string" } }, { "name": "search", "required": false, "in": "query", "description": "Search query string. The syntax is 'fieldName.operation(a|o):value'.\n The a|o (AND|OR) is optional and if not provided, it is considered as AND.\n Additional searches can be chained with a comma.\n Supported operations are:\n - gt: Greater than\n - lt: Less than\n - gte: Greater than or equal to\n - lte: Less than or equal to\n - eq: Equal to\n - ne: Not equal to\n - ilike: Case-insensitive like\n - like: Case-sensitive like\n - startilike: Case-insensitive like at the start\n - endilike: Case-insensitive like at the end\n - startlike: Case-sensitive like at the start\n - endlike: Case-sensitive like at the end\n Logical operators:\n - a: AND\n - o: OR\n Examples:\n - assetRef.ilike:E62\n Returns all assets with assetRef like E62\n - createdAt.gte:2021-01-01\n Returns all assets created after 2021-01-01\n - status.eqo:PENDING,status.eqo:APPROVED\n Returns all assets with status either PENDING OR APPROVED\n - name.startilike:John\n Returns all assets with name starting with John\n - age.gtea:30,age.lt:40\n Returns all assets with age greater than or equal to 30 and less than 40", "example": "assetRef.ilike:E62,createdAt.gte:2021-01-01", "schema": { "type": "string" } } ], "responses": { "200": { "description": "List of attribution studies retrieved successfully", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/ClientAttributionStudyEntityDto" } } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Attribution Studies" ] }, "post": { "operationId": "AttributionStudyController_createAttributionStudy", "summary": "Create a new attribution study", "parameters": [], "requestBody": { "required": true, "description": "Data to create a new attribution study", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateAttributionStudyDto" } } } }, "responses": { "201": { "description": "Attribution study created successfully" }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Attribution Studies" ] } }, "/attribution-studies/conversions/date": { "get": { "operationId": "AttributionStudyController_getConversionsByDate", "summary": "Get conversions aggregated by date", "description": "Retrieves conversion data aggregated by date. When summaryBin is specified, data is grouped by time periods (week, month, day, etc.).", "parameters": [ { "name": "attributionId", "required": true, "in": "query", "description": "Attribution study ID", "schema": { "type": "number" } }, { "name": "startDate", "required": false, "in": "query", "description": "Start date as Unix timestamp in epoch seconds. If not provided, uses attribution study start date.", "schema": { "type": "number" } }, { "name": "endDate", "required": false, "in": "query", "description": "End date as Unix timestamp in epoch seconds. If not provided, uses attribution study post-study end date.", "schema": { "type": "number" } }, { "name": "summaryBin", "required": false, "in": "query", "description": "Optional summary bin for grouping data by time periods (WEEK, MONTH, DAY, HOUR, LIFETIME, DOW). When specified, results include summaryBinGrouping field.", "schema": { "enum": [ "LIFETIME", "WEEK", "MONTH", "DAY", "HOUR", "DOW" ], "type": "string" } }, { "name": "timezone", "required": false, "in": "query", "description": "Timezone for date calculations", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Conversions by date retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetConversionsByDateResponseDto" } } } }, "400": { "description": "Invalid request parameters", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Attribution Studies" ] } }, "/attribution-studies/conversions/ad-group": { "get": { "operationId": "AttributionStudyController_getConversionsByAdGroup", "summary": "Get conversions aggregated by ad group", "description": "Retrieves conversion data aggregated by ad group (flight). When summaryBin is specified, data is grouped by both ad group and time periods.", "parameters": [ { "name": "attributionId", "required": true, "in": "query", "description": "Attribution study ID", "schema": { "type": "number" } }, { "name": "startDate", "required": false, "in": "query", "description": "Start date as Unix timestamp in epoch seconds. If not provided, uses attribution study start date.", "schema": { "type": "number" } }, { "name": "endDate", "required": false, "in": "query", "description": "End date as Unix timestamp in epoch seconds. If not provided, uses attribution study post-study end date.", "schema": { "type": "number" } }, { "name": "summaryBin", "required": false, "in": "query", "description": "Optional summary bin for grouping data by time periods (WEEK, MONTH, DAY, HOUR, LIFETIME, DOW). When specified, results include summaryBinGrouping field.", "schema": { "enum": [ "LIFETIME", "WEEK", "MONTH", "DAY", "HOUR", "DOW" ], "type": "string" } }, { "name": "timezone", "required": false, "in": "query", "description": "Timezone for date calculations", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Conversions by ad group retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetConversionsByAdGroupResponseDto" } } } }, "400": { "description": "Invalid request parameters", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Attribution Studies" ] } }, "/attribution-studies/conversions/unit": { "get": { "operationId": "AttributionStudyController_getConversionsByUnit", "summary": "Get conversions aggregated by unit", "description": "Retrieves conversion data aggregated by unit (matchable or creative). When summaryBin is specified, data is grouped by both unit and time periods. Use useCreative=true to group by creative instead of matchable.", "parameters": [ { "name": "attributionId", "required": true, "in": "query", "description": "Attribution study ID", "schema": { "type": "number" } }, { "name": "startDate", "required": false, "in": "query", "description": "Start date as Unix timestamp in epoch seconds. If not provided, uses attribution study start date.", "schema": { "type": "number" } }, { "name": "endDate", "required": false, "in": "query", "description": "End date as Unix timestamp in epoch seconds. If not provided, uses attribution study post-study end date.", "schema": { "type": "number" } }, { "name": "summaryBin", "required": false, "in": "query", "description": "Optional summary bin for grouping data by time periods (WEEK, MONTH, DAY, HOUR, LIFETIME, DOW). When specified, results include summaryBinGrouping field.", "schema": { "enum": [ "LIFETIME", "WEEK", "MONTH", "DAY", "HOUR", "DOW" ], "type": "string" } }, { "name": "timezone", "required": false, "in": "query", "description": "Timezone for date calculations", "schema": { "type": "string" } }, { "name": "useCreative", "required": false, "in": "query", "description": "When true, groups by creative fields instead of matchable fields. Only available for /unit endpoint.", "schema": { "type": "boolean" } } ], "responses": { "200": { "description": "Conversions by unit retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetConversionsByUnitResponseDto" } } } }, "400": { "description": "Invalid request parameters", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Attribution Studies" ] } }, "/assets/{id}": { "get": { "operationId": "AssetController_getAssetById", "summary": "Get asset by ID", "parameters": [ { "name": "id", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Successful retrieval of asset" }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "404": { "description": "Asset not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Assets" ] }, "patch": { "operationId": "AssetController_patchUpdateAsset", "summary": "Update asset", "parameters": [ { "name": "id", "required": true, "in": "path", "schema": { "type": "number" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AssetPatchUpdateDto" } } } }, "responses": { "200": { "description": "Successful patch update of asset" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "404": { "description": "Asset not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Assets" ] } }, "/assets": { "get": { "operationId": "AssetController_getAssets", "summary": "Get assets", "parameters": [ { "name": "limit", "required": false, "in": "query", "description": "Limit the number of results", "schema": { "type": "number" } }, { "name": "sort", "required": false, "in": "query", "description": "Field to sort by", "schema": { "type": "string" } }, { "name": "order", "required": false, "in": "query", "description": "Order direction", "schema": { "enum": [ "ASC", "DESC" ], "type": "string" } }, { "name": "cursor", "required": false, "in": "query", "description": "Cursor for pagination", "schema": { "type": "string" } }, { "name": "include", "required": false, "in": "query", "description": "Entities to include in the response. Possible values: campaigns", "schema": { "type": "string" } }, { "name": "search", "required": false, "in": "query", "description": "Search query", "example": "assetRef.ilike:E62,createdAt.gte:2021-01-01", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Successful retrieval of assets" }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Assets" ] } }, "/assets/asset-owners": { "get": { "operationId": "AssetController_getAssetOwners", "summary": "Get asset owners", "parameters": [], "responses": { "200": { "description": "Successful retrieval of asset owners" }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "404": { "description": "Asset owners not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Assets" ] } }, "/assets/compatible": { "get": { "operationId": "AssetController_getCompatibleAssets", "summary": "Get compatible assets", "parameters": [ { "name": "limit", "required": false, "in": "query", "description": "Limit the number of results (max 10000)", "schema": { "type": "number" } }, { "name": "sort", "required": false, "in": "query", "description": "Field to sort by", "schema": { "type": "string" } }, { "name": "order", "required": false, "in": "query", "description": "Order direction", "schema": { "enum": [ "ASC", "DESC" ], "type": "string" } }, { "name": "cursor", "required": false, "in": "query", "description": "Cursor for pagination. \n The cursor is used to fetch the next set of results in a paginated response.\n Typically, it is provided in the 'nextCursor' field of the previous response.\n Usage:\n - Start by making an initial request without a cursor.\n - In the response, you'll receive a 'nextCursor' if there are more results to fetch.\n - Use this 'nextCursor' value as the cursor in your subsequent request to fetch the next page of results.\n - Continue this process until the 'nextCursor' is null or not provided, indicating there are no more results.\n Example: \n \n ?cursor=12345\n ", "schema": { "type": "string" } }, { "name": "include", "required": false, "in": "query", "description": "Entities to include in the response. Possible values: campaigns", "schema": { "type": "string" } }, { "name": "search", "required": false, "in": "query", "description": "Search query string. The syntax is 'fieldName.operation(a|o):value'.\n The a|o (AND|OR) is optional and if not provided, it is considered as AND.\n Additional searches can be chained with a comma.\n Supported operations are:\n - gt: Greater than\n - lt: Less than\n - gte: Greater than or equal to\n - lte: Less than or equal to\n - eq: Equal to\n - ne: Not equal to\n - ilike: Case-insensitive like\n - like: Case-sensitive like\n - startilike: Case-insensitive like at the start\n - endilike: Case-insensitive like at the end\n - startlike: Case-sensitive like at the start\n - endlike: Case-sensitive like at the end\n Logical operators:\n - a: AND\n - o: OR\n Examples:\n - assetRef.ilike:E62\n Returns all assets with assetRef like E62\n - createdAt.gte:2021-01-01\n Returns all assets created after 2021-01-01\n - status.eqo:PENDING,status.eqo:APPROVED\n Returns all assets with status either PENDING OR APPROVED\n - name.startilike:John\n Returns all assets with name starting with John\n - age.gtea:30,age.lt:40\n Returns all assets with age greater than or equal to 30 and less than 40", "example": "assetRef.ilike:E62,createdAt.gte:2021-01-01", "schema": { "type": "string" } }, { "name": "assetOwner", "required": true, "in": "query", "description": "The owner of the asset, used to filter the available assets by their associated owner.", "schema": { "type": "string" } }, { "name": "productType", "required": true, "in": "query", "description": "The specific media product to filter the assets by, representing the type or category of the media.", "schema": { "type": "string" } }, { "name": "assetMediaPositions", "required": true, "in": "query", "description": "An array of positions to filter the assets, indicating the specific locations or placements of the media on the asset.", "schema": { "type": "array", "items": { "type": "string", "enum": [ "LEFT", "RIGHT", "CENTER", "FRONT", "BACK" ] } } } ], "responses": { "200": { "description": "Successful retrieval of compatible assets" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Assets" ] } }, "/assets/ad-group/{adGroupId}/compatible": { "get": { "operationId": "AssetController_getCompatibleAssetsByAdGroupId", "summary": "Get compatible assets by ad group ID", "parameters": [ { "name": "adGroupId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Successful retrieval of compatible assets" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Assets" ] } }, "/campaigns/{id}": { "get": { "operationId": "CampaignController_getCampaign", "summary": "Get a specific campaign by ID", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "The ID of the campaign to retrieve", "schema": { "type": "number" } }, { "name": "include", "required": false, "in": "query", "description": "Specific entities to include in the Campaign response. Only valid for Campaign entities. Possible values: adGroups, markets", "example": [ "adGroups", "markets" ], "schema": { "type": "array", "items": { "type": "string" } } } ], "responses": { "200": { "description": "Campaign retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetCampaignResponseDto" } } } }, "401": { "description": "Unauthorized" }, "404": { "description": "Campaign not found" }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Campaigns" ] }, "patch": { "operationId": "CampaignController_patchUpdateCampaign", "summary": "Update a campaign", "parameters": [ { "name": "id", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Campaign updated successfully" }, "400": { "description": "Bad Request" }, "401": { "description": "Unauthorized" }, "404": { "description": "Campaign not found" }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Campaigns" ] }, "delete": { "operationId": "CampaignController_deleteCampaign", "summary": "Delete a campaign", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "The ID of the campaign", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Campaign deleted successfully" }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Campaigns" ] } }, "/campaigns": { "get": { "operationId": "CampaignController_getCampaigns", "summary": "Get a list of campaigns", "parameters": [ { "name": "limit", "required": false, "in": "query", "description": "Limit the number of results (max 10000)", "schema": { "type": "number" } }, { "name": "sort", "required": false, "in": "query", "description": "Field to sort by", "schema": { "type": "string" } }, { "name": "order", "required": false, "in": "query", "description": "Order direction", "schema": { "enum": [ "ASC", "DESC" ], "type": "string" } }, { "name": "cursor", "required": false, "in": "query", "description": "Cursor for pagination. \n The cursor is used to fetch the next set of results in a paginated response.\n Typically, it is provided in the 'nextCursor' field of the previous response.\n Usage:\n - Start by making an initial request without a cursor.\n - In the response, you'll receive a 'nextCursor' if there are more results to fetch.\n - Use this 'nextCursor' value as the cursor in your subsequent request to fetch the next page of results.\n - Continue this process until the 'nextCursor' is null or not provided, indicating there are no more results.\n Example: \n \n ?cursor=12345\n ", "schema": { "type": "string" } }, { "name": "include", "required": false, "in": "query", "description": "Specific entities to include in the Campaign response. Only valid for Campaign entities. Possible values: adGroups, markets", "example": [ "adGroups", "markets" ], "schema": { "type": "string" } }, { "name": "search", "required": false, "in": "query", "description": "Search query string. The syntax is 'fieldName.operation(a|o):value'.\n The a|o (AND|OR) is optional and if not provided, it is considered as AND.\n Additional searches can be chained with a comma.\n Supported operations are:\n - gt: Greater than\n - lt: Less than\n - gte: Greater than or equal to\n - lte: Less than or equal to\n - eq: Equal to\n - ne: Not equal to\n - ilike: Case-insensitive like\n - like: Case-sensitive like\n - startilike: Case-insensitive like at the start\n - endilike: Case-insensitive like at the end\n - startlike: Case-sensitive like at the start\n - endlike: Case-sensitive like at the end\n Logical operators:\n - a: AND\n - o: OR\n Examples:\n - assetRef.ilike:E62\n Returns all assets with assetRef like E62\n - createdAt.gte:2021-01-01\n Returns all assets created after 2021-01-01\n - status.eqo:PENDING,status.eqo:APPROVED\n Returns all assets with status either PENDING OR APPROVED\n - name.startilike:John\n Returns all assets with name starting with John\n - age.gtea:30,age.lt:40\n Returns all assets with age greater than or equal to 30 and less than 40", "example": "assetRef.ilike:E62,createdAt.gte:2021-01-01", "schema": { "type": "string" } } ], "responses": { "200": { "description": "List of campaigns retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetCampaignsResponseDto" } } } }, "400": { "description": "Bad Request" }, "401": { "description": "Unauthorized" }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Campaigns" ] }, "post": { "operationId": "CampaignController_createCampaign", "summary": "Create a new campaign", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateCampaignDto" } } } }, "responses": { "201": { "description": "The id of the newly created campaign", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateCampaignResponse" } } } }, "400": { "description": "Bad Request" }, "401": { "description": "Unauthorized" }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Campaigns" ] } }, "/creatives": { "get": { "operationId": "PublicCreativesController_getCreatives", "summary": "Get a list of creatives", "parameters": [ { "name": "limit", "required": false, "in": "query", "description": "Limit the number of results (max 10000)", "schema": { "type": "number" } }, { "name": "sort", "required": false, "in": "query", "description": "Field to sort by", "schema": { "type": "string" } }, { "name": "order", "required": false, "in": "query", "description": "Order direction", "schema": { "enum": [ "ASC", "DESC" ], "type": "string" } }, { "name": "cursor", "required": false, "in": "query", "description": "Cursor for pagination. \n The cursor is used to fetch the next set of results in a paginated response.\n Typically, it is provided in the 'nextCursor' field of the previous response.\n Usage:\n - Start by making an initial request without a cursor.\n - In the response, you'll receive a 'nextCursor' if there are more results to fetch.\n - Use this 'nextCursor' value as the cursor in your subsequent request to fetch the next page of results.\n - Continue this process until the 'nextCursor' is null or not provided, indicating there are no more results.\n Example: \n \n ?cursor=12345\n ", "schema": { "type": "string" } }, { "name": "include", "required": false, "in": "query", "description": "Entities to include in the response. Possible values: campaigns", "schema": { "type": "string" } }, { "name": "search", "required": false, "in": "query", "description": "Search query string. The syntax is 'fieldName.operation(a|o):value'.\n The a|o (AND|OR) is optional and if not provided, it is considered as AND.\n Additional searches can be chained with a comma.\n Supported operations are:\n - gt: Greater than\n - lt: Less than\n - gte: Greater than or equal to\n - lte: Less than or equal to\n - eq: Equal to\n - ne: Not equal to\n - ilike: Case-insensitive like\n - like: Case-sensitive like\n - startilike: Case-insensitive like at the start\n - endilike: Case-insensitive like at the end\n - startlike: Case-sensitive like at the start\n - endlike: Case-sensitive like at the end\n Logical operators:\n - a: AND\n - o: OR\n Examples:\n - assetRef.ilike:E62\n Returns all assets with assetRef like E62\n - createdAt.gte:2021-01-01\n Returns all assets created after 2021-01-01\n - status.eqo:PENDING,status.eqo:APPROVED\n Returns all assets with status either PENDING OR APPROVED\n - name.startilike:John\n Returns all assets with name starting with John\n - age.gtea:30,age.lt:40\n Returns all assets with age greater than or equal to 30 and less than 40", "example": "assetRef.ilike:E62,createdAt.gte:2021-01-01", "schema": { "type": "string" } } ], "responses": { "200": { "description": "List of creatives retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetCreativesResponseDto" } } } }, "204": { "description": "No creatives found" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Creatives" ] } }, "/creatives/{id}": { "get": { "operationId": "PublicCreativesController_getCreativeById", "summary": "Get a specific creative by ID", "parameters": [ { "name": "id", "required": true, "in": "path", "description": "The ID of the creative to retrieve", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Creative retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetCreativeByIdResponseDto" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "404": { "description": "Creative not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Creatives" ] } }, "/frames": { "get": { "operationId": "FramesController_getFrames", "summary": "Get a list of frames", "parameters": [ { "name": "limit", "required": false, "in": "query", "description": "Limit the number of results (max 10000)", "schema": { "type": "number" } }, { "name": "sort", "required": false, "in": "query", "description": "Field to sort by", "schema": { "type": "string" } }, { "name": "order", "required": false, "in": "query", "description": "Order direction", "schema": { "enum": [ "ASC", "DESC" ], "type": "string" } }, { "name": "cursor", "required": false, "in": "query", "description": "Cursor for pagination. \n The cursor is used to fetch the next set of results in a paginated response.\n Typically, it is provided in the 'nextCursor' field of the previous response.\n Usage:\n - Start by making an initial request without a cursor.\n - In the response, you'll receive a 'nextCursor' if there are more results to fetch.\n - Use this 'nextCursor' value as the cursor in your subsequent request to fetch the next page of results.\n - Continue this process until the 'nextCursor' is null or not provided, indicating there are no more results.\n Example: \n \n ?cursor=12345\n ", "schema": { "type": "string" } }, { "name": "include", "required": false, "in": "query", "description": "Specific entities to include in the Frame response. Only valid for Frame entities. Possible values: market", "example": [ "market" ], "schema": { "type": "string" } }, { "name": "search", "required": false, "in": "query", "description": "Search query string. The syntax is 'fieldName.operation(a|o):value'.\n The a|o (AND|OR) is optional and if not provided, it is considered as AND.\n Additional searches can be chained with a comma.\n Supported operations are:\n - gt: Greater than\n - lt: Less than\n - gte: Greater than or equal to\n - lte: Less than or equal to\n - eq: Equal to\n - ne: Not equal to\n - ilike: Case-insensitive like\n - like: Case-sensitive like\n - startilike: Case-insensitive like at the start\n - endilike: Case-insensitive like at the end\n - startlike: Case-sensitive like at the start\n - endlike: Case-sensitive like at the end\n Logical operators:\n - a: AND\n - o: OR\n Examples:\n - assetRef.ilike:E62\n Returns all assets with assetRef like E62\n - createdAt.gte:2021-01-01\n Returns all assets created after 2021-01-01\n - status.eqo:PENDING,status.eqo:APPROVED\n Returns all assets with status either PENDING OR APPROVED\n - name.startilike:John\n Returns all assets with name starting with John\n - age.gtea:30,age.lt:40\n Returns all assets with age greater than or equal to 30 and less than 40", "example": "assetRef.ilike:E62,createdAt.gte:2021-01-01", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Frames retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClientFrameEntityDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Frames" ] }, "post": { "operationId": "FramesController_createFrame", "summary": "Create a frame", "parameters": [], "requestBody": { "required": true, "description": "Data to create a new frame", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateFrameDto" } } } }, "responses": { "200": { "description": "Frame created successfully", "content": { "application/json": { "schema": { "type": "number" } } } }, "201": { "description": "" }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Frames" ] } }, "/frames/{id}": { "get": { "operationId": "FramesController_getFrameById", "summary": "Get a frame by ID", "parameters": [ { "name": "limit", "required": false, "in": "query", "description": "Limit the number of results (max 10000)", "schema": { "type": "number" } }, { "name": "sort", "required": false, "in": "query", "description": "Field to sort by", "schema": { "type": "string" } }, { "name": "order", "required": false, "in": "query", "description": "Order direction", "schema": { "enum": [ "ASC", "DESC" ], "type": "string" } }, { "name": "cursor", "required": false, "in": "query", "description": "Cursor for pagination. \n The cursor is used to fetch the next set of results in a paginated response.\n Typically, it is provided in the 'nextCursor' field of the previous response.\n Usage:\n - Start by making an initial request without a cursor.\n - In the response, you'll receive a 'nextCursor' if there are more results to fetch.\n - Use this 'nextCursor' value as the cursor in your subsequent request to fetch the next page of results.\n - Continue this process until the 'nextCursor' is null or not provided, indicating there are no more results.\n Example: \n \n ?cursor=12345\n ", "schema": { "type": "string" } }, { "name": "include", "required": false, "in": "query", "description": "Specific entities to include in the Frame response. Only valid for Frame entities. Possible values: market", "example": [ "market" ], "schema": { "type": "string" } }, { "name": "search", "required": false, "in": "query", "description": "Search query string. The syntax is 'fieldName.operation(a|o):value'.\n The a|o (AND|OR) is optional and if not provided, it is considered as AND.\n Additional searches can be chained with a comma.\n Supported operations are:\n - gt: Greater than\n - lt: Less than\n - gte: Greater than or equal to\n - lte: Less than or equal to\n - eq: Equal to\n - ne: Not equal to\n - ilike: Case-insensitive like\n - like: Case-sensitive like\n - startilike: Case-insensitive like at the start\n - endilike: Case-insensitive like at the end\n - startlike: Case-sensitive like at the start\n - endlike: Case-sensitive like at the end\n Logical operators:\n - a: AND\n - o: OR\n Examples:\n - assetRef.ilike:E62\n Returns all assets with assetRef like E62\n - createdAt.gte:2021-01-01\n Returns all assets created after 2021-01-01\n - status.eqo:PENDING,status.eqo:APPROVED\n Returns all assets with status either PENDING OR APPROVED\n - name.startilike:John\n Returns all assets with name starting with John\n - age.gtea:30,age.lt:40\n Returns all assets with age greater than or equal to 30 and less than 40", "example": "assetRef.ilike:E62,createdAt.gte:2021-01-01", "schema": { "type": "string" } }, { "name": "id", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Frame retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClientFrameEntityDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "404": { "description": "Frame not found" }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Frames" ] }, "patch": { "operationId": "FramesController_patchFrame", "summary": "Patch a frame by ID", "parameters": [ { "name": "id", "required": true, "in": "path", "schema": { "type": "number" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PatchFrameDto" } } } }, "responses": { "200": { "description": "Frame patched successfully", "content": { "application/json": { "schema": { "type": "number" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Frames" ] } }, "/markets": { "get": { "operationId": "MarketController_getMarkets", "summary": "Get a list of markets", "parameters": [ { "name": "limit", "required": false, "in": "query", "description": "Limit the number of results (max 10000)", "schema": { "type": "number" } }, { "name": "sort", "required": false, "in": "query", "description": "Field to sort by", "schema": { "type": "string" } }, { "name": "order", "required": false, "in": "query", "description": "Order direction", "schema": { "enum": [ "ASC", "DESC" ], "type": "string" } }, { "name": "cursor", "required": false, "in": "query", "description": "Cursor for pagination. \n The cursor is used to fetch the next set of results in a paginated response.\n Typically, it is provided in the 'nextCursor' field of the previous response.\n Usage:\n - Start by making an initial request without a cursor.\n - In the response, you'll receive a 'nextCursor' if there are more results to fetch.\n - Use this 'nextCursor' value as the cursor in your subsequent request to fetch the next page of results.\n - Continue this process until the 'nextCursor' is null or not provided, indicating there are no more results.\n Example: \n \n ?cursor=12345\n ", "schema": { "type": "string" } }, { "name": "include", "required": false, "in": "query", "description": "Entities to include in the response. Possible values: campaigns", "schema": { "type": "string" } }, { "name": "search", "required": false, "in": "query", "description": "Search query string. The syntax is 'fieldName.operation(a|o):value'.\n The a|o (AND|OR) is optional and if not provided, it is considered as AND.\n Additional searches can be chained with a comma.\n Supported operations are:\n - gt: Greater than\n - lt: Less than\n - gte: Greater than or equal to\n - lte: Less than or equal to\n - eq: Equal to\n - ne: Not equal to\n - ilike: Case-insensitive like\n - like: Case-sensitive like\n - startilike: Case-insensitive like at the start\n - endilike: Case-insensitive like at the end\n - startlike: Case-sensitive like at the start\n - endlike: Case-sensitive like at the end\n Logical operators:\n - a: AND\n - o: OR\n Examples:\n - assetRef.ilike:E62\n Returns all assets with assetRef like E62\n - createdAt.gte:2021-01-01\n Returns all assets created after 2021-01-01\n - status.eqo:PENDING,status.eqo:APPROVED\n Returns all assets with status either PENDING OR APPROVED\n - name.startilike:John\n Returns all assets with name starting with John\n - age.gtea:30,age.lt:40\n Returns all assets with age greater than or equal to 30 and less than 40", "example": "assetRef.ilike:E62,createdAt.gte:2021-01-01", "schema": { "type": "string" } } ], "responses": { "200": { "description": "List of markets retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetMarketsResponseDto" } } } }, "400": { "description": "Bad Request" }, "401": { "description": "Unauthorized" }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Markets" ] } }, "/media/product-types": { "get": { "operationId": "MediaController_getProductTypes", "summary": "Get a list of product types", "parameters": [], "responses": { "200": { "description": "Product types retrieved successfully" }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Media" ] } }, "/media": { "get": { "operationId": "MediaController_getMedia", "summary": "Get a list of media", "parameters": [ { "name": "include", "required": false, "in": "query", "description": "Specific entities to include in the Media response. Only valid for Media entities. Possible values: face", "example": [ "face" ], "schema": { "type": "string" } } ], "responses": { "200": { "description": "Media retrieved successfully" }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Media" ] } }, "/pixels": { "post": { "operationId": "PixelController_createPixel", "summary": "Create a new pixel", "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatePixelDto" } } } }, "responses": { "201": { "description": "The id of the newly created pixel", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatePixelResponse" } } } }, "400": { "description": "Bad Request" }, "401": { "description": "Unauthorized" } }, "tags": [ "Pixels" ] }, "get": { "operationId": "PixelController_getPixels", "summary": "Get a list of pixels", "parameters": [ { "name": "limit", "required": false, "in": "query", "description": "Limit the number of results (max 10000)", "schema": { "type": "number" } }, { "name": "sort", "required": false, "in": "query", "description": "Field to sort by", "schema": { "type": "string" } }, { "name": "order", "required": false, "in": "query", "description": "Order direction", "schema": { "enum": [ "ASC", "DESC" ], "type": "string" } }, { "name": "cursor", "required": false, "in": "query", "description": "Cursor for pagination. \n The cursor is used to fetch the next set of results in a paginated response.\n Typically, it is provided in the 'nextCursor' field of the previous response.\n Usage:\n - Start by making an initial request without a cursor.\n - In the response, you'll receive a 'nextCursor' if there are more results to fetch.\n - Use this 'nextCursor' value as the cursor in your subsequent request to fetch the next page of results.\n - Continue this process until the 'nextCursor' is null or not provided, indicating there are no more results.\n Example: \n \n ?cursor=12345\n ", "schema": { "type": "string" } }, { "name": "include", "required": false, "in": "query", "description": "Specific entities to include in the Pixel response. Only valid for Pixel entities. Possible values: campaign", "example": [ "campaign" ], "schema": { "type": "string" } }, { "name": "search", "required": false, "in": "query", "description": "Search query string. The syntax is 'fieldName.operation(a|o):value'.\n The a|o (AND|OR) is optional and if not provided, it is considered as AND.\n Additional searches can be chained with a comma.\n Supported operations are:\n - gt: Greater than\n - lt: Less than\n - gte: Greater than or equal to\n - lte: Less than or equal to\n - eq: Equal to\n - ne: Not equal to\n - ilike: Case-insensitive like\n - like: Case-sensitive like\n - startilike: Case-insensitive like at the start\n - endilike: Case-insensitive like at the end\n - startlike: Case-sensitive like at the start\n - endlike: Case-sensitive like at the end\n Logical operators:\n - a: AND\n - o: OR\n Examples:\n - assetRef.ilike:E62\n Returns all assets with assetRef like E62\n - createdAt.gte:2021-01-01\n Returns all assets created after 2021-01-01\n - status.eqo:PENDING,status.eqo:APPROVED\n Returns all assets with status either PENDING OR APPROVED\n - name.startilike:John\n Returns all assets with name starting with John\n - age.gtea:30,age.lt:40\n Returns all assets with age greater than or equal to 30 and less than 40", "example": "assetRef.ilike:E62,createdAt.gte:2021-01-01", "schema": { "type": "string" } } ], "responses": { "200": { "description": "List of pixels retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetPixelsResponseDto" } } } }, "400": { "description": "Bad Request" }, "401": { "description": "Unauthorized" } }, "tags": [ "Pixels" ] } }, "/pixels/{pixelId}": { "get": { "operationId": "PixelController_getPixel", "summary": "Get a single pixel", "parameters": [ { "name": "pixelId", "required": true, "in": "path", "schema": { "type": "number" } }, { "name": "limit", "required": false, "in": "query", "description": "Limit the number of results (max 10000)", "schema": { "type": "number" } }, { "name": "sort", "required": false, "in": "query", "description": "Field to sort by", "schema": { "type": "string" } }, { "name": "order", "required": false, "in": "query", "description": "Order direction", "schema": { "enum": [ "ASC", "DESC" ], "type": "string" } }, { "name": "cursor", "required": false, "in": "query", "description": "Cursor for pagination. \n The cursor is used to fetch the next set of results in a paginated response.\n Typically, it is provided in the 'nextCursor' field of the previous response.\n Usage:\n - Start by making an initial request without a cursor.\n - In the response, you'll receive a 'nextCursor' if there are more results to fetch.\n - Use this 'nextCursor' value as the cursor in your subsequent request to fetch the next page of results.\n - Continue this process until the 'nextCursor' is null or not provided, indicating there are no more results.\n Example: \n \n ?cursor=12345\n ", "schema": { "type": "string" } }, { "name": "include", "required": false, "in": "query", "description": "Specific entities to include in the Pixel response. Only valid for Pixel entities. Possible values: campaign", "example": [ "campaign" ], "schema": { "type": "string" } }, { "name": "search", "required": false, "in": "query", "description": "Search query string. The syntax is 'fieldName.operation(a|o):value'.\n The a|o (AND|OR) is optional and if not provided, it is considered as AND.\n Additional searches can be chained with a comma.\n Supported operations are:\n - gt: Greater than\n - lt: Less than\n - gte: Greater than or equal to\n - lte: Less than or equal to\n - eq: Equal to\n - ne: Not equal to\n - ilike: Case-insensitive like\n - like: Case-sensitive like\n - startilike: Case-insensitive like at the start\n - endilike: Case-insensitive like at the end\n - startlike: Case-sensitive like at the start\n - endlike: Case-sensitive like at the end\n Logical operators:\n - a: AND\n - o: OR\n Examples:\n - assetRef.ilike:E62\n Returns all assets with assetRef like E62\n - createdAt.gte:2021-01-01\n Returns all assets created after 2021-01-01\n - status.eqo:PENDING,status.eqo:APPROVED\n Returns all assets with status either PENDING OR APPROVED\n - name.startilike:John\n Returns all assets with name starting with John\n - age.gtea:30,age.lt:40\n Returns all assets with age greater than or equal to 30 and less than 40", "example": "assetRef.ilike:E62,createdAt.gte:2021-01-01", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Pixel fetched successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetPixelResponseDto" } } } }, "400": { "description": "Bad Request" }, "401": { "description": "Unauthorized" } }, "tags": [ "Pixels" ] }, "patch": { "operationId": "PixelController_updatePixel", "summary": "Update a pixel", "parameters": [ { "name": "pixelId", "required": true, "in": "path", "schema": { "type": "number" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdatePixelDto" } } } }, "responses": { "200": { "description": "Pixel updated successfully" }, "400": { "description": "Bad Request" }, "401": { "description": "Unauthorized" } }, "tags": [ "Pixels" ] } }, "/pixels/{pixelId}/campaign": { "patch": { "operationId": "PixelController_attachCampaignToPixel", "summary": "Attach a campaign to a pixel", "parameters": [ { "name": "pixelId", "required": true, "in": "path", "schema": { "type": "number" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AttachCampaignToPixelDto" } } } }, "responses": { "200": { "description": "Campaign attached to pixel successfully" }, "400": { "description": "Bad Request" }, "401": { "description": "Unauthorized" } }, "tags": [ "Pixels" ] }, "delete": { "operationId": "PixelController_detachCampaignFromPixel", "summary": "Detach a campaign from a pixel", "parameters": [ { "name": "pixelId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Campaign detached from pixel successfully" }, "400": { "description": "Bad Request" }, "401": { "description": "Unauthorized" } }, "tags": [ "Pixels" ] } }, "/pixels/{pixelId}/attribution-study": { "patch": { "operationId": "PixelController_attachAttributionStudyToPixel", "summary": "Attach an attribution study to a pixel", "parameters": [ { "name": "pixelId", "required": true, "in": "path", "schema": { "type": "number" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AttachAttributionStudyToPixelDto" } } } }, "responses": { "200": { "description": "Attribution study attached to pixel successfully" }, "400": { "description": "Bad Request" }, "401": { "description": "Unauthorized" } }, "tags": [ "Pixels" ] }, "delete": { "operationId": "PixelController_detachAttributionStudyFromPixel", "summary": "Detach an attribution study from a pixel", "parameters": [ { "name": "pixelId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Attribution study detached from pixel successfully" }, "400": { "description": "Bad Request" }, "401": { "description": "Unauthorized" } }, "tags": [ "Pixels" ] } }, "/reporting/impressions/date": { "get": { "operationId": "ReportingController_getImpressionsByDate", "summary": "Retrieve impressions data grouped by date", "parameters": [ { "name": "marketId", "required": false, "in": "query", "description": "The ID of the market", "schema": { "type": "number" } }, { "name": "startDate", "required": true, "in": "query", "description": "Start date as Unix timestamp", "schema": { "type": "number" } }, { "name": "endDate", "required": true, "in": "query", "description": "End date as Unix timestamp", "schema": { "type": "number" } }, { "name": "campaignId", "required": true, "in": "query", "description": "The ID of the campaign", "schema": { "type": "number" } }, { "name": "summaryBin", "required": true, "in": "query", "description": "Summary bin for grouping data", "schema": { "enum": [ "LIFETIME", "WEEK", "MONTH", "DAY", "HOUR", "DOW" ], "type": "string" } }, { "name": "timezone", "required": false, "in": "query", "description": "Timezone for date calculations", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Impressions data retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetImpressionsByDateResponseDto" } } } }, "204": { "description": "No Impressions found" }, "401": { "description": "Unauthorized" }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Reporting" ] } }, "/reporting/impressions/ad-group": { "get": { "operationId": "ReportingController_getImpressionsByAdGroup", "summary": "Retrieve impressions data grouped by ad group", "parameters": [ { "name": "marketId", "required": false, "in": "query", "description": "The ID of the market", "schema": { "type": "number" } }, { "name": "startDate", "required": true, "in": "query", "description": "Start date as Unix timestamp", "schema": { "type": "number" } }, { "name": "endDate", "required": true, "in": "query", "description": "End date as Unix timestamp", "schema": { "type": "number" } }, { "name": "campaignId", "required": true, "in": "query", "description": "The ID of the campaign", "schema": { "type": "number" } }, { "name": "summaryBin", "required": true, "in": "query", "description": "Summary bin for grouping data", "schema": { "enum": [ "LIFETIME", "WEEK", "MONTH", "DAY", "HOUR", "DOW" ], "type": "string" } }, { "name": "timezone", "required": false, "in": "query", "description": "Timezone for date calculations", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Impressions data retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetImpressionsByAdGroupResponseDto" } } } }, "204": { "description": "No Impressions found" }, "401": { "description": "Unauthorized" }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Reporting" ] } }, "/reporting/impressions/unit": { "get": { "operationId": "ReportingController_getImpressionsByUnit", "summary": "Retrieve impressions data grouped by unit", "parameters": [ { "name": "marketIds", "required": false, "in": "query", "description": "The IDs of the markets (if optional will use all markets for the campaign)", "schema": { "type": "array", "items": { "type": "number" } } }, { "name": "startDate", "required": true, "in": "query", "description": "Start date as Unix timestamp", "schema": { "type": "number" } }, { "name": "endDate", "required": true, "in": "query", "description": "End date as Unix timestamp", "schema": { "type": "number" } }, { "name": "campaignId", "required": true, "in": "query", "description": "The ID of the campaign", "schema": { "type": "number" } }, { "name": "unitType", "required": false, "in": "query", "description": "Asset or Frame, defaults to both", "schema": { "type": "string" } }, { "name": "summaryBin", "required": false, "in": "query", "description": "Summary bin for grouping data", "schema": { "enum": [ "LIFETIME", "WEEK", "MONTH", "DAY", "HOUR", "DOW" ], "type": "string" } } ], "responses": { "200": { "description": "Impressions data retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetImpressionsByUnitResponseDto" } } } }, "204": { "description": "No Impressions found" }, "401": { "description": "Unauthorized" }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Reporting" ] } }, "/reporting/demographics": { "get": { "operationId": "ReportingController_getDemographics", "summary": "Retrieve demographics data grouped by campaign", "parameters": [ { "name": "campaignId", "required": false, "in": "query", "description": "The ID of the campaigns (only supports one campaign at a time)", "schema": { "type": "array", "items": { "type": "number" } } }, { "name": "startDate", "required": false, "in": "query", "description": "Start date as Unix timestamp", "schema": { "type": "number" } }, { "name": "endDate", "required": false, "in": "query", "description": "End date as Unix timestamp", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Demographics data retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetDemographicsResponseDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Reporting" ] } }, "/reporting/affinities": { "get": { "operationId": "ReportingController_getAffinities", "summary": "Retrieve affinities data", "parameters": [ { "name": "campaignId", "required": false, "in": "query", "description": "The ID of the campaigns (only supports one campaign at a time)", "schema": { "type": "array", "items": { "type": "number" } } }, { "name": "startDate", "required": false, "in": "query", "description": "Start date as Unix timestamp", "schema": { "type": "number" } }, { "name": "endDate", "required": false, "in": "query", "description": "End date as Unix timestamp", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Affinities data retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAffinitiesResponseDto" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Reporting" ] } }, "/reporting/uf/campaign/{campaignId}": { "get": { "operationId": "ReportingController_getUfCampaign", "summary": "Retrieve uniques and frequency data grouped by campaign", "parameters": [ { "name": "campaignId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Uniques and frequency data retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClientReportingUfResponseDto" } } } }, "401": { "description": "Unauthorized" }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Reporting" ] } }, "/reporting/uf/ad-group/campaign/{campaignId}": { "get": { "operationId": "ReportingController_getUfAdGroup", "summary": "Retrieve uniques and frequency data grouped by ad group", "parameters": [ { "name": "campaignId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Uniques and frequency data retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClientReportingUfResponseDtoAdgroup" } } } }, "401": { "description": "Unauthorized" }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Reporting" ] } }, "/reporting/uf/unit/campaign/{campaignId}": { "get": { "operationId": "ReportingController_getUfUnit", "summary": "Retrieve uniques and frequency data grouped by unit", "parameters": [ { "name": "campaignId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "Uniques and frequency data retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ClientReportingUfResponseDtoUnit" } } } }, "401": { "description": "Unauthorized" }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponseDto" } } } } }, "tags": [ "Reporting" ] } } }, "x-explorer-enabled": false, "x-proxy-enabled": false }