List running jobs

September 29, 2026

Table of contents

  1. Request Headers
  2. Responses
  3. Model
  4. Examples
  5. Try It

The load-balancing picture in one call: for every configured account, its health, its maxJobs limit, the Studio and research jobs running on it right now, and the last usage Google reported for it.

A job is listed from the moment POST /artifacts, POST /artifacts/retry or POST /artifacts/revise or POST /research accepts it until it completes, fails or is cancelled. Each listed job takes one of its account’s maxJobs slots. When all slots are taken, a new job on that account is refused with 429, and a one-shot request without email goes to another account that has a free slot. Poll a single job with GET /jobs/jobid.

This endpoint reads our own records only and never calls Google, so it is cheap to poll and is never cached.

https://api.useapi.net/v1/gemini-notebook/jobs

Request Headers
Authorization: Bearer {API token}
Responses
  • 200 OK

    {
      "accounts": {
        "[email protected]": {
          "health": "OK",
          "maxJobs": 3,
          "running": 1,
          "jobs": [
            {
              "jobid": "job:21ade7e0-f2c0-48a1-904d-688096a3ff29-user:[email protected]:gemini_notebook",
              "type": "video",
              "started_at": "2026-09-28T04:32:44.630Z",
              "artifact": "user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55:7f923bb5-fb59-4ee6-ade6-9ae559a660fe"
            }
          ],
          "quota": {
            "windows": [
              {
                "window": "5h",
                "resetsAt": "2026-09-28T09:25:40.000Z",
                "usedPercent": 0,
                "remainingPercent": 100
              },
              {
                "window": "weekly",
                "resetsAt": "2026-10-04T23:25:40.000Z",
                "usedPercent": 3.14,
                "remainingPercent": 96.86
              }
            ],
            "blocked": [],
            "at": "2026-09-28T04:32:37.575Z"
          }
        },
        "[email protected]": {
          "health": "OK",
          "maxJobs": 2,
          "running": 0,
          "jobs": []
        }
      }
    }
    

    With no accounts configured the answer is { "accounts": {} }.

  • 401 Unauthorized

    Invalid API token.

    {
      "error": "useapi.net ⁝ Unauthorized",
      "code": 401
    }
    
Model
{ // TypeScript, all fields are optional
  accounts: {
    [email: string]: {
      health: string              // 'OK', 'verifying' (Google reported it signed out and we are re-checking it),
                                  // the account's error text (re-add it), or 'account deleted'
      maxJobs: number | null      // concurrent-job limit set via POST /accounts; null for a deleted account
      running: number             // jobs running on this account now
      jobs: Array<{
        jobid: string
        type: 'audio' | 'video' | 'report' | 'interactive_report' | 'table' | 'quiz' | 'flashcards' | 'infographic' | 'slides' | 'mindmap' | 'research'
        started_at: string        // ISO 8601, when the job was accepted
        artifact?: string         // the artifact id, once Google has created it
        research?: 'fast' | 'deep' // research jobs (POST /research): the kind of run
      }>
      quota?: {                   // last usage Google reported; absent when none is known from the last 5 hours
        windows: Array<{
          window: '5h' | 'weekly'
          resetsAt: string | null // ISO 8601
          usedPercent: number
          remainingPercent: number
        }>
        blocked: string[]         // Studio actions Google refuses right now, e.g. 'cinematic'
        at: string                // ISO 8601, when this usage was read
      }
    }
  }
}

An account shows account deleted when it was removed with DELETE /accounts/email while jobs were still running on it.

quota is refreshed every time GET /accounts/email reads live usage and after every job finishes. For live numbers, the reset times and what each Studio action costs, call GET /accounts/email. A one-shot POST /artifacts without email skips an account whose last-known usage shows a window at 100% or the requested action blocked.

Examples
  • curl "https://api.useapi.net/v1/gemini-notebook/jobs" \
       -H "Authorization: Bearer …"
    
  • const token = "API token";
    const apiUrl = "https://api.useapi.net/v1/gemini-notebook/jobs";
    const response = await fetch(apiUrl, {
      headers: {
        "Authorization": `Bearer ${token}`,
      },
    });
    const result = await response.json();
    console.log("response", {response, result});
    
  • import requests
    token = "API token"
    apiUrl = "https://api.useapi.net/v1/gemini-notebook/jobs"
    headers = {
        "Authorization" : f"Bearer {token}"
    }
    response = requests.get(apiUrl, headers=headers)
    print(response, response.json())
    
Try It