Retrieve Agent Job Status and Results

November 24, 2025 (November 26, 2025)

Table of contents

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

Retrieve the status and results of an agent job. Jobs are stored for 31 days after creation.

Use this endpoint to check the progress of asynchronous agent jobs created with POST agent using async: true.

https://api.useapi.net/v1/minimax/agent/jobId

Request Headers
Authorization: Bearer {API token}
Path Parameters
  • jobId is required. The job ID to query.
Responses
  • 200 OK

    Job found and returned successfully.

    Started Job:

    {
        "jobId": "p123456789-u12345-a67890-bot:minimax",
        "status": "started",
        "created": "2025-11-23T12:34:56.789Z",
        "request": {
            "prompt": "Generate a video of a cat playing piano",
            "models": ["hailuo-2.3"],
            "async": true
        }
    }
    

    Completed Job:

    {
        "jobId": "p123456789-u12345-a67890-bot:minimax",
        "status": "completed",
        "created": "2025-11-23T12:34:56.789Z",
        "request": {
            "prompt": "Generate a video of a cat playing piano",
            "models": ["hailuo-2.3", "nano-banana-2"]
        },
        "response": {
            "projectID": "123456789",
            "sectionID": "987654321",
            "chatID": "456789123",
            "msg_content": "I've generated a video of a cat playing piano and an image variation.",
            "timestamp": 1732366496789,
            "elapsedTime": "02:15",
            "attachments": [
                {
                    "attachmentID": "att_123456789",
                    "type": 1,
                    "status": 3,
                    "file": {
                        "fileName": "cat_piano_video.mp4",
                        "fileUrl": "https://cdn.hailuoai.video/...mp4",
                        "type": "video/mp4",
                        "extra": {
                            "width": "1280",
                            "height": "720",
                            "duration": "5.0",
                            "fps": "24",
                            "no_watermark_url": "https://cdn.hailuoai.video/.../no_watermark.mp4",
                            "watermark_url": "https://cdn.hailuoai.video/.../watermark.mp4",
                            "thumbnail_url": "https://cdn.hailuoai.video/.../thumb.jpg"
                        }
                    }
                },
                {
                    "attachmentID": "att_987654321",
                    "type": 2,
                    "status": 3,
                    "file": {
                        "fileName": "cat_piano_image.png",
                        "fileUrl": "https://cdn.hailuoai.video/...png",
                        "type": "image/png",
                        "extra": {
                            "model_name": "banana_2",
                            "model_aspect_ratio": "16:9",
                            "model_resolution": "1K"
                        }
                    }
                }
            ]
        }
    }
    

    Failed Job:

    {
        "jobId": "p123456789-u12345-a67890-bot:minimax",
        "status": "failed",
        "created": "2025-11-23T12:34:56.789Z",
        "request": {
            "prompt": "Generate a video",
            "models": ["hailuo-2.3"]
        },
        "error": {
            "message": "Timeout waiting for assistant response",
            "status": 504
        }
    }
    
  • 400 Bad Request

    Invalid job ID format or access denied.

    {
      "error": "Error …",
      "code": 400
    }
    
  • 401 Unauthorized

    Invalid API token.

    {
      "error": "Unauthorized",
      "code": 401
    }
    
  • 404 Not Found

    Job not found or expired after 31 days.

    {
      "error": "Job not found or expired after 31 days",
      "code": 404
    }
    
Model

