Retrieve an artifact

September 29, 2026

Table of contents

  1. Request Headers
  2. Result by type
  3. Responses
  4. Model
  5. Examples
  6. Try It

Fetch one Studio artifact by its id, read live from Google. A completed artifact carries its full result in the same shape as the result of a finished job: download links for audio, video, slide decks and infographics, the text of reports, the rows of a data table, and the JSON of quizzes, flashcards and mind maps.

Use it to read an artifact again after its job record has expired, to pick up an artifact created in the Gemini Notebook web app, or to check on an artifact whose job was cancelled or timed out (Google may still finish it). The artifact ids come from GET /artifacts and from the artifact field of a job.

https://api.useapi.net/v1/gemini-notebook/artifacts/artifact

  • artifact is URL-encoded in the path (it contains : and @), for example user%3A12345-user%40example.com-artifact%3Ad02c903b-17f8-4241-a263-2be9e7359d55%3A07b94418-6c28-437c-98de-06bbeabb4e0c. The id names the account and the notebook, so no email parameter is needed.
Request Headers
Authorization: Bearer {API token}
Result by type

A completed artifact adds title plus the fields below. Any other status returns only artifact, notebook, type, status, created and title.

type Fields Files (GET /artifacts/download format)
audio duration (seconds), files m4a
video duration (seconds), files mp4
report text (Markdown) —
interactive_report text (the report’s paragraphs as plain text) —
table table (rows of cells, the first row is the header) —
quiz content (JSON: quiz[] with question, answerOptions[], hint) —
flashcards content (JSON: flashcards[]) —
infographic files (with width / height), text png
slides files, slides[] (image, caption, text) pdf, pptx, and slide with index for each slide image (PNG)
mindmap content (JSON tree of name / children) —

Every file link points at GET /artifacts/download, which streams the file from Google and needs your API token in the Authorization header. Google’s own media URLs need the account’s cookies, so they are never returned.

Responses
  • 200 OK

    A completed quiz (long arrays shortened with ...):

    {
      "artifact": "user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55:07b94418-6c28-437c-98de-06bbeabb4e0c",
      "notebook": "user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55",
      "type": "quiz",
      "status": "completed",
      "created": "2026-09-27T23:26:36.000Z",
      "title": "Apollo Quiz",
      "content": {
        "quiz": [
          {
            "question": "During Apollo 11's lunar landing phase, which Flight Director was at the helm in Mission Control leading Shift 2 (White Team)?",
            "answerOptions": [
              {
                "text": "Gene Kranz",
                "rationale": "Gene Kranz served as the Flight Director for Shift 2 (White Team), which actively managed the critical lunar landing descent phase.",
                "isCorrect": true
              },
              {
                "text": "Glynn Lunney",
                "rationale": "Glynn Lunney managed Shift 3 (Black Team), which oversaw lunar ascent rather than the landing phase.",
                "isCorrect": false
              },
              "..."
            ],
            "hint": "..."
          },
          "..."
        ],
        "topics": {
          "covered": ["Apollo 11 Mission Overview", "Spacecraft Engineering and Call Signs", "..."],
          "followUp": ["Project Gemini Precursor Missions", "..."]
        }
      }
    }
    

    A completed slide deck:

    {
      "artifact": "user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55:ae28f2a1-678b-4304-9806-09648fcb77a0",
      "notebook": "user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55",
      "type": "slides",
      "status": "completed",
      "created": "2026-09-27T23:31:15.000Z",
      "title": "Apollo 11 Flight Plan",
      "files": [
        {
          "format": "pdf",
          "mimeType": "application/pdf",
          "url": "https://api.useapi.net/v1/gemini-notebook/artifacts/download?artifact=user%3A12345-user%40example.com-artifact%3Ad02c903b-17f8-4241-a263-2be9e7359d55%3Aae28f2a1-678b-4304-9806-09648fcb77a0&format=pdf"
        },
        {
          "format": "pptx",
          "mimeType": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
          "url": "https://api.useapi.net/v1/gemini-notebook/artifacts/download?artifact=user%3A12345-user%40example.com-artifact%3Ad02c903b-17f8-4241-a263-2be9e7359d55%3Aae28f2a1-678b-4304-9806-09648fcb77a0&format=pptx"
        }
      ],
      "slides": [
        {
          "image": "https://api.useapi.net/v1/gemini-notebook/artifacts/download?artifact=user%3A12345-user%40example.com-artifact%3Ad02c903b-17f8-4241-a263-2be9e7359d55%3Aae28f2a1-678b-4304-9806-09648fcb77a0&format=slide&index=1",
          "caption": "Title slide for Apollo 11: Anatomy of a Miracle, featuring an astronaut on the lunar surface.",
          "text": "APOLLO_11: ANATOMY OF A MIRACLE\n\nJULY 16-24, 1969 | CREWED LUNAR LANDING\n\n..."
        },
        "..."
      ]
    }
    

    An artifact that is not completed yet (or failed) returns only artifact, notebook, type, status, created and title.

  • 400 Bad Request

    The path value is not an artifact id (a notebook or source id is refused too).

    {
      "error": "Path parameter artifact (…) is not a valid artifact id",
      "code": 400
    }
    
  • 401 Unauthorized

    Invalid API token.

    {
      "error": "useapi.net ⁝ Unauthorized",
      "code": 401
    }
    
  • 403 Forbidden

    The artifact id was issued to a different API token.

    {
      "error": "user:[email protected]:d02c903b-…:07b94418-… does not belong to this API token",
      "code": 403
    }
    
  • 404 Not Found

    The artifact is no longer in the notebook (deleted here or in the web app), the notebook is gone, or its account is no longer configured.

    {
      "error": "Artifact user:[email protected]:d02c903b-…:07b94418-… not found",
      "code": 404
    }
    
  • 596 Account Error

    Google reported the account as signed out. While we re-check it, the answer is the first message below. Retry in about a minute. If it stays signed out, the account is paused, you receive an email, and the answer becomes the second message until you re-add it via Setup Gemini Notebook.

    {
      "error": "Google reported this account as signed out. We are re-checking it — please retry in about a minute. If it stays signed out, you will receive a re-add email.",
      "code": 596
    }
    
    {
      "error": "Account [email protected]: Google signed this account out. Re-add it at https://useapi.net/docs/start-here/setup-gemini-notebook",
      "code": 596
    }
    
