GumGum Contextual API

Server-to-server REST API returning content-level contextual classification, brand safety and suitability, and sentiment analysis for web pages, video (including audio), individual video frames, images and raw text. Analysis is asynchronous: submit an asset, receive a UUID, then poll for the result or supply a callback URL for webhook delivery. Authenticated with an X-api-key request header.

OpenAPI Specification

gumgum-contextual-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: GumGum Contextual API
  version: '1.0'
  x-generated: '2026-08-01'
  x-method: generated
  x-source: >-
    Generated faithfully from the published GumGum Contextual Documentation Center
    (https://gumgum.jira.com/wiki/spaces/VDC) — specifically the Get Started - Page API
    (pages/1712095256), Get Started - Video API (pages/1712029924), API Reference
    (pages/1712030855), Page API Reference (pages/1780285512), Image API Reference
    (pages/1780187188), Text API Reference (pages/1780187198) and JSON Response Reference
    (pages/1724743813) pages. GumGum does not publish an OpenAPI description. Every path,
    method, parameter, response field, and status code below is transcribed from those pages.
    The host was verified by probing it on 2026-08-01 (GET https://verity-api.gumgum.com/page/classify
    with no API key returns HTTP 403 with the JSON body {"message":"Forbidden"}; unmatched
    paths return HTTP 403 {"message":"Missing Authentication Token"} — the AWS API Gateway
    signature). No operation, field, or value was invented; where the documentation does not
    enumerate a request body's fields, the schema is left open and annotated rather than guessed.
  description: >-
    The GumGum Contextual API (formerly Verity) returns content-level contextual classification,
    brand safety/suitability and sentiment analysis for web pages, video (including audio),
    individual video frames (intravideo), images and raw text. Analysis is asynchronous: a
    request is submitted, the service returns a UUID, and results are retrieved either by
    polling or by supplying a callback URL that GumGum POSTs the finished analysis to. Results
    include IAB Content Taxonomy categories (v1, v2 and v3), extracted keywords, named entities,
    a brand-safety boolean, detected threats and sentiment scores.
  contact:
    name: GumGum Partner Support
    url: https://gumgum.jira.com/wiki/spaces/VDC/pages/1728217585
    email: support@gumgum.com
  termsOfService: https://gumgum.com/terms-and-policies
  x-documentation: https://gumgum.jira.com/wiki/spaces/VDC
servers:
  - url: https://verity-api.gumgum.com
    description: Production GumGum Contextual API host
security:
  - apiKeyHeader: []
tags:
  - name: Page
    description: Contextual classification and brand-safety analysis of a web page URL.
  - name: Video
    description: Contextual classification and brand-safety analysis of a video asset, including its audio track.
  - name: Intravideo
    description: Frame-level (intravideo) classification of a video asset. Version 2 of the video classification surface.
  - name: Image
    description: Contextual classification, keyword and threat analysis of a single image.
  - name: Text
    description: Contextual classification, keyword and brand-safety analysis of a raw block of text.
paths:
  /page/classify:
    get:
      operationId: classifyPage
      summary: Classify a web page
      description: >-
        Submit a properly formed web page URL for contextual and brand-safety analysis. GumGum
        Contextual first checks whether results for the URL are already in its database and, if so,
        returns them. Otherwise the request is accepted with status INITIATED and the caller either
        polls this endpoint until status becomes PROCESSED, or supplies callBackUrl to have the
        finished analysis delivered to a webhook endpoint.
      tags:
        - Page
      parameters:
        - name: pageUrl
          in: query
          required: true
          description: The properly formed URL of the web page to classify.
          schema:
            type: string
            format: uri
        - name: callBackUrl
          in: query
          required: false
          description: >-
            Webhook endpoint GumGum Contextual POSTs the completed analysis to, as an alternative
            to polling this endpoint.
          schema:
            type: string
            format: uri
        - name: ignoreCache
          in: query
          required: false
          description: >-
            Bypass stored response data and reprocess the page analysis request rather than
            returning the cached result from the GumGum Contextual database.
          schema:
            type: boolean
      responses:
        '200':
          description: Analysis result, or an acknowledgement that analysis has been initiated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PageClassification'
        '403':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /video/classification:
    post:
      operationId: submitVideoClassification
      summary: Submit a video for classification
      description: >-
        Submit a video asset for contextual, brand-safety and sentiment analysis. The service
        responds 202 with a UUID that identifies the classification job.
      tags:
        - Video
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoClassificationRequest'
      responses:
        '202':
          description: Video accepted for classification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassificationAccepted'
        '403':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /video/classification/{uuid}:
    get:
      operationId: getVideoClassification
      summary: Retrieve video classification results
      description: Retrieve the completed contextual analysis for a previously submitted video.
      tags:
        - Video
      parameters:
        - $ref: '#/components/parameters/uuid'
      responses:
        '200':
          description: Completed video classification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Classification'
        '404':
          description: Results are not yet available, or the UUID is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /video/classification/{uuid}/status:
    get:
      operationId: getVideoClassificationStatus
      summary: Check video classification status
      description: Check the processing status of a submitted video classification job.
      tags:
        - Video
      parameters:
        - $ref: '#/components/parameters/uuid'
      responses:
        '200':
          description: Current processing status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassificationStatus'
        '404':
          description: Status not available, or the UUID is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v2/video/classification:
    post:
      operationId: submitIntravideoClassification
      summary: Submit a video for intravideo (frame-level) classification
      description: >-
        Version 2 of the video classification surface, documented as the Intravideo API. Submits a
        video asset for frame-level contextual and brand-safety analysis.
      tags:
        - Intravideo
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoClassificationRequest'
      responses:
        '202':
          description: Video accepted for intravideo classification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassificationAccepted'
        '403':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v2/video/classification/{uuid}:
    get:
      operationId: getIntravideoClassification
      summary: Retrieve intravideo classification results
      description: Retrieve the completed frame-level analysis for a previously submitted video.
      tags:
        - Intravideo
      parameters:
        - $ref: '#/components/parameters/uuid'
      responses:
        '200':
          description: Completed intravideo classification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Classification'
        '404':
          description: Results are not yet available, or the UUID is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /v2/video/classification/{uuid}/status:
    get:
      operationId: getIntravideoClassificationStatus
      summary: Check intravideo classification status
      description: Check the processing status of a submitted intravideo classification job.
      tags:
        - Intravideo
      parameters:
        - $ref: '#/components/parameters/uuid'
      responses:
        '200':
          description: Current processing status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassificationStatus'
        '404':
          description: Status not available, or the UUID is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /image/classification:
    post:
      operationId: submitImageClassification
      summary: Submit an image for classification
      description: >-
        Initiate a new image analysis. The documentation states the request specifies the URL of
        the image to be analyzed; the response carries brand-safety, keyword and threat
        categorization data.
      tags:
        - Image
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImageClassificationRequest'
      responses:
        '202':
          description: Image accepted for classification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassificationAccepted'
        '403':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /image/classification/{uuid}:
    get:
      operationId: getImageClassification
      summary: Retrieve image classification results
      description: Retrieve the completed image analysis for a previously submitted image.
      tags:
        - Image
      parameters:
        - $ref: '#/components/parameters/uuid'
      responses:
        '200':
          description: Completed image classification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Classification'
        '404':
          description: Results are not yet available, or the UUID is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /image/classification/{uuid}/status:
    get:
      operationId: getImageClassificationStatus
      summary: Check image classification status
      description: Retrieve the processing status of a submitted image analysis request.
      tags:
        - Image
      parameters:
        - $ref: '#/components/parameters/uuid'
      responses:
        '200':
          description: Current processing status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassificationStatus'
        '404':
          description: Status not available, or the UUID is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /text/classification:
    post:
      operationId: submitTextClassification
      summary: Submit text for classification
      description: >-
        Initiate a new text analysis request. The response carries complete brand-safety, keyword
        and categorization analysis data for the analyzed text.
      tags:
        - Text
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TextClassificationRequest'
      responses:
        '202':
          description: Text accepted for classification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassificationAccepted'
        '403':
          description: Missing or invalid API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /text/classification/{uuid}:
    get:
      operationId: getTextClassification
      summary: Retrieve text classification results
      description: Return the analyzed text results for a previously submitted request.
      tags:
        - Text
      parameters:
        - $ref: '#/components/parameters/uuid'
      responses:
        '200':
          description: Completed text classification.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Classification'
        '404':
          description: Results are not yet available, or the UUID is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /text/classification/{uuid}/status:
    get:
      operationId: getTextClassificationStatus
      summary: Check text classification status
      description: Return the status of the text analysis.
      tags:
        - Text
      parameters:
        - $ref: '#/components/parameters/uuid'
      responses:
        '200':
          description: Current processing status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClassificationStatus'
        '404':
          description: Status not available, or the UUID is invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  securitySchemes:
    apiKeyHeader:
      type: apiKey
      in: header
      name: X-api-key
      description: >-
        API key issued by GumGum, sent on every request as the X-api-key request header.
        Documented at https://gumgum.jira.com/wiki/spaces/VDC/pages/1712095256.
  parameters:
    uuid:
      name: uuid
      in: path
      required: true
      description: The unique identifier the classification service generated for the submitted asset.
      schema:
        type: string
  schemas:
    Error:
      type: object
      description: >-
        Error envelope observed on the production host on 2026-08-01 — for example
        {"message":"Forbidden"} for an unauthenticated call to a real path and
        {"message":"Missing Authentication Token"} for an unmatched path.
      properties:
        message:
          type: string
          description: Human-readable error message.
      required:
        - message
    ClassificationAccepted:
      type: object
      description: Acknowledgement that an asset has been accepted for classification.
      properties:
        uuid:
          type: string
          description: Unique identifier generated by the service for this classification job.
        url:
          type: string
          format: uri
          description: The asset URL supplied on the request.
        acceptedAt:
          type: string
          format: date-time
          description: ISO-8601 formatted timestamp representing when the asset was first accepted.
    ClassificationStatus:
      type: object
      description: >-
        Processing status of a classification job. GumGum documents the application status
        messages for each content type on dedicated Application Status Messages pages
        (Page, Video, Intravideo, Image, Text) rather than enumerating one shared list.
      properties:
        uuid:
          type: string
        status:
          type: string
          description: Application status message, for example INITIATED or PROCESSED.
        dataAvailable:
          type: boolean
          description: Whether the analysis has completed and result data is available.
    VerityData:
      type: object
      description: The contextual analysis payload returned by every GumGum Contextual surface.
      properties:
        iab:
          type: object
          description: IAB Content Taxonomy classifications.
          properties:
            v1:
              type: array
              description: IAB Content Taxonomy v1 categories with scores.
              items:
                type: object
            v2:
              type: array
              description: IAB Content Taxonomy v2 categories with scores.
              items:
                type: object
            v3:
              type: array
              description: IAB Content Taxonomy v3 categories with scores.
              items:
                type: object
        ner:
          type: array
          description: Named entity recognition results.
          items:
            type: object
        keywords:
          type: array
          description: Keywords extracted from the analyzed content.
          items:
            type: object
        safe:
          type: boolean
          description: Brand safety assessment for the analyzed content.
        threats:
          type: array
          description: Detected brand-safety threats with confidence levels.
          items:
            type: object
        sentiments:
          type: array
          description: Emotional tone analysis of the analyzed content.
          items:
            type: object
    Classification:
      type: object
      description: >-
        Completed classification result. The response body format is
        Content-Type application/json; charset=UTF-8.
      properties:
        dataAvailable:
          type: boolean
          description: Whether the analysis is complete and verityData is populated.
        status:
          type: string
          description: Request status, for example INITIATED or PROCESSED.
        uuid:
          type: string
          description: Unique identifier for this classification.
        processedAt:
          type: string
          format: date-time
          description: Timestamp of processing completion.
        expiresAt:
          type: string
          format: date-time
          description: Timestamp at which the stored result expires.
        languageCode:
          type: string
          description: Detected language identifier.
        verityData:
          $ref: '#/components/schemas/VerityData'
    PageClassification:
      allOf:
        - $ref: '#/components/schemas/Classification'
        - type: object
          properties:
            pageUrl:
              type: string
              format: uri
              description: The analyzed page URL.
    VideoClassificationRequest:
      type: object
      description: Video classification submission body.
      properties:
        url:
          type: string
          format: uri
          description: Video url for the asset to process.
        description:
          type: string
          description: Video description from client.
        title:
          type: string
          description: Video title from client.
        languageCode:
          type: string
          description: Video language. Inferred automatically when omitted.
        partnerVideoId:
          type: string
          description: Client's unique video identifier.
        publisherId:
          type: string
          description: Publisher's unique identifier.
        callbackUrl:
          type: string
          format: uri
          description: Webhook endpoint results are delivered to once processing completes.
      required:
        - url
    ImageClassificationRequest:
      type: object
      description: >-
        Image classification submission body. The Image API Reference documents that the request
        specifies the URL of the image to be analyzed; it does not enumerate further fields, so
        none are asserted here.
      properties:
        url:
          type: string
          format: uri
          description: URL of the image to be analyzed.
      required:
        - url
      additionalProperties: true
    TextClassificationRequest:
      type: object
      description: >-
        Text classification submission body. The published Text API Reference does not enumerate
        the request field names, so this schema is deliberately left open rather than guessed —
        see https://gumgum.jira.com/wiki/spaces/VDC/pages/1780187198.
      additionalProperties: true