Get Single Character (with previewUrls + audioUrl)

June 5, 2026

Table of contents

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

Resolve a single character by reference-id with all media URLs included:

  • imageReferences[].previewUrl — signed image preview for each attached image
  • thumbnailUrl — signed thumbnail of the auto-composited character avatar
  • voice.audioUrl — signed playback URL when a live voice is attached

All URLs are valid for ~6 hours.

https://api.useapi.net/v1/google-flow/characters/ref

Path Parameters

Request Headers

Authorization: Bearer {API token}

Responses

  • 200 OK

    {
      "character": "user:12345-email:6a6f...-character:f470f1b5-...-imgs:2-voice:d990a2f9-...",
      "entityId": "f470f1b5-...",
      "displayName": "Carol",
      "personalityNotes": "A curious traveler with a sharp wit",
      "imageReferences": [
        {
          "workflowId": "wf-a...",
          "mediaId": "media-a...",
          "previewUrl": "https://flow-content.google/image/media-a...?Expires=...&Signature=..."
        },
        {
          "workflowId": "wf-b...",
          "mediaId": "media-b...",
          "previewUrl": "https://flow-content.google/image/media-b...?Expires=...&Signature=..."
        }
      ],
      "voice": {
        "voice": "user:12345-email:6a6f...-voice:d990a2f9-...-mid:d55b6d59-...",
        "workflowId": "d990a2f9-...",
        "mediaId": "d55b6d59-...",
        "displayName": "Cheerful Narrator",
        "baseVoice": "Achernar",
        "dialog": "Hello, this is a test voice.",
        "voicePerformance": "Cheerful, energetic delivery",
        "audioUrl": "https://flow-content.google/audio/d55b6d59-...?Expires=...&Signature=..."
      },
      "thumbnailMediaId": "thumb-a...",
      "thumbnailUrl": "https://flow-content.google/image/thumb-a...?Expires=...&Signature=...",
      "createTime": "2026-06-05T18:14:07.706641Z",
      "updateTime": "2026-06-05T18:14:16.004078Z"
    }
    

    For a system voice attached at create time (e.g. voice: "Umbriel" on POST /characters), the voice block reports { "source": "system", "voice": "Umbriel", "displayName": "Umbriel" } — no workflowId, no audioUrl. Preview the audio sample from https://www.gstatic.com/aitestkitchen/voices/samples/{Name}.wav.

    For an orphan voice (the attached user voice has been deleted), the voice block degrades to { "workflowId": "...", "deleted": true } — no audioUrl. The image URLs are unaffected.

  • 400 Bad Request

    { "error": "Parameter character has incorrect format" }
    
  • 403 Forbidden

    { "error": "Unauthorized access to user:12345 detected in character reference" }
    
  • 404 Not Found

    { "error": "Character not found: f470f1b5-..." }
    

Model

{
  character: string              // reference-id used in character_1..7 on POST /videos & POST /images
  entityId: string
  displayName: string
  personalityNotes?: string
  imageReferences: Array<{
    workflowId?: string
    mediaId?: string             // populated when the image media is resolvable
    previewUrl?: string          // signed image preview URL (~6h TTL)
  }>
  thumbnailMediaId?: string
  thumbnailUrl?: string          // signed thumbnail URL (~6h TTL)
  createTime?: string            // ISO 8601 timestamp
  updateTime?: string
  voice?:                        // omitted if no voice was ever attached
    | {                          // live user voice
        source: 'user'
        voice: string            // dual-id reference-id
        workflowId: string
        mediaId: string
        displayName?: string
        baseVoice?: string
        dialog?: string
        voicePerformance?: string
        audioUrl?: string        // signed playback URL (~6h TTL)
      }
    | {                          // system voice preset (no workflow / media)
        source: 'system'
        voice: string            // canonical Title-case preset name (e.g. 'Umbriel')
        displayName: string      // same as `voice`
      }
    | {                          // orphan user voice — attached then deleted
        workflowId: string
        deleted: true
      }
}

Examples

  • REF="user:12345-email:6a6f...-character:f470f1b5-...-imgs:2"
    REF_ENC=$(printf '%s' "$REF" | jq -sRr @uri)
    curl -H "Authorization: Bearer YOUR_API_TOKEN" \
         "https://api.useapi.net/v1/google-flow/characters/$REF_ENC"
    
  • const ref = 'user:12345-email:6a6f...-character:f470f1b5-...-imgs:2'
    const r = await fetch(
      `https://api.useapi.net/v1/google-flow/characters/${encodeURIComponent(ref)}`,
      { headers: { 'Authorization': `Bearer ${token}` } }
    )
    const c = await r.json()
    c.imageReferences.forEach((img, i) => console.log(`img ${i}:`, img.previewUrl))
    console.log('voice audio:', c.voice?.audioUrl)
    
  • import requests, urllib.parse
    ref = 'user:12345-email:6a6f...-character:f470f1b5-...-imgs:2'
    r = requests.get(
        f'https://api.useapi.net/v1/google-flow/characters/{urllib.parse.quote(ref, safe="")}',
        headers={'Authorization': f'Bearer {token}'},
    )
    c = r.json()
    for i, img in enumerate(c['imageReferences']):
        print(f"img {i}:", img.get('previewUrl'))
    print('voice audio:', (c.get('voice') or {}).get('audioUrl'))
    

Try It