Glint-VL Enterprise Vision-Language Model · v1

Glint-VL Multimedia Understanding API

Analyze images or videos through an OpenAI-compatible API with support for synchronous responses and SSE streaming. Designed for content moderation, event retrieval, OCR, process analysis, and more.

OpenAI CompatibleImages & VideosJSON · SSEBearer Authentication

Overview

Glint-VL-Video-8B is an enterprise-grade vision-language model that provides unified understanding of images, videos, and spatial information. The API uses an OpenAI-compatible format, allowing you to analyze remote images or videos with natural-language prompts and receive text results ready for use in business workflows.

Both GET /v1/models and POST /v1/chat/completions use standard OpenAI Bearer authentication. Media analysis supports complete JSON responses and SSE streaming responses.

Quickstart

First, list the available models:

BASH
curl https://maas.ve2s.ai/v1/models \
  -H "Authorization: Bearer $GLINT_API_KEY"

Analyze a video with Glint-VL-Video-8B:

BASH
curl -X POST https://maas.ve2s.ai/v1/chat/completions \
  -H "Authorization: Bearer $GLINT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Glint-VL-Video-8B",
    "messages": [{
      "role": "user",
      "content": [
        {
          "type": "video_url",
          "video_url": {
            "url": "https://example.com/video.mp4"
          }
        },
        {
          "type": "text",
          "text": "Summarize the main events and character actions in the video"
        }
      ]
    }],
    "stream": false
  }'

Authentication

Both endpoints use a Bearer API key following the OpenAI standard. Add the key assigned by your service provider to the Authorization request header:

HTTP
Authorization: Bearer <GLINT_API_KEY>
Content-Type: application/json

The examples use the GLINT_API_KEY environment variable. Do not commit your key to a public repository or embed it in a frontend page.

Base URL

TEXT
https://maas.ve2s.ai/v1

This document uses https://maas.ve2s.ai/v1 as an example. Replace it with the API base URL assigned by your service provider when making requests.

Models Endpoint

Returns the models supported by the media analysis endpoint.

GET/v1/models

Request

No request body is required, but a Bearer API key must be provided:

BASH
curl https://maas.ve2s.ai/v1/models \
  -H "Authorization: Bearer $GLINT_API_KEY"

Successful Response

The response follows the OpenAI Models API format:

JSON
{
  "object": "list",
  "data": [
    {
      "id": "Glint-VL-Video-8B",
      "object": "model",
      "created": 0,
      "owned_by": "glint"
    },
    {
      "id": "Glint-VL-SE-8B",
      "object": "model",
      "created": 0,
      "owned_by": "glint"
    }
  ]
}
Model IDSupported Media
Glint-VL-Video-8BImages and videos
Glint-VL-SE-8BImages

The returned data[].id can be used directly as the model parameter in a POST /v1/chat/completions request.

Media Analysis Endpoint

Analyzes images or videos and supports follow-up questions.

POST/v1/chat/completions

Purpose

The request and response bodies are compatible with the OpenAI Chat Completions format. The initial request analyzes the specified media. For follow-up requests, you can reuse the server-side session through conversation_id, or maintain stateless conversation history by sending the complete messages array on each request.

Request Parameters

Content-Type: application/json

ParameterTypeRequiredDefaultDescription
modelstringYesGlint-VL-SE-8B supports images only; Glint-VL-Video-8B supports images and videos.
messagesarrayYesAn OpenAI Chat Completions-style message array.
messages[].content[].image_urlobjectInitial image requesturl accepts a complete HTTP/HTTPS image URL or a Base64 Data URL.
messages[].content[].video_urlobjectInitial video requesturl must be a complete HTTP/HTTPS video URL.
messages[].content[].textstringNoThe initial analysis instruction or a follow-up question.
conversation_idstringNoReuses a server-side session through the opaque session ID returned by the initial response; the media URL does not need to be sent again for follow-up questions.
streambooleanNofalseWhen true, returns OpenAI Chat Completions-style SSE.

Request Examples

Analyze an Image

Glint-VL-SE-8B supports images only. Glint-VL-Video-8B can use the same image_url structure:

BASH
curl -X POST https://maas.ve2s.ai/v1/chat/completions \
  -H "Authorization: Bearer $GLINT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Glint-VL-SE-8B",
    "messages": [{
      "role": "user",
      "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": "https://example.com/image.jpg"
          }
        },
        {
          "type": "text",
          "text": "Describe the image in detail and extract all text"
        }
      ]
    }],
    "stream": false
  }'

Ask a Follow-up Question

Use the conversation_id from the initial response to ask a follow-up question without sending the media again. The model should match the model used by the session:

BASH
curl -X POST https://maas.ve2s.ai/v1/chat/completions \
  -H "Authorization: Bearer $GLINT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Glint-VL-Video-8B",
    "conversation_id": "conv_xxxxxxxx",
    "messages": [{
      "role": "user",
      "content": "Where did the person wearing red go afterward?"
    }],
    "stream": false
  }'

For a fully stateless workflow consistent with OpenAI Chat Completions, omit conversation_id and resend the initial user message, the initial assistant message, and the latest user message in order within messages.

Streaming Request

For streaming requests, use curl -N to disable client-side buffering:

BASH
curl -N -X POST https://maas.ve2s.ai/v1/chat/completions \
  -H "Authorization: Bearer $GLINT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Glint-VL-Video-8B",
    "messages": [{
      "role": "user",
      "content": [{
        "type": "video_url",
        "video_url": {
          "url": "https://example.com/video.mp4"
        }
      }]
    }],
    "stream": true
  }'

Successful Response

When stream=false, the endpoint returns a complete Chat Completion:

