Share Transcript URL

Learn how to create shareable, public URLs for transcripts that can be used with AI tools like ChatGPT and Perplexity.

Overview
The transcript share API creates temporary, public URLs that allow AI tools to read transcripts directly from a URL. This is more efficient than copying and pasting large transcripts.

Use Cases

  • Share transcripts with ChatGPT using "Read from URL" feature
  • Share transcripts with Perplexity for analysis
  • Embed transcripts in documentation or reports
  • Create temporary access links for team members

Key Features

  • Public access: No authentication required to access the URL
  • Temporary: Links expire after a set time (default: 1 hour)
  • Secure: Share IDs are randomly generated and hard to guess
  • Text format: Transcripts are served as plain text (.txt) for easy reading
Create Share URL
Create a shareable transcript URL using the REST API
JavaScript/TypeScript Example
// Create a share URL for a transcript
async function createTranscriptShare(platform, nativeMeetingId, meetingId, ttlSeconds) {
  const params = new URLSearchParams();
  if (meetingId) params.set('meeting_id', meetingId);
  if (ttlSeconds) params.set('ttl_seconds', String(ttlSeconds));
  const queryString = params.toString();
  
  const response = await fetch(
    `https://your-api-url/transcripts/${platform}/${nativeMeetingId}/share${queryString ? `?${queryString}` : ''}`,
    {
      method: 'POST',
      headers: {
        'X-API-Key': 'your-api-key',
        'Content-Type': 'application/json'
      }
    }
  );
  
  if (!response.ok) {
    throw new Error(`Failed to create share URL: ${response.statusText}`);
  }
  
  const share = await response.json();
  
  // share contains:
  // - share_id: Unique identifier for the share
  // - url: Full public URL to access the transcript
  // - expires_at: ISO timestamp when the link expires
  // - expires_in_seconds: Time until expiration
  
  console.log(`Share URL created: ${share.url}`);
  console.log(`Expires at: ${share.expires_at}`);
  
  return share;
}

// Usage
const share = await createTranscriptShare(
  'google_meet',
  'abc-defg-hij',
  123, // optional meeting_id
  7200 // optional: 2 hours TTL (default is 3600 = 1 hour)
);

// The share.url can be used directly:
// https://api.vexa.ai/public/transcripts/abc123def456.txt
Using Share URLs with AI Tools
How to integrate share URLs with ChatGPT, Perplexity, and other AI tools

ChatGPT

ChatGPT can read content from URLs. Create a prompt that includes the share URL:

// Create share URL
const share = await createTranscriptShare('google_meet', 'abc-defg-hij');

// Build ChatGPT URL with prompt
const prompt = `Please read the meeting transcript from this URL and summarize the key points: ${share.url}`;
const chatgptUrl = `https://chatgpt.com/?hints=search&q=${encodeURIComponent(prompt)}`;

// Open in new window
window.open(chatgptUrl, '_blank', 'noopener,noreferrer');

Perplexity

Perplexity can also read from URLs. Use a similar approach:

// Create share URL
const share = await createTranscriptShare('google_meet', 'abc-defg-hij');

// Build Perplexity URL with prompt
const prompt = `Please analyze the meeting transcript from this URL: ${share.url}`;
const perplexityUrl = `https://www.perplexity.ai/search?q=${encodeURIComponent(prompt)}`;

// Open in new window
window.open(perplexityUrl, '_blank', 'noopener,noreferrer');

Custom Prompts

You can customize the prompt to ask specific questions. Use {url} as a placeholder that will be replaced with the actual share URL:

// Example custom prompts
const prompts = {
  summary: `Read the meeting transcript from {url} and provide a concise summary with action items.`,
  qa: `Read the meeting transcript from {url} and answer: What were the main decisions made?`,
  analysis: `Analyze the meeting transcript from {url} and identify key themes and discussion points.`
};

// Replace {url} placeholder
const share = await createTranscriptShare('google_meet', 'abc-defg-hij');
const prompt = prompts.summary.replace(/{url}/g, share.url);
const chatgptUrl = `https://chatgpt.com/?hints=search&q=${encodeURIComponent(prompt)}`;
Complete Example
Full implementation for sharing transcripts with AI tools
async function shareTranscriptWithAI(platform, nativeMeetingId, provider, customPrompt) {
  try {
    // 1. Create share URL
    const share = await createTranscriptShare(platform, nativeMeetingId);
    
    // 2. Build prompt with URL
    const defaultPrompt = `Please read and analyze the meeting transcript from this URL: {url}`;
    const prompt = (customPrompt || defaultPrompt).replace(/{url}/g, share.url);
    
    // 3. Build provider URL
    let providerUrl;
    if (provider === 'chatgpt') {
      providerUrl = `https://chatgpt.com/?hints=search&q=${encodeURIComponent(prompt)}`;
    } else if (provider === 'perplexity') {
      providerUrl = `https://www.perplexity.ai/search?q=${encodeURIComponent(prompt)}`;
    } else {
      throw new Error(`Unsupported provider: ${provider}`);
    }
    
    // 4. Open in new window
    window.open(providerUrl, '_blank', 'noopener,noreferrer');
    
    return {
      success: true,
      shareUrl: share.url,
      expiresAt: share.expires_at
    };
  } catch (error) {
    console.error('Failed to share transcript:', error);
    throw error;
  }
}

// Usage
await shareTranscriptWithAI(
  'google_meet',
  'abc-defg-hij',
  'chatgpt',
  'Read {url} and summarize the key action items.'
);
Best Practices
  • Set appropriate TTL: Use longer TTL (e.g., 7200 seconds = 2 hours) if you need the link to stay active longer, but remember links are public.
  • Handle expiration: Check expires_at before sharing and warn users if the link is about to expire.
  • Custom prompts: Create specific prompts for different use cases (summarization, Q&A, analysis) to get better results from AI tools.
  • Public base URL: If your API is behind a private network, set NEXT_PUBLIC_TRANSCRIPT_SHARE_BASE_URL environment variable to point to a public URL where the share links will be accessible.
  • Error handling: Always have a fallback (e.g., clipboard copy) in case share URL creation fails.
Response Format

Share Response

{
  "share_id": "abc123def456",
  "url": "https://api.vexa.ai/public/transcripts/abc123def456.txt",
  "expires_at": "2024-01-01T13:00:00Z",
  "expires_in_seconds": 3600
}

Transcript Content

When you access the share URL, you'll receive the transcript as plain text:

Meeting Transcript

Title: Team Standup
Date: 2024-01-01 12:00:00

[00:00:00] Alice: Hello everyone, welcome to today's meeting.
[00:00:05] Bob: Thanks for joining. Let's start with updates.
[00:00:10] Alice: I've completed the feature implementation.
[00:00:15] Bob: Great! What about the testing?
...