FlashData Jobs API

The Jobs API from FlashData — 3 operation(s) for jobs.

GitHub OpenAPI

Operations 3

GET /jobs List Data API jobs for the current workspace #
GET /jobs/{jobId} Read one Data API job #
GET /jobs/{jobId}/results Download a completed async result #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/flashdata-dev:flashdata-dev-jobs-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

flashdata-dev-jobs-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: FlashData Customer Jobs API
  version: 0.2.0-draft
  summary: FlashData control-plane API contract
  description: Google search, YouTube data and media downloads, with endpoints for jobs, accounts, API keys and billing. See /docs for request examples and setup guides.
  contact:
    name: FlashData Engineering
servers:
- url: https://api.flashdata.dev/v2
  description: Management API
tags:
- name: Jobs
paths:
  /jobs:
    get:
      operationId: listConsoleJobs
      tags:
      - Jobs
      summary: List Data API jobs for the current workspace
      description: Cursor-paginated active and archived history. Defaults to the last seven days; each UTC date range is limited to 31 days. From is inclusive and to is exclusive, at minute precision. Summaries are maintained asynchronously and may lag ingestion.
      security:
      - cookieSession: []
      parameters:
      - name: cursor
        in: query
        schema:
          type: string
          minLength: 1
          maxLength: 512
      - name: limit
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 50
      - name: source
        in: query
        schema:
          type: string
          pattern: ^(google|youtube|google_[a-z]+|youtube_[a-z_]+)$
      - name: status
        in: query
        schema:
          type: string
          enum:
          - completed
          - failed
          - pending
          - processing
      - name: mode
        in: query
        schema:
          type: string
          enum:
          - async
          - batch
          - realtime
      - name: from
        in: query
        schema:
          type: string
          format: date-time
      - name: to
        in: query
        schema:
          type: string
          format: date-time
      responses:
        '200':
          description: Job page
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                - data
                - pagination
                - summary
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ConsoleJob'
                  pagination:
                    $ref: '#/components/schemas/Pagination'
                  summary:
                    type:
                    - object
                    - 'null'
                    additionalProperties: false
                    required:
                    - completed
                    - credits
                    - failed
                    - total
                    properties:
                      completed:
                        type: integer
                        minimum: 0
                      credits:
                        type: number
                        minimum: 0
                      failed:
                        type: integer
                        minimum: 0
                      total:
                        type: integer
                        minimum: 0
                      updating:
                        type: boolean
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/ValidationError'
  /jobs/{jobId}:
    get:
      operationId: getConsoleJob
      tags:
      - Jobs
      summary: Read one Data API job
      description: 'Read job.status to check progress and job.error if processing failed. JSON is the default; use Accept: text/plain for readable text. X-Respond-With is ignored here. Follow Retry-After when provided before checking again.'
      security:
      - cookieSession: []
      - dataApiKey: []
      parameters:
      - $ref: '#/components/parameters/ResponseEnvelopeAccept'
      - name: jobId
        in: path
        required: true
        schema:
          type: string
          pattern: ^job_[A-Za-z0-9_-]+$
      responses:
        '200':
          description: Job detail
          content:
            application/json:
              schema:
                type: object
                additionalProperties: false
                required:
                - job
                properties:
                  job:
                    $ref: '#/components/schemas/ConsoleJob'
            text/plain:
              schema:
                type: string
              example: "Job:\n  Id: \"job_example\"\n  Source: \"google_search\"\n  Status: \"processing\"\n"
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '406':
          description: Neither application/json nor text/plain is acceptable; response is JSON
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryRepresentationError'
  /jobs/{jobId}/results:
    get:
      operationId: downloadJobResult
      tags:
      - Jobs
      summary: Download a completed async result
      description: 'By default, authenticates access and redirects to a short-lived private R2 URL; clients receive the original JSON directly from R2. Accept: text/plain independently returns HTTP 200 with the original result fields as indented plain text. X-Respond-With: markdown selects Markdown content: application/json wraps it in content alongside the original metadata, replacing results; text/plain returns metadata followed by Markdown. Missing Accept or a global wildcard defaults to JSON. Formatting does not submit another query or charge query credits. Stored results expire 24 hours after completion. Errors remain structured JSON.'
      security:
      - cookieSession: []
      - dataApiKey: []
      parameters:
      - $ref: '#/components/parameters/QueryRepresentation'
      - $ref: '#/components/parameters/QueryRepresentationAccept'
      - name: jobId
        in: path
        required: true
        schema:
          type: string
          pattern: ^job_[A-Za-z0-9_-]+$
      responses:
        '200':
          description: Plain-text original fields or Markdown returned directly; original JSON from R2 after following the default redirect
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/MarkdownQueryResult'
                - type: object
                  additionalProperties: true
            text/plain:
              schema:
                type: string
              examples:
                original:
                  value: "Source: \"google_search\"\nStatus: \"completed\"\nResults:\n  1:\n    Organic: []\n"
                markdown:
                  value: 'Source: "google_search"

                    Status: "completed"


                    Markdown Content:

                    # Google search

                    '
        '302':
          description: Redirect to original JSON in private R2 storage when JSON is selected without X-Respond-With
          headers:
            Location:
              description: Short-lived presigned R2 URL
              required: true
              schema:
                type: string
                format: uri
        '400':
          description: Unsupported X-Respond-With value; response is JSON
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryRepresentationError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '406':
          description: Neither application/json nor text/plain is acceptable; response is JSON
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryRepresentationError'
        '409':
          $ref: '#/components/responses/Conflict'
        '410':
          description: Result expired
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/Problem'
        '422':
          $ref: '#/components/responses/ValidationError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  parameters:
    QueryRepresentationAccept:
      name: Accept
      in: header
      description: Select application/json or text/plain independently of X-Respond-With. Without X-Respond-With, text/plain returns the original fields with indentation; JSON retains the original response fields (completed-result reads redirect to storage). With markdown, JSON returns content plus metadata and plain text returns metadata followed by Markdown. Standard media ranges and q weights are supported; missing Accept or a global wildcard defaults to JSON. Both response types use UTF-8; an explicit charset=utf-8 parameter is supported.
      schema:
        type: string
      examples:
        json:
          value: application/json
        plain:
          value: text/plain
    QueryRepresentation:
      name: X-Respond-With
      in: header
      description: Set to markdown to return result content as Markdown. Omit to retain the original result fields. Accept independently selects JSON or plain text. Only realtime queries and completed job result reads support this header. It does not change job submissions, status, account APIs, callbacks, Bulk files, binary downloads, or MCP protocol responses.
      schema:
        type: string
        enum:
        - markdown
    ResponseEnvelopeAccept:
      name: Accept
      in: header
      description: application/json returns the original structured response; text/plain returns the same fields as indented plain text. Standard media ranges and q weights are supported; missing Accept or a global wildcard defaults to JSON. X-Respond-With is ignored on submission and job-status endpoints. Errors remain structured JSON. Both response types use UTF-8; an explicit charset=utf-8 parameter is supported.
      schema:
        type: string
      examples:
        json:
          value: application/json
        plain:
          value: text/plain
  schemas:
    MarkdownQueryResult:
      type: object
      required:
      - source
      - status
      - content
      additionalProperties: true
      description: Markdown result content. content replaces the results array; other response fields such as id, source, status, usage and timestamps are preserved. No generated summary is added. Source URLs and transcript segment start/end times are retained.
      properties:
        source:
          type: string
        status:
          type: string
        content:
          type: string
          description: Deterministic Markdown derived from the retrieved source result.
        usage:
          type: object
          additionalProperties: true
    QueryRepresentationError:
      type: object
      required:
      - error
      - code
      - message
      properties:
        error:
          type: boolean
          const: true
        code:
          type: string
          enum:
          - unsupported_representation
          - not_acceptable
        message:
          type: string
    ConsoleJob:
      type: object
      additionalProperties: false
      required:
      - createdAt
      - credits
      - durationMs
      - error
      - id
      - params
      - progress
      - result
      - source
      - status
      - updatedAt
      - videoId
      properties:
        createdAt:
          type: string
          format: date-time
        credits:
          type: number
          multipleOf: 0.001
        durationMs:
          type:
          - number
          - 'null'
          minimum: 0
        error:
          type:
          - string
          - 'null'
        id:
          type: string
        params:
          type: object
          additionalProperties: true
        progress:
          type: integer
          minimum: 0
        result:
          type:
          - object
          - 'null'
          additionalProperties: true
        source:
          type: string
        status:
          type: string
          enum:
          - completed
          - failed
          - pending
          - processing
        updatedAt:
          type:
          - string
          - 'null'
          format: date-time
        videoId:
          type:
          - string
          - 'null'
        links:
          type: array
          items:
            $ref: '#/components/schemas/JobLink'
    Pagination:
      type: object
      additionalProperties: false
      required:
      - hasMore
      - limit
      properties:
        nextCursor:
          type:
          - string
          - 'null'
        previousCursor:
          type:
          - string
          - 'null'
        hasMore:
          type: boolean
        limit:
          type: integer
          minimum: 1
          maximum: 100
    FieldError:
      type: object
      additionalProperties: false
      required:
      - field
      - code
      - message
      properties:
        field:
          type: string
        code:
          type: string
        message:
          type: string
    JobLink:
      type: object
      additionalProperties: false
      required:
      - rel
      - href
      - method
      properties:
        rel:
          type: string
          enum:
          - self
          - results
          - content
          - download
        href:
          type: string
          format: uri
        method:
          type: string
          const: GET
        expires_at:
          type: string
          format: date-time
        filename:
          type: string
        content_type:
          type: string
        size_bytes:
          type: integer
          minimum: 1
    Problem:
      type: object
      additionalProperties: false
      required:
      - type
      - title
      - status
      - code
      - requestId
      properties:
        type:
          type: string
          format: uri-reference
        title:
          type: string
        status:
          type: integer
          minimum: 400
          maximum: 599
        code:
          type: string
          pattern: ^[a-z0-9_]+$
        detail:
          type: string
        requestId:
          type: string
          pattern: ^req_
        fieldErrors:
          type: array
          items:
            $ref: '#/components/schemas/FieldError'
  responses:
    Unauthorized:
      description: Authentication required or invalid
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    NotFound:
      description: Resource not found or not owned by the caller
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    ValidationError:
      description: Request validation failed
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    Conflict:
      description: Resource state or idempotency conflict
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
    ServiceUnavailable:
      description: A required dependency or catalog is temporarily unavailable
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
  securitySchemes:
    dataApiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: FlashData API key. Job access is restricted to the key's source scopes.
    agentRegistrationProof:
      type: http
      scheme: bearer
      description: Persist a cryptographically random 32-byte base64url proof and exact request BEFORE sending; recover only with the same proof and body. Not an OAuth token.
    cookieSession:
      type: apiKey
      in: cookie
      name: __Host-fd_session
      description: Opaque Web session. The browser cannot read this cookie.
    agentSetupCredential:
      type: http
      scheme: bearer
      description: Temporary setup credential for status and claim creation only. Not a data API key.
    csrfToken:
      type: apiKey
      in: header
      name: X-CSRF-Token
    agentIdentityKey:
      type: http
      scheme: bearer
      description: Ordinary FlashData API key in Authorization Bearer, only on agent identity. Data queries use X-API-Key instead.
    agentHandoffProof:
      type: http
      scheme: bearer
      description: Proof used to recover the owner key and acknowledge installation. Never sent to a data query.