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.
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:
curl https://maas.ve2s.ai/v1/models \
-H "Authorization: Bearer $GLINT_API_KEY"Analyze a video with Glint-VL-Video-8B:
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:
Authorization: Bearer <GLINT_API_KEY>
Content-Type: application/jsonThe 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
https://maas.ve2s.ai/v1This 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.
Request
No request body is required, but a Bearer API key must be provided:
curl https://maas.ve2s.ai/v1/models \
-H "Authorization: Bearer $GLINT_API_KEY"Successful Response
The response follows the OpenAI Models API format:
{
"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 ID | Supported Media |
|---|---|
Glint-VL-Video-8B | Images and videos |
Glint-VL-SE-8B | Images |
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.
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
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
model | string | Yes | — | Glint-VL-SE-8B supports images only; Glint-VL-Video-8B supports images and videos. |
messages | array | Yes | — | An OpenAI Chat Completions-style message array. |
messages[].content[].image_url | object | Initial image request | — | url accepts a complete HTTP/HTTPS image URL or a Base64 Data URL. |
messages[].content[].video_url | object | Initial video request | — | url must be a complete HTTP/HTTPS video URL. |
messages[].content[].text | string | No | — | The initial analysis instruction or a follow-up question. |
conversation_id | string | No | — | Reuses 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. |
stream | boolean | No | false | When 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:
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:
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:
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:
{
"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
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier for this Chat Completion. |
object | string | Always chat.completion for a non-streaming response. |
created | number | Timestamp when the response was created. |
model | string | Public model ID used for this request. |
conversation_id | string | Opaque session ID that can be used for follow-up questions. |
choices[0].message.content | string | The media analysis content in a non-streaming response. |
choices[0].finish_reason | string | stop 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:
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:
{
"error": {
"message": "Error description",
"type": "invalid_request_error",
"param": "model",
"code": "invalid_model"
}
}| HTTP | error.code | Condition |
|---|---|---|
401 | invalid_api_key | The API key is missing or invalid. |
400 | model_required / invalid_model / unsupported_model | model is missing, malformed, or unsupported. |
400 | messages_required / invalid_request | messages is missing or has an invalid structure. |
400 | media_url_required / invalid_image_url / invalid_video_url | The initial request is missing media, or the URL/Data URL is invalid. |
400 | model_media_mismatch | Glint-VL-SE-8B received a video_url. |
400 | invalid_conversation_id / follow_up_message_required | conversation_id is malformed or the follow-up question is missing. |
404 | conversation_not_found | The session does not exist or is not a media analysis session. |
409 | conversation_busy | The previous request in the same session is still being processed. |
500 | server_error | The server failed to perform media analysis. |
503 | service_unavailable | The media analysis service is temporarily unavailable. |
504 | request_timeout | The synchronous request timed out. |
Notes
- The endpoint does not accept multipart file uploads or local file paths. Use
image_urlfor images andvideo_urlfor 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-8Bare limited to 20 MB. Glint-VL-SE-8Bacceptsimage_urlonly.Glint-VL-Video-8Baccepts eitherimage_urlorvideo_url.messages[].rolesupportsdeveloper,system,user, andassistant. Media content blocks may appear only inusermessages.- Each
usermessage may contain at most oneimage_urlorvideo_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 finalusermessage. - Non-streaming content is returned in
choices[0].message.content. Streaming content is returned inchoices[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:
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