Downloading Generated Files:

  • file.fileUrl - Primary download URL (may have watermark)
  • file.extra.no_watermark_url - URL without watermark (when available)
  • file.extra.watermark_url - URL with watermark
  • node.agentFile.noWatermarkUrl - Alternative watermark-free URL
  • node.agentFile.url - Alternative file URL
{
  // Job metadata
  jobId: string                      // Unique job identifier
  status: 'started' | 'completed' | 'failed'  // Job status
  created: string                    // ISO 8601 timestamp
  code?: number                      // HTTP status code (optional)

  // Original request
  request: {
    prompt: string                   // User's prompt
    file?: Array<{                   // File metadata (actual files not included)
      name: string
      size: number
      type: string
    }>
    models: string[]                 // Model IDs used
    async?: boolean                  // Async mode flag
    replyUrl?: string               // Callback URL
    replyRef?: string               // User's reference ID
  }

  // Agent response (only present when status is 'completed')
  response?: {
    projectID: string                // MiniMax project ID
    sectionID: string                // MiniMax section ID
    chatID: string                   // MiniMax chat ID
    msg_content: string              // Agent's response message
    timestamp: number                // Response timestamp (milliseconds since epoch)
    elapsedTime: string              // Elapsed time (mm:ss format)
    attachments?: Array<{            // Generated files
      attachmentID: string           // Attachment identifier
      type: number                   // Attachment type (numeric)
      status: number                 // Attachment status (3 = completed)
      file: {
        fileName: string             // File name
        fileUrl: string              // CDN URL to download file
        extra?: {                    // Additional file metadata
          // Video-specific fields
          height?: string            // Video height in pixels
          width?: string             // Video width in pixels
          duration?: string          // Duration in seconds
          fps?: string               // Frames per second
          frames?: string            // Total frame count
          no_watermark_url?: string  // CDN URL without watermark
          watermark_url?: string     // CDN URL with watermark
          thumbnail_url?: string     // Thumbnail image URL
          url?: string               // Alternative URL
          path?: string              // File path
          task_id?: string           // Generation task ID
          vendor?: string            // Video generation vendor
          subtitle_path?: string     // Subtitle file path
          // Image-specific fields (nano-banana-2 model)
          model_aspect_ratio?: string  // e.g. "9:16", "16:9"
          model_name?: string          // e.g. "banana_2"
          model_resolution?: string    // e.g. "1K", "2K"
          // Audio/TTS-specific fields
          format?: string              // e.g. "mp3"
          type?: string                // e.g. "audio"
          model_speech_count?: string  // Character count for TTS
        }
        posterUrl?: string           // Poster/thumbnail URL
        type?: string                // File MIME type
        referenceType?: number       // Reference type
      }
      text?: string                  // Associated text content
      extra?: Record<string, any>    // Additional metadata
      node?: {                       // Node/timeline information
        nodeID: string               // Unique node identifier
        xStart: number               // X position start
        yStart: number               // Y position start
        width: number                // Node width
        height: number               // Node height
        layer: number                // Layer index
        nodeType: number             // Node type identifier
        agentFile?: {                // Generated file details
          id: string                 // File ID
          name: string               // File name
          url: string                // File URL
          coverInfo?: {              // Cover image info
            coverURL: string         // Cover image URL
          }
          noWatermarkUrl?: string    // URL without watermark
          duration?: number          // Duration in seconds
          relativePath?: string      // Relative file path
          thumbnailUrl?: string      // Thumbnail URL
        }
        status: number               // Node status
        playWidth: number            // Playback width
        playHeight: number           // Playback height
        logoType: number             // Logo type identifier
      }
    }>
  }

  // Error information (only present when status is 'failed')
  error?: string | {                 // Error can be a string or object
    message: string                  // Error description
    status: number                   // HTTP status code
    details?: any                    // Additional error details
  }
}
Examples
  • curl -H "Authorization: Bearer YOUR_API_TOKEN" \
         "https://api.useapi.net/v1/minimax/agent/p123456789-u12345-a67890-bot:minimax"
    
  • const token = "YOUR_API_TOKEN";
    const jobId = "p123456789-u12345-a67890-bot:minimax";
    const apiUrl = `https://api.useapi.net/v1/minimax/agent/${jobId}`;
    
    const response = await fetch(apiUrl, {
      headers: {
        'Authorization': `Bearer ${token}`
      }
    });
    
    const job = await response.json();
    console.log('Job status:', job.status);
    
    if (job.status === 'completed' && job.response?.attachments) {
      job.response.attachments.forEach(att => {
        console.log(`${att.file.fileName}: ${att.file.fileUrl}`);
      });
    } else if (job.status === 'failed') {
      console.error('Job failed:', job.error);
    }
    
  • import requests
    
    token = "YOUR_API_TOKEN"
    job_id = "p123456789-u12345-a67890-bot:minimax"
    api_url = f"https://api.useapi.net/v1/minimax/agent/{job_id}"
    
    response = requests.get(
        api_url,
        headers={'Authorization': f'Bearer {token}'}
    )
    
    job = response.json()
    print(f"Job status: {job['status']}")
    
    if job['status'] == 'completed' and job.get('response', {}).get('attachments'):
        for att in job['response']['attachments']:
            print(f"{att['file']['fileName']}: {att['file']['fileUrl']}")
    elif job['status'] == 'failed':
        print(f"Job failed: {job['error']}")
    
Try It