Model
{ // TypeScript, all fields are optional
  artifact: string            // user:<id>-<email>-artifact:<notebook uuid>:<artifact uuid>
  notebook: string            // user:<id>-<email>-notebook:<notebook uuid>
  type: 'audio' | 'video' | 'report' | 'interactive_report' | 'table' | 'quiz' | 'flashcards' | 'infographic' | 'slides' | 'mindmap'
  status: 'pending' | 'processing' | 'completed' | 'failed' | 'pending_review'
  created: string | null      // ISO 8601
  title: string
  // The fields below are present only when status is 'completed', and only for the types listed above
  duration: number            // seconds, audio and video
  files: Array<{
    format: 'm4a' | 'mp4' | 'pdf' | 'pptx' | 'png'
    mimeType: string
    url: string               // GET /artifacts/download link, needs your API token
    width: number             // infographic png only
    height: number            // infographic png only
  }>
  slides: Array<{             // slide decks, in order
    image: string             // GET /artifacts/download?…&format=slide&index=N (PNG)
    caption: string | null    // Google's one-line description of the slide
    text: string | null       // the slide's text as Google extracted it
  }>
  text: string                // report (Markdown), interactive_report, infographic
  table: string[][]           // data table, first row = column headers
  content: QuizContent | FlashcardsContent | MindmapNode   // quiz, flashcards, mindmap
}

type QuizContent = {
  quiz: Array<{
    question: string
    answerOptions: Array<{
      text: string
      rationale: string       // why this option is right or wrong
      isCorrect: boolean
    }>
    hint: string
  }>
  topics: {
    covered: string[]
    followUp: string[]
  }
}

type FlashcardsContent = {
  flashcards: Array<{
    f: string                 // front of the card
    b: string                 // back of the card
    c: number                 // present on some cards (Google's own marker)
  }>
  topics: {
    covered: string[]
    followUp: string[]
  }
}

type MindmapNode = {
  name: string
  children: MindmapNode[]     // absent on leaf nodes
}

content is the JSON Google’s own interactive quiz, flashcard and mind-map views render, passed through unchanged. If Google does not return it on a read, content is left out, so read the artifact again.

Examples
  • ARTIFACT="user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55:07b94418-6c28-437c-98de-06bbeabb4e0c"
    curl -H "Authorization: Bearer …" \
         "https://api.useapi.net/v1/gemini-notebook/artifacts/$(python3 -c "import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1],safe=''))" "$ARTIFACT")"
    
  • const token = "API token";
    const artifact = "user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55:07b94418-6c28-437c-98de-06bbeabb4e0c";
    const apiUrl = `https://api.useapi.net/v1/gemini-notebook/artifacts/${encodeURIComponent(artifact)}`;
    const response = await fetch(apiUrl, {
      headers: {
        "Authorization": `Bearer ${token}`,
      },
    });
    const result = await response.json();
    console.log("response", {response, result});
    
  • import requests, urllib.parse
    token = "API token"
    artifact = "user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55:07b94418-6c28-437c-98de-06bbeabb4e0c"
    apiUrl = "https://api.useapi.net/v1/gemini-notebook/artifacts/" + urllib.parse.quote(artifact, safe="")
    headers = {
        "Authorization" : f"Bearer {token}"
    }
    response = requests.get(apiUrl, headers=headers)
    print(response, response.json())
    
Try It