JSON
{
  "id": "chatcmpl-xxxxxxxx",
  "object": "chat.completion",
  "created": 1784736000,
  "model": "Glint-VL-Video-8B",
  "conversation_id": "conv_xxxxxxxx",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Media analysis result",
        "refusal": null,
        "annotations": []
      },
      "logprobs": null,
      "finish_reason": "stop"
    }
  ]
}

Field Descriptions

FieldTypeDescription
idstringUnique identifier for this Chat Completion.
objectstringAlways chat.completion for a non-streaming response.
creatednumberTimestamp when the response was created.
modelstringPublic model ID used for this request.
conversation_idstringOpaque session ID that can be used for follow-up questions.
choices[0].message.contentstringThe media analysis content in a non-streaming response.
choices[0].finish_reasonstringstop when the response completes normally.

SSE Response

When stream=true, the response type is text/event-stream. Content is returned incrementally through choices[0].delta.content, followed by a final data: [DONE] event:

TEXT
data: {"id":"chatcmpl-xxxxxxxx","object":"chat.completion.chunk","created":1784736000,"model":"Glint-VL-Video-8B","choices":[{"index":0,"delta":{"role":"assistant","content":""},"logprobs":null,"finish_reason":null}]}

data: {"id":"chatcmpl-xxxxxxxx","object":"chat.completion.chunk","created":1784736000,"model":"Glint-VL-Video-8B","choices":[{"index":0,"delta":{"content":"Media analysis result…"},"logprobs":null,"finish_reason":null}]}

data: {"id":"chatcmpl-xxxxxxxx","object":"chat.completion.chunk","created":1784736000,"model":"Glint-VL-Video-8B","choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}]}

data: [DONE]

Error Response

The error body uses the OpenAI-style format:

JSON
{
  "error": {
    "message": "Error description",
    "type": "invalid_request_error",
    "param": "model",
    "code": "invalid_model"
  }
}
HTTPerror.codeCondition
401invalid_api_keyThe API key is missing or invalid.
400model_required / invalid_model / unsupported_modelmodel is missing, malformed, or unsupported.
400messages_required / invalid_requestmessages is missing or has an invalid structure.
400media_url_required / invalid_image_url / invalid_video_urlThe initial request is missing media, or the URL/Data URL is invalid.
400model_media_mismatchGlint-VL-SE-8B received a video_url.
400invalid_conversation_id / follow_up_message_requiredconversation_id is malformed or the follow-up question is missing.
404conversation_not_foundThe session does not exist or is not a media analysis session.
409conversation_busyThe previous request in the same session is still being processed.
500server_errorThe server failed to perform media analysis.
503service_unavailableThe media analysis service is temporarily unavailable.
504request_timeoutThe synchronous request timed out.

Notes

  • The endpoint does not accept multipart file uploads or local file paths. Use image_url for images and video_url for videos.
  • Images support HTTP/HTTPS URLs and Base64 Data URLs. Videos support HTTP/HTTPS URLs only.
  • The entire JSON request body is limited to 10 MB. Remote image downloads for Glint-VL-SE-8B are limited to 20 MB.
  • Glint-VL-SE-8B accepts image_url only. Glint-VL-Video-8B accepts either image_url or video_url.
  • messages[].role supports developer, system, user, and assistant. Media content blocks may appear only in user messages.
  • Each user message may contain at most one image_url or video_url. Combined text content is limited to 100,000 characters.
  • When uploading new media with a conversation_id, place the new media and the current question in the final user message.
  • Non-streaming content is returned in choices[0].message.content. Streaming content is returned in choices[0].delta.content.
  • The server waits for up to 12 minutes. During analysis, streaming requests receive an SSE heartbeat comment every 15 seconds.
  • Streaming deployments must disable reverse-proxy response buffering. If the client disconnects before completion, the background analysis is not canceled.

SDK Examples

All examples below use Glint-VL-Video-8B to analyze a video. First, set the API key in the GLINT_API_KEY environment variable:

PYTHON
import os

import requests

payload = {
    "model": "Glint-VL-Video-8B",
    "messages": [{
        "role": "user",
        "content": [
            {
                "type": "video_url",
                "video_url": {"url": "https://example.com/video.mp4"},
            },
            {
                "type": "text",
                "text": "Summarize the main events and character actions in the video",
            },
        ],
    }],
    "stream": False,
}

response = requests.post(
    "https://maas.ve2s.ai/v1/chat/completions",
    headers={"Authorization": f"Bearer {os.environ['GLINT_API_KEY']}"},
    json=payload,
    timeout=720,
)
response.raise_for_status()

data = response.json()
print(data["choices"][0]["message"]["content"])
print("conversation_id:", data["conversation_id"])

Frequently Asked Questions

Which models and media types are supported?

Glint-VL-SE-8B supports images only, while Glint-VL-Video-8B supports both images and videos. Images can use an HTTP/HTTPS URL or a Base64 Data URL. Videos must use an HTTP/HTTPS URL.

Does the API require a token?

Yes. Both GET /v1/models and POST /v1/chat/completions use Authorization: Bearer <GLINT_API_KEY>. The key is assigned by your service provider.

How do I list the available models?

Call GET /v1/models. The data[].id values in the response can be used directly as the model parameter in media analysis requests.

Does the API support synchronous and streaming responses?

Yes. stream=false returns a complete Chat Completion. stream=true returns SSE, with content in choices[0].delta.content, and ends with data: [DONE].

Can I upload a file directly or provide a local file path?

No. The endpoint does not accept multipart files or local paths. Use image_url for images and video_url for videos.

© 2026 VE²S · Glint-VL · Enterprise Vision Intelligence Model