Detection
Find brands in social videos. Send a video and a list of brands. Zelf reads the whole video and finds each scene where a brand is identifiable: its logo or name is visible, or the brand is named out loud. Every appearance comes back with its timestamp and what was detected. Detection is asynchronous: create a detection, then poll it for the results.
Detect brands in a video
/api/v1/detection/detection.createDetects a list of brands in one video. Zelf Detection reads the whole video and finds each scene where a brand is identifiable: its logo or name is visible (on a product, on packaging or in on-screen text) or the brand is named out loud. Every appearance (placement) comes back with its timestamp, what was detected and how confident the detection is. Send the brands in context.hints.brands.
Identify the video with content_id (a video already in Zelf) or content_url (a link to any supported video). Sending both, or neither, returns VALIDATION_ERROR. A content_url that is not in Zelf yet is added first, which makes the detection take longer.
Limits
- One video per request, up to 90 minutes. YouTube, TikTok and Instagram videos. Photo posts are not supported.
- A product with no visible logo or name, and no spoken mention, is not detected.
content_url: the full video link, not a short link (vm.tiktok.com,vt.tiktok.com,tiktok.com/t/). Supported forms:youtube.com/watch?v=<id>,youtu.be/<id>,youtube.com/shorts/<id>,tiktok.com/@<handle>/video/<id>,instagram.com/reel/<id>,/p/<id>,/tv/<id>.context.hints.brands: 1 to 200 brands. No two names that differ only by punctuation or digits.context.hints.brands[].name: up to 60 characters.context.hints.brands[].identifiers: 2 to 10, each 2 to 200 characters, including the brand name.context.hints.brands[].negatives: optional, up to 12, each up to 200 characters.
A request that breaks a rule returns VALIDATION_ERROR for the first rule it breaks. error.details.field names the field, for example context.hints.brands[3].identifiers, and error.details.code is one of INVALID_REQUEST, NO_BRANDS, TOO_MANY_BRANDS, INVALID_BRAND, IDENTIFIER_COUNT, IDENTIFIER_TOO_SHORT, UNSUPPORTED_URL, SHORT_LINK, PHOTO_POST or VIDEO_TOO_LONG.
Detection is asynchronous. This method returns immediately with the detection at status: SCHEDULED. Poll detection.get until status is SUCCESS or FAILED; both are final.
Request body
content_id Type: stringmin length 1Identifier of content Zelf already holds, obtained from content.list. Supply this or content_url, not both.
content_id Type: stringmin length 1Identifier of content Zelf already holds, obtained from content.list. Supply this or content_url, not both.
- min length
- 1
content_url Type: string(uri)min length 1Direct URL to the post or video to analyse. Content Zelf does not hold yet is indexed first. Supply this or content_id, not both.
content_url Type: string(uri)min length 1Direct URL to the post or video to analyse. Content Zelf does not hold yet is indexed first. Supply this or content_id, not both.
- min length
- 1
contextType: DetectionContextInputRequestRequiredThe brands to detect and the evidence that counts for each.
Show child attributes
contextType: DetectionContextInputRequestRequiredThe brands to detect and the evidence that counts for each.
context.hintsType: DetectionHintsRequestRequiredThe brands to detect and the evidence that counts for each.
Show child attributes
context.hintsType: DetectionHintsRequestRequiredThe brands to detect and the evidence that counts for each.
context.hints.brandsType: DetectionBrandHintRequest[]Requiredmin items 1 · max items 2001 to 200 brands to detect, in the order the results report them.
Show child attributes
context.hints.brandsType: DetectionBrandHintRequest[]Requiredmin items 1 · max items 2001 to 200 brands to detect, in the order the results report them.
- min items
- 1
- max items
- 200
context.hints.brands[].nameType: stringRequiredmin length 1 · max length 60Display name of the brand, at most 60 characters. Every placement names it verbatim.
context.hints.brands[].nameType: stringRequiredmin length 1 · max length 60Display name of the brand, at most 60 characters. Every placement names it verbatim.
- min length
- 1
- max length
- 60
context.hints.brands[].identifiersType: string[]Requiredmin items 2 · max items 102 to 10 words, logos and product names that count as evidence of this brand, the brand name included, each 2 to 200 characters. For example ['Nike', 'Jordan', 'Air Force 1'].
context.hints.brands[].identifiersType: string[]Requiredmin items 2 · max items 102 to 10 words, logos and product names that count as evidence of this brand, the brand name included, each 2 to 200 characters. For example ['Nike', 'Jordan', 'Air Force 1'].
- min items
- 2
- max items
- 10
context.hints.brands[].negativesType: string[]max items 12Up to 12 look-alikes that must not count, each at most 200 characters, for example ['Jordan (the country)'].
context.hints.brands[].negativesType: string[]max items 12Up to 12 look-alikes that must not count, each at most 200 characters, for example ['Jordan (the country)'].
- max items
- 12
Returns Detection
idType: stringread-onlyIdentifier of the detection. Use this value on follow-up calls.
idType: stringread-onlyIdentifier of the detection. Use this value on follow-up calls.
created_at Type: string(date-time)Time the detection was created (UTC, ISO-8601).
created_at Type: string(date-time)Time the detection was created (UTC, ISO-8601).
updated_at Type: string(date-time)Time the detection was most recently modified (UTC, ISO-8601).
updated_at Type: string(date-time)Time the detection was most recently modified (UTC, ISO-8601).
statusType: stringWhere the detection has got to. One of SCHEDULED, IN_PROGRESS, SUCCESS, FAILED.
statusType: stringWhere the detection has got to. One of SCHEDULED, IN_PROGRESS, SUCCESS, FAILED.
contextType: DetectionContextThe input this detection was created with.
Show child attributes
contextType: DetectionContextThe input this detection was created with.
context.external_url Type: stringdefault URL of the content being analysed. Read from the content this detection resolved to, falling back to the submitted content_url while that content is still being indexed.
context.external_url Type: stringdefault URL of the content being analysed. Read from the content this detection resolved to, falling back to the submitted content_url while that content is still being indexed.
- default
context.hintsType: DetectionHintsThe brands to detect and the evidence that counts for each.
Show child attributes
context.hintsType: DetectionHintsThe brands to detect and the evidence that counts for each.
context.hints.brandsType: DetectionBrandHint[]min items 1 · max items 2001 to 200 brands to detect, in the order the results report them.
Show child attributes
context.hints.brandsType: DetectionBrandHint[]min items 1 · max items 2001 to 200 brands to detect, in the order the results report them.
- min items
- 1
- max items
- 200
context.hints.brands[].nameType: stringmax length 60Display name of the brand, at most 60 characters. Every placement names it verbatim.
context.hints.brands[].nameType: stringmax length 60Display name of the brand, at most 60 characters. Every placement names it verbatim.
- max length
- 60
context.hints.brands[].identifiersType: string[]min items 2 · max items 102 to 10 words, logos and product names that count as evidence of this brand, the brand name included, each 2 to 200 characters. For example ['Nike', 'Jordan', 'Air Force 1'].
context.hints.brands[].identifiersType: string[]min items 2 · max items 102 to 10 words, logos and product names that count as evidence of this brand, the brand name included, each 2 to 200 characters. For example ['Nike', 'Jordan', 'Air Force 1'].
- min items
- 2
- max items
- 10
context.hints.brands[].negativesType: string[]max items 12Up to 12 look-alikes that must not count, each at most 200 characters, for example ['Jordan (the country)'].
context.hints.brands[].negativesType: string[]max items 12Up to 12 look-alikes that must not count, each at most 200 characters, for example ['Jordan (the country)'].
- max items
- 12
resultType: DetectionResultor nullread-onlyThe placements document. null until status is SUCCESS or FAILED; on FAILED it carries the counts and brands: [].
Show child attributes
resultType: DetectionResultor nullread-onlyThe placements document. null until status is SUCCESS or FAILED; on FAILED it carries the counts and brands: [].
result.videoType: DetectionVideoThe content that was analysed.
Show child attributes
result.videoType: DetectionVideoThe content that was analysed.
result.video.video_url Type: string(uri)URL of the analysed content.
result.video.video_url Type: string(uri)URL of the analysed content.
result.video.platformType: stringPlatform the content was posted on.
result.video.platformType: stringPlatform the content was posted on.
result.video.duration_s Type: number(double)Length of the content in seconds.
result.video.duration_s Type: number(double)Length of the content in seconds.
result.summaryType: DetectionSummaryCounts across the whole run.
Show child attributes
result.summaryType: DetectionSummaryCounts across the whole run.
result.summary.brands_requested Type: integerHow many brands the rubric asked for.
result.summary.brands_requested Type: integerHow many brands the rubric asked for.
result.summary.brands_found Type: integerHow many of those brands were present.
result.summary.brands_found Type: integerHow many of those brands were present.
result.summary.placementsType: integerTotal placements reported.
result.summary.placementsType: integerTotal placements reported.
result.summary.confirmedType: integerPlacements that passed the final frame check.
result.summary.confirmedType: integerPlacements that passed the final frame check.
result.summary.reviewType: integerPlacements that did not pass the final frame check, including every Audio placement.
result.summary.reviewType: integerPlacements that did not pass the final frame check, including every Audio placement.
result.brandsType: DetectionBrandResult[]One entry per requested brand, in request order, including the brands that were not found.
Show child attributes
result.brandsType: DetectionBrandResult[]One entry per requested brand, in request order, including the brands that were not found.
result.brands[].brand_name Type: stringThe requested brand, named exactly as it was asked for.
result.brands[].brand_name Type: stringThe requested brand, named exactly as it was asked for.
result.brands[].foundType: booleanWhether the brand was present at all.
result.brands[].foundType: booleanWhether the brand was present at all.
result.brands[].summaryType: DetectionBrandSummaryCounts for this brand.
Show child attributes
result.brands[].summaryType: DetectionBrandSummaryCounts for this brand.
result.brands[].summary.placementsType: integerPlacements for this brand.
result.brands[].summary.placementsType: integerPlacements for this brand.
result.brands[].summary.confirmedType: integerOf those, confirmed.
result.brands[].summary.confirmedType: integerOf those, confirmed.
result.brands[].summary.reviewType: integerOf those, left for review.
result.brands[].summary.reviewType: integerOf those, left for review.
result.brands[].placementsType: DetectionPlacement[]Every placement for this brand, earliest first.
Show child attributes
result.brands[].placementsType: DetectionPlacement[]Every placement for this brand, earliest first.
result.brands[].placements[].timestampType: stringmm:ss-mm:ss, or mm:ss for a single moment. Past an hour the minutes keep counting (69:23-69:25).
result.brands[].placements[].timestampType: stringmm:ss-mm:ss, or mm:ss for a single moment. Past an hour the minutes keep counting (69:23-69:25).
result.brands[].placements[].video_url_at_timestamp Type: string(uri)or nullYouTube: opens the video 5 seconds before the placement. null on TikTok and Instagram.
result.brands[].placements[].video_url_at_timestamp Type: string(uri)or nullYouTube: opens the video 5 seconds before the placement. null on TikTok and Instagram.
result.brands[].placements[].modalityType: stringHow it was detected. One of Visual, Audio, Text.
result.brands[].placements[].modalityType: stringHow it was detected. One of Visual, Audio, Text.
result.brands[].placements[].what_detected Type: stringWhat was observed, in the detector's own words.
result.brands[].placements[].what_detected Type: stringWhat was observed, in the detector's own words.
result.brands[].placements[].reasoningType: stringWhy the observation counts as this brand.
result.brands[].placements[].reasoningType: stringWhy the observation counts as this brand.
result.brands[].placements[].confidenceType: stringconfirmed: passed a final check against the video's frames. review: detected but did not pass that final frame check. Audio placements are always review, because a spoken mention has no frames to check; they can be used as they are.
result.brands[].placements[].confidenceType: stringconfirmed: passed a final check against the video's frames. review: detected but did not pass that final frame check. Audio placements are always review, because a spoken mention has no frames to check; they can be used as they are.
Responses
Detection
idType: stringread-onlyIdentifier of the detection. Use this value on follow-up calls.
idType: stringread-onlyIdentifier of the detection. Use this value on follow-up calls.
created_at Type: string(date-time)Time the detection was created (UTC, ISO-8601).
created_at Type: string(date-time)Time the detection was created (UTC, ISO-8601).
updated_at Type: string(date-time)Time the detection was most recently modified (UTC, ISO-8601).
updated_at Type: string(date-time)Time the detection was most recently modified (UTC, ISO-8601).
statusType: stringWhere the detection has got to. One of SCHEDULED, IN_PROGRESS, SUCCESS, FAILED.
statusType: stringWhere the detection has got to. One of SCHEDULED, IN_PROGRESS, SUCCESS, FAILED.
contextType: DetectionContextThe input this detection was created with.
Show child attributes
contextType: DetectionContextThe input this detection was created with.
context.external_url Type: stringdefault URL of the content being analysed. Read from the content this detection resolved to, falling back to the submitted content_url while that content is still being indexed.
context.external_url Type: stringdefault URL of the content being analysed. Read from the content this detection resolved to, falling back to the submitted content_url while that content is still being indexed.
- default
context.hintsType: DetectionHintsThe brands to detect and the evidence that counts for each.
Show child attributes
context.hintsType: DetectionHintsThe brands to detect and the evidence that counts for each.
context.hints.brandsType: DetectionBrandHint[]min items 1 · max items 2001 to 200 brands to detect, in the order the results report them.
Show child attributes
context.hints.brandsType: DetectionBrandHint[]min items 1 · max items 2001 to 200 brands to detect, in the order the results report them.
- min items
- 1
- max items
- 200
context.hints.brands[].nameType: stringmax length 60Display name of the brand, at most 60 characters. Every placement names it verbatim.
context.hints.brands[].nameType: stringmax length 60Display name of the brand, at most 60 characters. Every placement names it verbatim.
- max length
- 60
context.hints.brands[].identifiersType: string[]min items 2 · max items 102 to 10 words, logos and product names that count as evidence of this brand, the brand name included, each 2 to 200 characters. For example ['Nike', 'Jordan', 'Air Force 1'].
context.hints.brands[].identifiersType: string[]min items 2 · max items 102 to 10 words, logos and product names that count as evidence of this brand, the brand name included, each 2 to 200 characters. For example ['Nike', 'Jordan', 'Air Force 1'].
- min items
- 2
- max items
- 10
context.hints.brands[].negativesType: string[]max items 12Up to 12 look-alikes that must not count, each at most 200 characters, for example ['Jordan (the country)'].
context.hints.brands[].negativesType: string[]max items 12Up to 12 look-alikes that must not count, each at most 200 characters, for example ['Jordan (the country)'].
- max items
- 12
resultType: DetectionResultor nullread-onlyThe placements document. null until status is SUCCESS or FAILED; on FAILED it carries the counts and brands: [].
Show child attributes
resultType: DetectionResultor nullread-onlyThe placements document. null until status is SUCCESS or FAILED; on FAILED it carries the counts and brands: [].
result.videoType: DetectionVideoThe content that was analysed.
Show child attributes
result.videoType: DetectionVideoThe content that was analysed.
result.video.video_url Type: string(uri)URL of the analysed content.
result.video.video_url Type: string(uri)URL of the analysed content.
result.video.platformType: stringPlatform the content was posted on.
result.video.platformType: stringPlatform the content was posted on.
result.video.duration_s Type: number(double)Length of the content in seconds.
result.video.duration_s Type: number(double)Length of the content in seconds.
result.summaryType: DetectionSummaryCounts across the whole run.
Show child attributes
result.summaryType: DetectionSummaryCounts across the whole run.
result.summary.brands_requested Type: integerHow many brands the rubric asked for.
result.summary.brands_requested Type: integerHow many brands the rubric asked for.
result.summary.brands_found Type: integerHow many of those brands were present.
result.summary.brands_found Type: integerHow many of those brands were present.
result.summary.placementsType: integerTotal placements reported.
result.summary.placementsType: integerTotal placements reported.
result.summary.confirmedType: integerPlacements that passed the final frame check.
result.summary.confirmedType: integerPlacements that passed the final frame check.
result.summary.reviewType: integerPlacements that did not pass the final frame check, including every Audio placement.
result.summary.reviewType: integerPlacements that did not pass the final frame check, including every Audio placement.
result.brandsType: DetectionBrandResult[]One entry per requested brand, in request order, including the brands that were not found.
Show child attributes
result.brandsType: DetectionBrandResult[]One entry per requested brand, in request order, including the brands that were not found.
result.brands[].brand_name Type: stringThe requested brand, named exactly as it was asked for.
result.brands[].brand_name Type: stringThe requested brand, named exactly as it was asked for.
result.brands[].foundType: booleanWhether the brand was present at all.
result.brands[].foundType: booleanWhether the brand was present at all.
result.brands[].summaryType: DetectionBrandSummaryCounts for this brand.
Show child attributes
result.brands[].summaryType: DetectionBrandSummaryCounts for this brand.
result.brands[].summary.placementsType: integerPlacements for this brand.
result.brands[].summary.placementsType: integerPlacements for this brand.
result.brands[].summary.confirmedType: integerOf those, confirmed.
result.brands[].summary.confirmedType: integerOf those, confirmed.
result.brands[].summary.reviewType: integerOf those, left for review.
result.brands[].summary.reviewType: integerOf those, left for review.
result.brands[].placementsType: DetectionPlacement[]Every placement for this brand, earliest first.
Show child attributes
result.brands[].placementsType: DetectionPlacement[]Every placement for this brand, earliest first.
result.brands[].placements[].timestampType: stringmm:ss-mm:ss, or mm:ss for a single moment. Past an hour the minutes keep counting (69:23-69:25).
result.brands[].placements[].timestampType: stringmm:ss-mm:ss, or mm:ss for a single moment. Past an hour the minutes keep counting (69:23-69:25).
result.brands[].placements[].video_url_at_timestamp Type: string(uri)or nullYouTube: opens the video 5 seconds before the placement. null on TikTok and Instagram.
result.brands[].placements[].video_url_at_timestamp Type: string(uri)or nullYouTube: opens the video 5 seconds before the placement. null on TikTok and Instagram.
result.brands[].placements[].modalityType: stringHow it was detected. One of Visual, Audio, Text.
result.brands[].placements[].modalityType: stringHow it was detected. One of Visual, Audio, Text.
result.brands[].placements[].what_detected Type: stringWhat was observed, in the detector's own words.
result.brands[].placements[].what_detected Type: stringWhat was observed, in the detector's own words.
result.brands[].placements[].reasoningType: stringWhy the observation counts as this brand.
result.brands[].placements[].reasoningType: stringWhy the observation counts as this brand.
result.brands[].placements[].confidenceType: stringconfirmed: passed a final check against the video's frames. review: detected but did not pass that final frame check. Audio placements are always review, because a spoken mention has no frames to check; they can be used as they are.
result.brands[].placements[].confidenceType: stringconfirmed: passed a final check against the video's frames. review: detected but did not pass that final frame check. Audio placements are always review, because a spoken mention has no frames to check; they can be used as they are.
List detections and their status
/api/v1/detection/detection.listLists detections, newest first. Each detection has its current status and, once finished, its placements in result. Possible statuses are SCHEDULED, IN_PROGRESS, SUCCESS and FAILED. SUCCESS and FAILED are final.
Returns Detection
idType: stringread-onlyIdentifier of the detection. Use this value on follow-up calls.
idType: stringread-onlyIdentifier of the detection. Use this value on follow-up calls.
created_at Type: string(date-time)Time the detection was created (UTC, ISO-8601).
created_at Type: string(date-time)Time the detection was created (UTC, ISO-8601).
updated_at Type: string(date-time)Time the detection was most recently modified (UTC, ISO-8601).
updated_at Type: string(date-time)Time the detection was most recently modified (UTC, ISO-8601).
statusType: stringWhere the detection has got to. One of SCHEDULED, IN_PROGRESS, SUCCESS, FAILED.
statusType: stringWhere the detection has got to. One of SCHEDULED, IN_PROGRESS, SUCCESS, FAILED.
contextType: DetectionContextThe input this detection was created with.
Show child attributes
contextType: DetectionContextThe input this detection was created with.
context.external_url Type: stringdefault URL of the content being analysed. Read from the content this detection resolved to, falling back to the submitted content_url while that content is still being indexed.
context.external_url Type: stringdefault URL of the content being analysed. Read from the content this detection resolved to, falling back to the submitted content_url while that content is still being indexed.
- default
context.hintsType: DetectionHintsThe brands to detect and the evidence that counts for each.
Show child attributes
context.hintsType: DetectionHintsThe brands to detect and the evidence that counts for each.
context.hints.brandsType: DetectionBrandHint[]min items 1 · max items 2001 to 200 brands to detect, in the order the results report them.
Show child attributes
context.hints.brandsType: DetectionBrandHint[]min items 1 · max items 2001 to 200 brands to detect, in the order the results report them.
- min items
- 1
- max items
- 200
context.hints.brands[].nameType: stringmax length 60Display name of the brand, at most 60 characters. Every placement names it verbatim.
context.hints.brands[].nameType: stringmax length 60Display name of the brand, at most 60 characters. Every placement names it verbatim.
- max length
- 60
context.hints.brands[].identifiersType: string[]min items 2 · max items 102 to 10 words, logos and product names that count as evidence of this brand, the brand name included, each 2 to 200 characters. For example ['Nike', 'Jordan', 'Air Force 1'].
context.hints.brands[].identifiersType: string[]min items 2 · max items 102 to 10 words, logos and product names that count as evidence of this brand, the brand name included, each 2 to 200 characters. For example ['Nike', 'Jordan', 'Air Force 1'].
- min items
- 2
- max items
- 10
context.hints.brands[].negativesType: string[]max items 12Up to 12 look-alikes that must not count, each at most 200 characters, for example ['Jordan (the country)'].
context.hints.brands[].negativesType: string[]max items 12Up to 12 look-alikes that must not count, each at most 200 characters, for example ['Jordan (the country)'].
- max items
- 12
resultType: DetectionResultor nullread-onlyThe placements document. null until status is SUCCESS or FAILED; on FAILED it carries the counts and brands: [].
Show child attributes
resultType: DetectionResultor nullread-onlyThe placements document. null until status is SUCCESS or FAILED; on FAILED it carries the counts and brands: [].
result.videoType: DetectionVideoThe content that was analysed.
Show child attributes
result.videoType: DetectionVideoThe content that was analysed.
result.video.video_url Type: string(uri)URL of the analysed content.
result.video.video_url Type: string(uri)URL of the analysed content.
result.video.platformType: stringPlatform the content was posted on.
result.video.platformType: stringPlatform the content was posted on.
result.video.duration_s Type: number(double)Length of the content in seconds.
result.video.duration_s Type: number(double)Length of the content in seconds.
result.summaryType: DetectionSummaryCounts across the whole run.
Show child attributes
result.summaryType: DetectionSummaryCounts across the whole run.
result.summary.brands_requested Type: integerHow many brands the rubric asked for.
result.summary.brands_requested Type: integerHow many brands the rubric asked for.
result.summary.brands_found Type: integerHow many of those brands were present.
result.summary.brands_found Type: integerHow many of those brands were present.
result.summary.placementsType: integerTotal placements reported.
result.summary.placementsType: integerTotal placements reported.
result.summary.confirmedType: integerPlacements that passed the final frame check.
result.summary.confirmedType: integerPlacements that passed the final frame check.
result.summary.reviewType: integerPlacements that did not pass the final frame check, including every Audio placement.
result.summary.reviewType: integerPlacements that did not pass the final frame check, including every Audio placement.
result.brandsType: DetectionBrandResult[]One entry per requested brand, in request order, including the brands that were not found.
Show child attributes
result.brandsType: DetectionBrandResult[]One entry per requested brand, in request order, including the brands that were not found.
result.brands[].brand_name Type: stringThe requested brand, named exactly as it was asked for.
result.brands[].brand_name Type: stringThe requested brand, named exactly as it was asked for.
result.brands[].foundType: booleanWhether the brand was present at all.
result.brands[].foundType: booleanWhether the brand was present at all.
result.brands[].summaryType: DetectionBrandSummaryCounts for this brand.
Show child attributes
result.brands[].summaryType: DetectionBrandSummaryCounts for this brand.
result.brands[].summary.placementsType: integerPlacements for this brand.
result.brands[].summary.placementsType: integerPlacements for this brand.
result.brands[].summary.confirmedType: integerOf those, confirmed.
result.brands[].summary.confirmedType: integerOf those, confirmed.
result.brands[].summary.reviewType: integerOf those, left for review.
result.brands[].summary.reviewType: integerOf those, left for review.
result.brands[].placementsType: DetectionPlacement[]Every placement for this brand, earliest first.
Show child attributes
result.brands[].placementsType: DetectionPlacement[]Every placement for this brand, earliest first.
result.brands[].placements[].timestampType: stringmm:ss-mm:ss, or mm:ss for a single moment. Past an hour the minutes keep counting (69:23-69:25).
result.brands[].placements[].timestampType: stringmm:ss-mm:ss, or mm:ss for a single moment. Past an hour the minutes keep counting (69:23-69:25).
result.brands[].placements[].video_url_at_timestamp Type: string(uri)or nullYouTube: opens the video 5 seconds before the placement. null on TikTok and Instagram.
result.brands[].placements[].video_url_at_timestamp Type: string(uri)or nullYouTube: opens the video 5 seconds before the placement. null on TikTok and Instagram.
result.brands[].placements[].modalityType: stringHow it was detected. One of Visual, Audio, Text.
result.brands[].placements[].modalityType: stringHow it was detected. One of Visual, Audio, Text.
result.brands[].placements[].what_detected Type: stringWhat was observed, in the detector's own words.
result.brands[].placements[].what_detected Type: stringWhat was observed, in the detector's own words.
result.brands[].placements[].reasoningType: stringWhy the observation counts as this brand.
result.brands[].placements[].reasoningType: stringWhy the observation counts as this brand.
result.brands[].placements[].confidenceType: stringconfirmed: passed a final check against the video's frames. review: detected but did not pass that final frame check. Audio placements are always review, because a spoken mention has no frames to check; they can be used as they are.
result.brands[].placements[].confidenceType: stringconfirmed: passed a final check against the video's frames. review: detected but did not pass that final frame check. Audio placements are always review, because a spoken mention has no frames to check; they can be used as they are.
Responses
Detection
idType: stringread-onlyIdentifier of the detection. Use this value on follow-up calls.
idType: stringread-onlyIdentifier of the detection. Use this value on follow-up calls.
created_at Type: string(date-time)Time the detection was created (UTC, ISO-8601).
created_at Type: string(date-time)Time the detection was created (UTC, ISO-8601).
updated_at Type: string(date-time)Time the detection was most recently modified (UTC, ISO-8601).
updated_at Type: string(date-time)Time the detection was most recently modified (UTC, ISO-8601).
statusType: stringWhere the detection has got to. One of SCHEDULED, IN_PROGRESS, SUCCESS, FAILED.
statusType: stringWhere the detection has got to. One of SCHEDULED, IN_PROGRESS, SUCCESS, FAILED.
contextType: DetectionContextThe input this detection was created with.
Show child attributes
contextType: DetectionContextThe input this detection was created with.
context.external_url Type: stringdefault URL of the content being analysed. Read from the content this detection resolved to, falling back to the submitted content_url while that content is still being indexed.
context.external_url Type: stringdefault URL of the content being analysed. Read from the content this detection resolved to, falling back to the submitted content_url while that content is still being indexed.
- default
context.hintsType: DetectionHintsThe brands to detect and the evidence that counts for each.
Show child attributes
context.hintsType: DetectionHintsThe brands to detect and the evidence that counts for each.
context.hints.brandsType: DetectionBrandHint[]min items 1 · max items 2001 to 200 brands to detect, in the order the results report them.
Show child attributes
context.hints.brandsType: DetectionBrandHint[]min items 1 · max items 2001 to 200 brands to detect, in the order the results report them.
- min items
- 1
- max items
- 200
context.hints.brands[].nameType: stringmax length 60Display name of the brand, at most 60 characters. Every placement names it verbatim.
context.hints.brands[].nameType: stringmax length 60Display name of the brand, at most 60 characters. Every placement names it verbatim.
- max length
- 60
context.hints.brands[].identifiersType: string[]min items 2 · max items 102 to 10 words, logos and product names that count as evidence of this brand, the brand name included, each 2 to 200 characters. For example ['Nike', 'Jordan', 'Air Force 1'].
context.hints.brands[].identifiersType: string[]min items 2 · max items 102 to 10 words, logos and product names that count as evidence of this brand, the brand name included, each 2 to 200 characters. For example ['Nike', 'Jordan', 'Air Force 1'].
- min items
- 2
- max items
- 10
context.hints.brands[].negativesType: string[]max items 12Up to 12 look-alikes that must not count, each at most 200 characters, for example ['Jordan (the country)'].
context.hints.brands[].negativesType: string[]max items 12Up to 12 look-alikes that must not count, each at most 200 characters, for example ['Jordan (the country)'].
- max items
- 12
resultType: DetectionResultor nullread-onlyThe placements document. null until status is SUCCESS or FAILED; on FAILED it carries the counts and brands: [].
Show child attributes
resultType: DetectionResultor nullread-onlyThe placements document. null until status is SUCCESS or FAILED; on FAILED it carries the counts and brands: [].
result.videoType: DetectionVideoThe content that was analysed.
Show child attributes
result.videoType: DetectionVideoThe content that was analysed.
result.video.video_url Type: string(uri)URL of the analysed content.
result.video.video_url Type: string(uri)URL of the analysed content.
result.video.platformType: stringPlatform the content was posted on.
result.video.platformType: stringPlatform the content was posted on.
result.video.duration_s Type: number(double)Length of the content in seconds.
result.video.duration_s Type: number(double)Length of the content in seconds.
result.summaryType: DetectionSummaryCounts across the whole run.
Show child attributes
result.summaryType: DetectionSummaryCounts across the whole run.
result.summary.brands_requested Type: integerHow many brands the rubric asked for.
result.summary.brands_requested Type: integerHow many brands the rubric asked for.
result.summary.brands_found Type: integerHow many of those brands were present.
result.summary.brands_found Type: integerHow many of those brands were present.
result.summary.placementsType: integerTotal placements reported.
result.summary.placementsType: integerTotal placements reported.
result.summary.confirmedType: integerPlacements that passed the final frame check.
result.summary.confirmedType: integerPlacements that passed the final frame check.
result.summary.reviewType: integerPlacements that did not pass the final frame check, including every Audio placement.
result.summary.reviewType: integerPlacements that did not pass the final frame check, including every Audio placement.
result.brandsType: DetectionBrandResult[]One entry per requested brand, in request order, including the brands that were not found.
Show child attributes
result.brandsType: DetectionBrandResult[]One entry per requested brand, in request order, including the brands that were not found.
result.brands[].brand_name Type: stringThe requested brand, named exactly as it was asked for.
result.brands[].brand_name Type: stringThe requested brand, named exactly as it was asked for.
result.brands[].foundType: booleanWhether the brand was present at all.
result.brands[].foundType: booleanWhether the brand was present at all.
result.brands[].summaryType: DetectionBrandSummaryCounts for this brand.
Show child attributes
result.brands[].summaryType: DetectionBrandSummaryCounts for this brand.
result.brands[].summary.placementsType: integerPlacements for this brand.
result.brands[].summary.placementsType: integerPlacements for this brand.
result.brands[].summary.confirmedType: integerOf those, confirmed.
result.brands[].summary.confirmedType: integerOf those, confirmed.
result.brands[].summary.reviewType: integerOf those, left for review.
result.brands[].summary.reviewType: integerOf those, left for review.
result.brands[].placementsType: DetectionPlacement[]Every placement for this brand, earliest first.
Show child attributes
result.brands[].placementsType: DetectionPlacement[]Every placement for this brand, earliest first.
result.brands[].placements[].timestampType: stringmm:ss-mm:ss, or mm:ss for a single moment. Past an hour the minutes keep counting (69:23-69:25).
result.brands[].placements[].timestampType: stringmm:ss-mm:ss, or mm:ss for a single moment. Past an hour the minutes keep counting (69:23-69:25).
result.brands[].placements[].video_url_at_timestamp Type: string(uri)or nullYouTube: opens the video 5 seconds before the placement. null on TikTok and Instagram.
result.brands[].placements[].video_url_at_timestamp Type: string(uri)or nullYouTube: opens the video 5 seconds before the placement. null on TikTok and Instagram.
result.brands[].placements[].modalityType: stringHow it was detected. One of Visual, Audio, Text.
result.brands[].placements[].modalityType: stringHow it was detected. One of Visual, Audio, Text.
result.brands[].placements[].what_detected Type: stringWhat was observed, in the detector's own words.
result.brands[].placements[].what_detected Type: stringWhat was observed, in the detector's own words.
result.brands[].placements[].reasoningType: stringWhy the observation counts as this brand.
result.brands[].placements[].reasoningType: stringWhy the observation counts as this brand.
result.brands[].placements[].confidenceType: stringconfirmed: passed a final check against the video's frames. review: detected but did not pass that final frame check. Audio placements are always review, because a spoken mention has no frames to check; they can be used as they are.
result.brands[].placements[].confidenceType: stringconfirmed: passed a final check against the video's frames. review: detected but did not pass that final frame check. Audio placements are always review, because a spoken mention has no frames to check; they can be used as they are.
Retrieve a detection and its placements
/api/v1/detection/{id}/detection.getRetrieve one detection by id, the value returned by detection.create. Poll it until status is SUCCESS or FAILED; both are final. result is null until then. On FAILED, result carries the counts and brands: [].
Reading result
brands: one entry per requested brand, in request order.found: falsemeans the brand was searched for and does not appear in the video.timestamp:mm:ss-mm:ss, ormm:ssfor a single moment. Past an hour the minutes keep counting (69:23-69:25).modality:Visual(logo or product on screen),Text(brand name written on screen) orAudio(brand name spoken).confidence:confirmedmeans the placement passed a final check against the video's frames;reviewmeans it was detected but did not pass that final frame check.Audioplacements are alwaysreview, because a spoken mention has no frames to check. OnVisualandTextplacements,reviewmeans the final frame check did not confirm the placement.video_url_at_timestamp: YouTube only, opens the video 5 seconds before the placement.nullon TikTok and Instagram.
Parameters
idType: stringRequired
idType: stringRequiredReturns Detection
idType: stringread-onlyIdentifier of the detection. Use this value on follow-up calls.
idType: stringread-onlyIdentifier of the detection. Use this value on follow-up calls.
created_at Type: string(date-time)Time the detection was created (UTC, ISO-8601).
created_at Type: string(date-time)Time the detection was created (UTC, ISO-8601).
updated_at Type: string(date-time)Time the detection was most recently modified (UTC, ISO-8601).
updated_at Type: string(date-time)Time the detection was most recently modified (UTC, ISO-8601).
statusType: stringWhere the detection has got to. One of SCHEDULED, IN_PROGRESS, SUCCESS, FAILED.
statusType: stringWhere the detection has got to. One of SCHEDULED, IN_PROGRESS, SUCCESS, FAILED.
contextType: DetectionContextThe input this detection was created with.
Show child attributes
contextType: DetectionContextThe input this detection was created with.
context.external_url Type: stringdefault URL of the content being analysed. Read from the content this detection resolved to, falling back to the submitted content_url while that content is still being indexed.
context.external_url Type: stringdefault URL of the content being analysed. Read from the content this detection resolved to, falling back to the submitted content_url while that content is still being indexed.
- default
context.hintsType: DetectionHintsThe brands to detect and the evidence that counts for each.
Show child attributes
context.hintsType: DetectionHintsThe brands to detect and the evidence that counts for each.
context.hints.brandsType: DetectionBrandHint[]min items 1 · max items 2001 to 200 brands to detect, in the order the results report them.
Show child attributes
context.hints.brandsType: DetectionBrandHint[]min items 1 · max items 2001 to 200 brands to detect, in the order the results report them.
- min items
- 1
- max items
- 200
context.hints.brands[].nameType: stringmax length 60Display name of the brand, at most 60 characters. Every placement names it verbatim.
context.hints.brands[].nameType: stringmax length 60Display name of the brand, at most 60 characters. Every placement names it verbatim.
- max length
- 60
context.hints.brands[].identifiersType: string[]min items 2 · max items 102 to 10 words, logos and product names that count as evidence of this brand, the brand name included, each 2 to 200 characters. For example ['Nike', 'Jordan', 'Air Force 1'].
context.hints.brands[].identifiersType: string[]min items 2 · max items 102 to 10 words, logos and product names that count as evidence of this brand, the brand name included, each 2 to 200 characters. For example ['Nike', 'Jordan', 'Air Force 1'].
- min items
- 2
- max items
- 10
context.hints.brands[].negativesType: string[]max items 12Up to 12 look-alikes that must not count, each at most 200 characters, for example ['Jordan (the country)'].
context.hints.brands[].negativesType: string[]max items 12Up to 12 look-alikes that must not count, each at most 200 characters, for example ['Jordan (the country)'].
- max items
- 12
resultType: DetectionResultor nullread-onlyThe placements document. null until status is SUCCESS or FAILED; on FAILED it carries the counts and brands: [].
Show child attributes
resultType: DetectionResultor nullread-onlyThe placements document. null until status is SUCCESS or FAILED; on FAILED it carries the counts and brands: [].
result.videoType: DetectionVideoThe content that was analysed.
Show child attributes
result.videoType: DetectionVideoThe content that was analysed.
result.video.video_url Type: string(uri)URL of the analysed content.
result.video.video_url Type: string(uri)URL of the analysed content.
result.video.platformType: stringPlatform the content was posted on.
result.video.platformType: stringPlatform the content was posted on.
result.video.duration_s Type: number(double)Length of the content in seconds.
result.video.duration_s Type: number(double)Length of the content in seconds.
result.summaryType: DetectionSummaryCounts across the whole run.
Show child attributes
result.summaryType: DetectionSummaryCounts across the whole run.
result.summary.brands_requested Type: integerHow many brands the rubric asked for.
result.summary.brands_requested Type: integerHow many brands the rubric asked for.
result.summary.brands_found Type: integerHow many of those brands were present.
result.summary.brands_found Type: integerHow many of those brands were present.
result.summary.placementsType: integerTotal placements reported.
result.summary.placementsType: integerTotal placements reported.
result.summary.confirmedType: integerPlacements that passed the final frame check.
result.summary.confirmedType: integerPlacements that passed the final frame check.
result.summary.reviewType: integerPlacements that did not pass the final frame check, including every Audio placement.
result.summary.reviewType: integerPlacements that did not pass the final frame check, including every Audio placement.
result.brandsType: DetectionBrandResult[]One entry per requested brand, in request order, including the brands that were not found.
Show child attributes
result.brandsType: DetectionBrandResult[]One entry per requested brand, in request order, including the brands that were not found.
result.brands[].brand_name Type: stringThe requested brand, named exactly as it was asked for.
result.brands[].brand_name Type: stringThe requested brand, named exactly as it was asked for.
result.brands[].foundType: booleanWhether the brand was present at all.
result.brands[].foundType: booleanWhether the brand was present at all.
result.brands[].summaryType: DetectionBrandSummaryCounts for this brand.
Show child attributes
result.brands[].summaryType: DetectionBrandSummaryCounts for this brand.
result.brands[].summary.placementsType: integerPlacements for this brand.
result.brands[].summary.placementsType: integerPlacements for this brand.
result.brands[].summary.confirmedType: integerOf those, confirmed.
result.brands[].summary.confirmedType: integerOf those, confirmed.
result.brands[].summary.reviewType: integerOf those, left for review.
result.brands[].summary.reviewType: integerOf those, left for review.
result.brands[].placementsType: DetectionPlacement[]Every placement for this brand, earliest first.
Show child attributes
result.brands[].placementsType: DetectionPlacement[]Every placement for this brand, earliest first.
result.brands[].placements[].timestampType: stringmm:ss-mm:ss, or mm:ss for a single moment. Past an hour the minutes keep counting (69:23-69:25).
result.brands[].placements[].timestampType: stringmm:ss-mm:ss, or mm:ss for a single moment. Past an hour the minutes keep counting (69:23-69:25).
result.brands[].placements[].video_url_at_timestamp Type: string(uri)or nullYouTube: opens the video 5 seconds before the placement. null on TikTok and Instagram.
result.brands[].placements[].video_url_at_timestamp Type: string(uri)or nullYouTube: opens the video 5 seconds before the placement. null on TikTok and Instagram.
result.brands[].placements[].modalityType: stringHow it was detected. One of Visual, Audio, Text.
result.brands[].placements[].modalityType: stringHow it was detected. One of Visual, Audio, Text.
result.brands[].placements[].what_detected Type: stringWhat was observed, in the detector's own words.
result.brands[].placements[].what_detected Type: stringWhat was observed, in the detector's own words.
result.brands[].placements[].reasoningType: stringWhy the observation counts as this brand.
result.brands[].placements[].reasoningType: stringWhy the observation counts as this brand.
result.brands[].placements[].confidenceType: stringconfirmed: passed a final check against the video's frames. review: detected but did not pass that final frame check. Audio placements are always review, because a spoken mention has no frames to check; they can be used as they are.
result.brands[].placements[].confidenceType: stringconfirmed: passed a final check against the video's frames. review: detected but did not pass that final frame check. Audio placements are always review, because a spoken mention has no frames to check; they can be used as they are.
Responses
Detection
idType: stringread-onlyIdentifier of the detection. Use this value on follow-up calls.
idType: stringread-onlyIdentifier of the detection. Use this value on follow-up calls.
created_at Type: string(date-time)Time the detection was created (UTC, ISO-8601).
created_at Type: string(date-time)Time the detection was created (UTC, ISO-8601).
updated_at Type: string(date-time)Time the detection was most recently modified (UTC, ISO-8601).
updated_at Type: string(date-time)Time the detection was most recently modified (UTC, ISO-8601).
statusType: stringWhere the detection has got to. One of SCHEDULED, IN_PROGRESS, SUCCESS, FAILED.
statusType: stringWhere the detection has got to. One of SCHEDULED, IN_PROGRESS, SUCCESS, FAILED.
contextType: DetectionContextThe input this detection was created with.
Show child attributes
contextType: DetectionContextThe input this detection was created with.
context.external_url Type: stringdefault URL of the content being analysed. Read from the content this detection resolved to, falling back to the submitted content_url while that content is still being indexed.
context.external_url Type: stringdefault URL of the content being analysed. Read from the content this detection resolved to, falling back to the submitted content_url while that content is still being indexed.
- default
context.hintsType: DetectionHintsThe brands to detect and the evidence that counts for each.
Show child attributes
context.hintsType: DetectionHintsThe brands to detect and the evidence that counts for each.
context.hints.brandsType: DetectionBrandHint[]min items 1 · max items 2001 to 200 brands to detect, in the order the results report them.
Show child attributes
context.hints.brandsType: DetectionBrandHint[]min items 1 · max items 2001 to 200 brands to detect, in the order the results report them.
- min items
- 1
- max items
- 200
context.hints.brands[].nameType: stringmax length 60Display name of the brand, at most 60 characters. Every placement names it verbatim.
context.hints.brands[].nameType: stringmax length 60Display name of the brand, at most 60 characters. Every placement names it verbatim.
- max length
- 60
context.hints.brands[].identifiersType: string[]min items 2 · max items 102 to 10 words, logos and product names that count as evidence of this brand, the brand name included, each 2 to 200 characters. For example ['Nike', 'Jordan', 'Air Force 1'].
context.hints.brands[].identifiersType: string[]min items 2 · max items 102 to 10 words, logos and product names that count as evidence of this brand, the brand name included, each 2 to 200 characters. For example ['Nike', 'Jordan', 'Air Force 1'].
- min items
- 2
- max items
- 10
context.hints.brands[].negativesType: string[]max items 12Up to 12 look-alikes that must not count, each at most 200 characters, for example ['Jordan (the country)'].
context.hints.brands[].negativesType: string[]max items 12Up to 12 look-alikes that must not count, each at most 200 characters, for example ['Jordan (the country)'].
- max items
- 12
resultType: DetectionResultor nullread-onlyThe placements document. null until status is SUCCESS or FAILED; on FAILED it carries the counts and brands: [].
Show child attributes
resultType: DetectionResultor nullread-onlyThe placements document. null until status is SUCCESS or FAILED; on FAILED it carries the counts and brands: [].
result.videoType: DetectionVideoThe content that was analysed.
Show child attributes
result.videoType: DetectionVideoThe content that was analysed.
result.video.video_url Type: string(uri)URL of the analysed content.
result.video.video_url Type: string(uri)URL of the analysed content.
result.video.platformType: stringPlatform the content was posted on.
result.video.platformType: stringPlatform the content was posted on.
result.video.duration_s Type: number(double)Length of the content in seconds.
result.video.duration_s Type: number(double)Length of the content in seconds.
result.summaryType: DetectionSummaryCounts across the whole run.
Show child attributes
result.summaryType: DetectionSummaryCounts across the whole run.
result.summary.brands_requested Type: integerHow many brands the rubric asked for.
result.summary.brands_requested Type: integerHow many brands the rubric asked for.
result.summary.brands_found Type: integerHow many of those brands were present.
result.summary.brands_found Type: integerHow many of those brands were present.
result.summary.placementsType: integerTotal placements reported.
result.summary.placementsType: integerTotal placements reported.
result.summary.confirmedType: integerPlacements that passed the final frame check.
result.summary.confirmedType: integerPlacements that passed the final frame check.
result.summary.reviewType: integerPlacements that did not pass the final frame check, including every Audio placement.
result.summary.reviewType: integerPlacements that did not pass the final frame check, including every Audio placement.
result.brandsType: DetectionBrandResult[]One entry per requested brand, in request order, including the brands that were not found.
Show child attributes
result.brandsType: DetectionBrandResult[]One entry per requested brand, in request order, including the brands that were not found.
result.brands[].brand_name Type: stringThe requested brand, named exactly as it was asked for.
result.brands[].brand_name Type: stringThe requested brand, named exactly as it was asked for.
result.brands[].foundType: booleanWhether the brand was present at all.
result.brands[].foundType: booleanWhether the brand was present at all.
result.brands[].summaryType: DetectionBrandSummaryCounts for this brand.
Show child attributes
result.brands[].summaryType: DetectionBrandSummaryCounts for this brand.
result.brands[].summary.placementsType: integerPlacements for this brand.
result.brands[].summary.placementsType: integerPlacements for this brand.
result.brands[].summary.confirmedType: integerOf those, confirmed.
result.brands[].summary.confirmedType: integerOf those, confirmed.
result.brands[].summary.reviewType: integerOf those, left for review.
result.brands[].summary.reviewType: integerOf those, left for review.
result.brands[].placementsType: DetectionPlacement[]Every placement for this brand, earliest first.
Show child attributes
result.brands[].placementsType: DetectionPlacement[]Every placement for this brand, earliest first.
result.brands[].placements[].timestampType: stringmm:ss-mm:ss, or mm:ss for a single moment. Past an hour the minutes keep counting (69:23-69:25).
result.brands[].placements[].timestampType: stringmm:ss-mm:ss, or mm:ss for a single moment. Past an hour the minutes keep counting (69:23-69:25).
result.brands[].placements[].video_url_at_timestamp Type: string(uri)or nullYouTube: opens the video 5 seconds before the placement. null on TikTok and Instagram.
result.brands[].placements[].video_url_at_timestamp Type: string(uri)or nullYouTube: opens the video 5 seconds before the placement. null on TikTok and Instagram.
result.brands[].placements[].modalityType: stringHow it was detected. One of Visual, Audio, Text.
result.brands[].placements[].modalityType: stringHow it was detected. One of Visual, Audio, Text.
result.brands[].placements[].what_detected Type: stringWhat was observed, in the detector's own words.
result.brands[].placements[].what_detected Type: stringWhat was observed, in the detector's own words.
result.brands[].placements[].reasoningType: stringWhy the observation counts as this brand.
result.brands[].placements[].reasoningType: stringWhy the observation counts as this brand.
result.brands[].placements[].confidenceType: stringconfirmed: passed a final check against the video's frames. review: detected but did not pass that final frame check. Audio placements are always review, because a spoken mention has no frames to check; they can be used as they are.
result.brands[].placements[].confidenceType: stringconfirmed: passed a final check against the video's frames. review: detected but did not pass that final frame check. Audio placements are always review, because a spoken mention has no frames to check; they can be used as they are.