YouTube Reporting API

Retrieves bulk YouTube Analytics data through predefined reports for a channel or content owner. Reports are generated daily as CSV datasets covering 24-hour periods and are accessible for 30 to 60 days depending on the report type.

OpenAPI Specification

youtube-reporting-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: YouTube Reporting API
  description: >-
    The YouTube Reporting API enables scheduling reporting jobs and downloading
    bulk YouTube Analytics data as CSV datasets. Reports are generated daily and
    cover 24-hour periods, accessible for 30 to 60 days depending on the report type.
  version: v1
  contact:
    name: YouTube API Support
    url: https://developers.google.com/youtube/reporting
  termsOfService: https://developers.google.com/youtube/terms/api-services-terms-of-service
  x-generated-from: documentation
  x-last-validated: '2026-04-18'
servers:
- url: https://youtubereporting.googleapis.com/v1
  description: YouTube Reporting API v1 base server
security:
- oauth2:
  - https://www.googleapis.com/auth/yt-analytics.readonly
tags:
- name: Jobs
  description: Operations for managing YouTube reporting jobs
- name: Reports
  description: Operations for retrieving generated reports
- name: ReportTypes
  description: Operations for listing available report types
paths:
  /jobs:
    post:
      operationId: youtubeReporting.jobs.create
      summary: Youtube Create Reporting Job
      description: >-
        Creates a reporting job. YouTube then begins generating daily reports for
        the specified report type. Reports are typically available within 24 hours
        of being generated.
      tags:
      - Jobs
      parameters:
      - name: onBehalfOfContentOwner
        in: query
        description: >-
          The content owner's external ID on which behalf the user is acting on.
        schema:
          type: string
        example: example_value
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Job'
            examples:
              YoutubereportingJobsCreateRequestExample:
                summary: Default youtubeReporting.jobs.create request
                x-microcks-default: true
                value:
                  id: abc123def456
                  reportTypeId: '500123'
                  name: Example Title
                  createTime: '2026-01-15T10:30:00Z'
                  expireTime: '2026-01-15T10:30:00Z'
                  systemManaged: true
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
              examples:
                YoutubereportingJobsCreate200Example:
                  summary: Default youtubeReporting.jobs.create 200 response
                  x-microcks-default: true
                  value:
                    id: abc123def456
                    reportTypeId: '500123'
                    name: Example Title
                    createTime: '2026-01-15T10:30:00Z'
                    expireTime: '2026-01-15T10:30:00Z'
                    systemManaged: true
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    get:
      operationId: youtubeReporting.jobs.list
      summary: Youtube List Reporting Jobs
      description: >-
        Lists all reporting jobs that have been scheduled for the channel or
        content owner.
      tags:
      - Jobs
      parameters:
      - name: onBehalfOfContentOwner
        in: query
        description: >-
          The content owner's external ID on which behalf the user is acting on.
        schema:
          type: string
        example: example_value
      - name: includeSystemManaged
        in: query
        description: >-
          If set to true, also returns system-managed reporting jobs.
        schema:
          type: boolean
        example: true
      - name: pageToken
        in: query
        description: >-
          A token identifying a page of results to return.
        schema:
          type: string
        example: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
      - name: pageSize
        in: query
        description: >-
          The maximum number of items to return in the response.
        schema:
          type: integer
        example: 25
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListJobsResponse'
              examples:
                YoutubereportingJobsList200Example:
                  summary: Default youtubeReporting.jobs.list 200 response
                  x-microcks-default: true
                  value:
                    jobs:
                    - id: abc123def456
                      reportTypeId: '500123'
                      name: Example Title
                      createTime: '2026-01-15T10:30:00Z'
                      expireTime: '2026-01-15T10:30:00Z'
                      systemManaged: true
                    nextPageToken: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /jobs/{jobId}:
    get:
      operationId: youtubeReporting.jobs.get
      summary: Youtube Get Reporting Job
      description: >-
        Gets the metadata for a specific reporting job.
      tags:
      - Jobs
      parameters:
      - name: jobId
        in: path
        required: true
        description: The ID of the job to retrieve.
        schema:
          type: string
        example: abc123def456
      - name: onBehalfOfContentOwner
        in: query
        description: >-
          The content owner's external ID on which behalf the user is acting on.
        schema:
          type: string
        example: example_value
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
              examples:
                YoutubereportingJobsGet200Example:
                  summary: Default youtubeReporting.jobs.get 200 response
                  x-microcks-default: true
                  value:
                    id: abc123def456
                    reportTypeId: '500123'
                    name: Example Title
                    createTime: '2026-01-15T10:30:00Z'
                    expireTime: '2026-01-15T10:30:00Z'
                    systemManaged: true
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
    delete:
      operationId: youtubeReporting.jobs.delete
      summary: Youtube Delete Reporting Job
      description: >-
        Deletes a reporting job. After deletion, YouTube stops generating reports
        for this job.
      tags:
      - Jobs
      parameters:
      - name: jobId
        in: path
        required: true
        description: The ID of the job to delete.
        schema:
          type: string
        example: abc123def456
      - name: onBehalfOfContentOwner
        in: query
        description: >-
          The content owner's external ID on which behalf the user is acting on.
        schema:
          type: string
        example: example_value
      responses:
        '204':
          description: Successful deletion with no content
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /jobs/{jobId}/reports:
    get:
      operationId: youtubeReporting.reports.list
      summary: Youtube List Reports
      description: >-
        Lists reports created by a specific reporting job. Each report covers a
        24-hour period and includes a download URL for retrieving the report data.
      tags:
      - Reports
      parameters:
      - name: jobId
        in: path
        required: true
        description: The ID of the job whose reports are being listed.
        schema:
          type: string
        example: abc123def456
      - name: onBehalfOfContentOwner
        in: query
        description: >-
          The content owner's external ID on which behalf the user is acting on.
        schema:
          type: string
        example: example_value
      - name: createdAfter
        in: query
        description: >-
          If specified, only reports created after the specified date/time are returned.
        schema:
          type: string
          format: date-time
        example: '2026-01-15T10:30:00Z'
      - name: startTimeAtOrAfter
        in: query
        description: >-
          If specified, only reports covering data on or after this date are returned.
        schema:
          type: string
          format: date-time
        example: '2026-01-15T10:30:00Z'
      - name: startTimeBefore
        in: query
        description: >-
          If specified, only reports covering data before this date are returned.
        schema:
          type: string
          format: date-time
        example: '2026-01-15T10:30:00Z'
      - name: pageToken
        in: query
        description: A token identifying a page of results to return.
        schema:
          type: string
        example: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
      - name: pageSize
        in: query
        description: The maximum number of items to return in the response.
        schema:
          type: integer
        example: 25
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListReportsResponse'
              examples:
                YoutubereportingReportsList200Example:
                  summary: Default youtubeReporting.reports.list 200 response
                  x-microcks-default: true
                  value:
                    reports:
                    - id: abc123def456
                      jobId: abc123def456
                      startTime: '2026-01-15T10:30:00Z'
                      endTime: '2026-01-15T10:30:00Z'
                      createTime: '2026-01-15T10:30:00Z'
                      downloadUrl: https://www.example.com
                      jobExpireTime: '2026-01-15T10:30:00Z'
                    nextPageToken: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /jobs/{jobId}/reports/{reportId}:
    get:
      operationId: youtubeReporting.reports.get
      summary: Youtube Get Report
      description: >-
        Gets the metadata for a specific report including its download URL.
      tags:
      - Reports
      parameters:
      - name: jobId
        in: path
        required: true
        description: The ID of the job that created the report.
        schema:
          type: string
        example: abc123def456
      - name: reportId
        in: path
        required: true
        description: The ID of the report to retrieve.
        schema:
          type: string
        example: abc123def456
      - name: onBehalfOfContentOwner
        in: query
        description: >-
          The content owner's external ID on which behalf the user is acting on.
        schema:
          type: string
        example: example_value
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Report'
              examples:
                YoutubereportingReportsGet200Example:
                  summary: Default youtubeReporting.reports.get 200 response
                  x-microcks-default: true
                  value:
                    id: abc123def456
                    jobId: abc123def456
                    startTime: '2026-01-15T10:30:00Z'
                    endTime: '2026-01-15T10:30:00Z'
                    createTime: '2026-01-15T10:30:00Z'
                    downloadUrl: https://www.example.com
                    jobExpireTime: '2026-01-15T10:30:00Z'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /reportTypes:
    get:
      operationId: youtubeReporting.reportTypes.list
      summary: Youtube List Report Types
      description: >-
        Lists report types that the channel or content owner can retrieve.
        Each report type defines the dimensions and metrics available in
        the generated reports.
      tags:
      - ReportTypes
      parameters:
      - name: onBehalfOfContentOwner
        in: query
        description: >-
          The content owner's external ID on which behalf the user is acting on.
        schema:
          type: string
        example: example_value
      - name: includeSystemManaged
        in: query
        description: >-
          If set to true, also returns system-managed report types.
        schema:
          type: boolean
        example: true
      - name: pageToken
        in: query
        description: A token identifying a page of results to return.
        schema:
          type: string
        example: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
      - name: pageSize
        in: query
        description: The maximum number of items to return in the response.
        schema:
          type: integer
        example: 25
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListReportTypesResponse'
              examples:
                YoutubereportingReporttypesList200Example:
                  summary: Default youtubeReporting.reportTypes.list 200 response
                  x-microcks-default: true
                  value:
                    reportTypes:
                    - id: abc123def456
                      name: Example Title
                      systemManaged: true
                      deprecateTime: '2026-01-15T10:30:00Z'
                    nextPageToken: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  securitySchemes:
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://accounts.google.com/o/oauth2/auth
          tokenUrl: https://oauth2.googleapis.com/token
          scopes:
            https://www.googleapis.com/auth/yt-analytics.readonly: View YouTube Analytics reports for your YouTube content
            https://www.googleapis.com/auth/yt-analytics-monetary.readonly: View monetary and non-monetary YouTube Analytics reports
  schemas:
    Job:
      type: object
      properties:
        id:
          type: string
          description: The server-generated ID of the job.
          readOnly: true
          example: abc123def456
        reportTypeId:
          type: string
          description: The type of reports that the job creates.
          example: '500123'
        name:
          type: string
          description: The name of the job. Max length is 100 characters.
          example: Example Title
        createTime:
          type: string
          format: date-time
          description: The date and time when the job was created.
          readOnly: true
          example: '2026-01-15T10:30:00Z'
        expireTime:
          type: string
          format: date-time
          description: The date and time when the job will expire.
          readOnly: true
          example: '2026-01-15T10:30:00Z'
        systemManaged:
          type: boolean
          description: Whether the job is system-managed.
          readOnly: true
          example: true
    Report:
      type: object
      properties:
        id:
          type: string
          description: The server-generated ID of the report.
          example: abc123def456
        jobId:
          type: string
          description: The ID of the job that created this report.
          example: abc123def456
        startTime:
          type: string
          format: date-time
          description: The start of the time period that the report covers.
          example: '2026-01-15T10:30:00Z'
        endTime:
          type: string
          format: date-time
          description: The end of the time period that the report covers.
          example: '2026-01-15T10:30:00Z'
        createTime:
          type: string
          format: date-time
          description: The date and time when the report was created.
          example: '2026-01-15T10:30:00Z'
        downloadUrl:
          type: string
          description: The URL from which the report can be downloaded.
          example: https://www.example.com
        jobExpireTime:
          type: string
          format: date-time
          description: The date and time when the job creating this report will expire.
          example: '2026-01-15T10:30:00Z'
    ReportType:
      type: object
      properties:
        id:
          type: string
          description: The ID of the report type.
          example: abc123def456
        name:
          type: string
          description: The name of the report type.
          example: Example Title
        systemManaged:
          type: boolean
          description: Whether the report type is system-managed.
          example: true
        deprecateTime:
          type: string
          format: date-time
          description: The date and time when the report type was deprecated.
          example: '2026-01-15T10:30:00Z'
    ListJobsResponse:
      type: object
      properties:
        jobs:
          type: array
          items:
            $ref: '#/components/schemas/Job'
          description: The list of jobs.
          example: []
        nextPageToken:
          type: string
          description: A token to retrieve the next page of results.
          example: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
    ListReportsResponse:
      type: object
      properties:
        reports:
          type: array
          items:
            $ref: '#/components/schemas/Report'
          description: The list of reports.
          example: []
        nextPageToken:
          type: string
          description: A token to retrieve the next page of results.
          example: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
    ListReportTypesResponse:
      type: object
      properties:
        reportTypes:
          type: array
          items:
            $ref: '#/components/schemas/ReportType'
          description: The list of report types.
          example: []
        nextPageToken:
          type: string
          description: A token to retrieve the next page of results.
          example: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9