Copy artifacts to another notebook

October 15, 2026

Table of contents

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

Copy Studio artifacts from one notebook into another notebook on the same account. Nothing is generated again. Each copy gets a new artifact id in the target notebook, and the originals stay where they are.

All artifacts must come from one notebook, and the target notebook must be a different notebook on the same account. To copy a whole notebook with its sources use POST /notebooks/copy, and to copy sources only use POST /sources/copy.

The response lists each copy with status: "pending". A copy completes on its own, without being generated again. Read it with GET /artifacts/artifact or list the target with GET /artifacts.

The API does not retry this call, so after a 502, 503 or 504 check GET /artifacts on the target notebook before you try again.

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

Request Headers
Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data
Request Body
{
  "artifacts": [
    "user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55:3c8b3e5e-4534-4430-aeb3-db347161a1ad"
  ],
  "notebook": "user:[email protected]:5b7e2a41-9c0d-4e8f-a1b3-6d2c8f0e7a95"
}
  • artifacts is required, an array of 1 to 50 artifact ids, all from the same notebook.
  • notebook is required, the id of the notebook to copy into. It must be on the same account as the artifacts.
Responses
  • 201 Created

    from is the original’s id and artifact is the copy’s new id.

    {
      "notebook": "user:[email protected]:5b7e2a41-9c0d-4e8f-a1b3-6d2c8f0e7a95",
      "artifacts": [
        {
          "from": "user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55:3c8b3e5e-4534-4430-aeb3-db347161a1ad",
          "artifact": "user:[email protected]:5b7e2a41-9c0d-4e8f-a1b3-6d2c8f0e7a95:7282c160-d72e-40b4-b30d-774d0f585d4e",
          "type": "report",
          "title": "Comprehensive Briefing Document: Apollo 11 Mission and Historical Context",
          "status": "pending"
        }
      ]
    }
    
  • 400 Bad Request

    A missing or invalid parameter, artifacts from more than one notebook, artifacts already in the target, or a target on another account.

    {
      "error": "artifacts must all come from one notebook",
      "code": 400
    }
    
    {
      "error": "the artifacts are already in this notebook",
      "code": 400
    }
    
    {
      "error": "artifact user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55:3c8b3e5e-4534-4430-aeb3-db347161a1ad is on another account than notebook user:[email protected]:5b7e2a41-9c0d-4e8f-a1b3-6d2c8f0e7a95",
      "code": 400
    }
    
  • 401 Unauthorized

    Invalid API token.

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

    The notebook id belongs to a different API token.

    {
      "error": "user:[email protected]:5b7e2a41-9c0d-4e8f-a1b3-6d2c8f0e7a95 does not belong to this API token",
      "code": 403
    }
    
  • 404 Not Found

    The account the notebook names is not configured, or a notebook or artifact no longer exists at Google.

    {
      "error": "Account [email protected] of user:[email protected]:5b7e2a41-9c0d-4e8f-a1b3-6d2c8f0e7a95 is not configured",
      "code": 404
    }
    
  • 503 Service Unavailable

    Google is temporarily unavailable or is challenging our network. Check GET /artifacts on the target notebook, then retry in a few minutes. A 502 means Google answered with an unexpected error.

    {
      "error": "GOOGLE_BOT_CHECK: Google is challenging our network right now, please retry in a few minutes",
      "code": 503
    }
    
  • 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
  notebook: string             // the target notebook
  artifacts: {
    from: string               // the original artifact's id
    artifact: string           // the copy's id in the target notebook
    type: 'audio' | 'video' | 'report' | 'interactive_report' | 'table' | 'quiz' | 'flashcards' | 'infographic' | 'slides' | 'mindmap'
    title: string
    status: 'pending' | 'processing' | 'completed' | 'failed'
  }[]
  error: string                // error responses only
  code: number                 // error responses only, the HTTP status
}
Examples
  • curl -X POST "https://api.useapi.net/v1/gemini-notebook/artifacts/copy" \
       -H "Content-Type: application/json" \
       -H "Authorization: Bearer …" \
       -d '{
         "artifacts": ["user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55:3c8b3e5e-4534-4430-aeb3-db347161a1ad"],
         "notebook": "user:[email protected]:5b7e2a41-9c0d-4e8f-a1b3-6d2c8f0e7a95"
       }'
    
  • const token = "API token";
    const response = await fetch("https://api.useapi.net/v1/gemini-notebook/artifacts/copy", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        "Authorization": `Bearer ${token}`
      },
      body: JSON.stringify({
        artifacts: ["user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55:3c8b3e5e-4534-4430-aeb3-db347161a1ad"],
        notebook: "user:[email protected]:5b7e2a41-9c0d-4e8f-a1b3-6d2c8f0e7a95"
      })
    });
    const result = await response.json();
    console.log("response", response.status, result);
    
  • import requests
    
    token = "API token"
    response = requests.post(
        "https://api.useapi.net/v1/gemini-notebook/artifacts/copy",
        headers={"Content-Type": "application/json", "Authorization": f"Bearer {token}"},
        json={
            "artifacts": ["user:[email protected]:d02c903b-17f8-4241-a263-2be9e7359d55:3c8b3e5e-4534-4430-aeb3-db347161a1ad"],
            "notebook": "user:[email protected]:5b7e2a41-9c0d-4e8f-a1b3-6d2c8f0e7a95"
        }
    )
    print(response.status_code, response.json())
    
Try It