curl https://api.apimart.ai/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "What is in this image?"
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}'
import requests
import os
url = "https://api.apimart.ai/v1/responses"
payload = {
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "What is in this image?"
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}
headers = {
"Authorization": f"Bearer {os.environ.get('OPENAI_API_KEY')}",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/responses";
const payload = {
model: "gpt-5.2-pro",
input: [
{
role: "user",
content: [
{
type: "input_text",
text: "What is in this image?"
},
{
type: "input_image",
image_url: "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
};
const headers = {
"Authorization": `Bearer ${process.env.OPENAI_API_KEY}`,
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
)
func main() {
url := "https://api.apimart.ai/v1/responses"
payload := map[string]interface{}{
"model": "gpt-5.2-pro",
"input": []map[string]interface{}{
{
"role": "user",
"content": []map[string]string{
{
"type": "input_text",
"text": "What is in this image?",
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png",
},
},
},
},
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer "+os.Getenv("OPENAI_API_KEY"))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://api.apimart.ai/v1/responses";
String apiKey = System.getenv("OPENAI_API_KEY");
String payload = """
{
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "What is in this image?"
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://api.apimart.ai/v1/responses";
$apiKey = getenv('OPENAI_API_KEY');
$payload = [
"model" => "gpt-5.2-pro",
"input" => [
[
"role" => "user",
"content" => [
[
"type" => "input_text",
"text" => "What is in this image?"
],
[
"type" => "input_image",
"image_url" => "https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
]
]
]
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer " . $apiKey,
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://api.apimart.ai/v1/responses")
api_key = ENV['OPENAI_API_KEY']
payload = {
model: "gpt-5.2-pro",
input: [
{
role: "user",
content: [
{
type: "input_text",
text: "What is in this image?"
},
{
type: "input_image",
image_url: "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request.body = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://api.apimart.ai/v1/responses")!
let apiKey = ProcessInfo.processInfo.environment["OPENAI_API_KEY"] ?? ""
let payload: [String: Any] = [
"model": "gpt-5.2-pro",
"input": [
[
"role": "user",
"content": [
[
"type": "input_text",
"text": "What is in this image?"
],
[
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
]
]
]
]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONSerialization.data(withJSONObject: payload)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
if let data = data, let responseString = String(data: data, encoding: .utf8) {
print(responseString)
}
}
task.resume()
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var url = "https://api.apimart.ai/v1/responses";
var apiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY");
var payload = @"{
""model"": ""gpt-5.2-pro"",
""input"": [
{
""role"": ""user"",
""content"": [
{
""type"": ""input_text"",
""text"": ""What is in this image?""
},
{
""type"": ""input_image"",
""image_url"": ""https://openai-documentation.vercel.app/images/cat_and_otter.png""
}
]
}
]
}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>
int main(void) {
CURL *curl;
CURLcode res;
const char *api_key = getenv("OPENAI_API_KEY");
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
const char *url = "https://api.apimart.ai/v1/responses";
const char *payload = "{"
"\"model\":\"gpt-5.2-pro\","
"\"input\":[{\"role\":\"user\",\"content\":[{\"type\":\"input_text\",\"text\":\"What is in this image?\"},{\"type\":\"input_image\",\"image_url\":\"https://openai-documentation.vercel.app/images/cat_and_otter.png\"}]}]"
"}";
char auth_header[256];
snprintf(auth_header, sizeof(auth_header), "Authorization: Bearer %s", api_key);
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, auth_header);
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSURL *url = [NSURL URLWithString:@"https://api.apimart.ai/v1/responses"];
NSString *apiKey = [NSProcessInfo processInfo].environment[@"OPENAI_API_KEY"];
NSDictionary *payload = @{
@"model": @"gpt-5.2-pro",
@"input": @[
@{
@"role": @"user",
@"content": @[
@{
@"type": @"input_text",
@"text": @"What is in this image?"
},
@{
@"type": @"input_image",
@"image_url": @"https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload
options:0
error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"Bearer %@", apiKey]
forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
NSURLSessionDataTask *task = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
return;
}
NSString *result = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
}];
[task resume];
[[NSRunLoop mainRunLoop] run];
}
return 0;
}
(* Requires cohttp and yojson libraries *)
open Lwt
open Cohttp
open Cohttp_lwt_unix
let url = "https://api.apimart.ai/v1/responses"
let api_key = Sys.getenv "OPENAI_API_KEY"
let payload = {|{
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "What is in this image?"
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}|}
let () =
let headers = Header.init ()
|> fun h -> Header.add h "Authorization" ("Bearer " ^ api_key)
|> fun h -> Header.add h "Content-Type" "application/json"
in
let body = Cohttp_lwt.Body.of_string payload in
let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) ->
body |> Cohttp_lwt.Body.to_string >|= fun body_str ->
print_endline body_str
in
Lwt_main.run response
import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://api.apimart.ai/v1/responses');
final apiKey = Platform.environment['OPENAI_API_KEY'];
final payload = {
'model': 'gpt-5.2-pro',
'input': [
{
'role': 'user',
'content': [
{
'type': 'input_text',
'text': 'What is in this image?'
},
{
'type': 'input_image',
'image_url': 'https://openai-documentation.vercel.app/images/cat_and_otter.png'
}
]
}
]
};
final response = await http.post(
url,
headers: {
'Authorization': 'Bearer $apiKey',
'Content-Type': 'application/json',
},
body: jsonEncode(payload),
);
print(response.body);
}
library(httr)
library(jsonlite)
url <- "https://api.apimart.ai/v1/responses"
api_key <- Sys.getenv("OPENAI_API_KEY")
payload <- list(
model = "gpt-5.2-pro",
input = list(
list(
role = "user",
content = list(
list(
type = "input_text",
text = "What is in this image?"
),
list(
type = "input_image",
image_url = "https://openai-documentation.vercel.app/images/cat_and_otter.png"
)
)
)
)
)
response <- POST(
url,
add_headers(
Authorization = paste("Bearer", api_key),
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"id": "resp-9876543210",
"object": "response",
"created_at": 1677652288,
"status": "completed",
"model": "gpt-5.2-pro",
"output": [
{
"id": "msg_9876543210",
"type": "message",
"status": "completed",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "This image shows a cat and an otter. They appear to be interacting with each other in a very cute and heartwarming scene. The cat and otter seem to be getting along well.",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 156,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens": 45,
"total_tokens": 201
}
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient account balance, please top up and try again",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "Access forbidden, you do not have permission to access this resource",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later",
"type": "server_error"
}
}
{
"error": {
"code": 502,
"message": "Gateway error, server temporarily unavailable",
"type": "bad_gateway"
}
}
Text Series
OpenAI Multimodal Responses API
- Fully compatible with OpenAI Responses API format
- Supports multimodal input with text and images
- Supports tool extensions: web search, file search, function calling, remote MCP
POST
/
v1
/
responses
curl https://api.apimart.ai/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "What is in this image?"
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}'
import requests
import os
url = "https://api.apimart.ai/v1/responses"
payload = {
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "What is in this image?"
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}
headers = {
"Authorization": f"Bearer {os.environ.get('OPENAI_API_KEY')}",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/responses";
const payload = {
model: "gpt-5.2-pro",
input: [
{
role: "user",
content: [
{
type: "input_text",
text: "What is in this image?"
},
{
type: "input_image",
image_url: "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
};
const headers = {
"Authorization": `Bearer ${process.env.OPENAI_API_KEY}`,
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
)
func main() {
url := "https://api.apimart.ai/v1/responses"
payload := map[string]interface{}{
"model": "gpt-5.2-pro",
"input": []map[string]interface{}{
{
"role": "user",
"content": []map[string]string{
{
"type": "input_text",
"text": "What is in this image?",
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png",
},
},
},
},
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer "+os.Getenv("OPENAI_API_KEY"))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://api.apimart.ai/v1/responses";
String apiKey = System.getenv("OPENAI_API_KEY");
String payload = """
{
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "What is in this image?"
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://api.apimart.ai/v1/responses";
$apiKey = getenv('OPENAI_API_KEY');
$payload = [
"model" => "gpt-5.2-pro",
"input" => [
[
"role" => "user",
"content" => [
[
"type" => "input_text",
"text" => "What is in this image?"
],
[
"type" => "input_image",
"image_url" => "https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
]
]
]
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer " . $apiKey,
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://api.apimart.ai/v1/responses")
api_key = ENV['OPENAI_API_KEY']
payload = {
model: "gpt-5.2-pro",
input: [
{
role: "user",
content: [
{
type: "input_text",
text: "What is in this image?"
},
{
type: "input_image",
image_url: "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request.body = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://api.apimart.ai/v1/responses")!
let apiKey = ProcessInfo.processInfo.environment["OPENAI_API_KEY"] ?? ""
let payload: [String: Any] = [
"model": "gpt-5.2-pro",
"input": [
[
"role": "user",
"content": [
[
"type": "input_text",
"text": "What is in this image?"
],
[
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
]
]
]
]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONSerialization.data(withJSONObject: payload)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
if let data = data, let responseString = String(data: data, encoding: .utf8) {
print(responseString)
}
}
task.resume()
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var url = "https://api.apimart.ai/v1/responses";
var apiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY");
var payload = @"{
""model"": ""gpt-5.2-pro"",
""input"": [
{
""role"": ""user"",
""content"": [
{
""type"": ""input_text"",
""text"": ""What is in this image?""
},
{
""type"": ""input_image"",
""image_url"": ""https://openai-documentation.vercel.app/images/cat_and_otter.png""
}
]
}
]
}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>
int main(void) {
CURL *curl;
CURLcode res;
const char *api_key = getenv("OPENAI_API_KEY");
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
const char *url = "https://api.apimart.ai/v1/responses";
const char *payload = "{"
"\"model\":\"gpt-5.2-pro\","
"\"input\":[{\"role\":\"user\",\"content\":[{\"type\":\"input_text\",\"text\":\"What is in this image?\"},{\"type\":\"input_image\",\"image_url\":\"https://openai-documentation.vercel.app/images/cat_and_otter.png\"}]}]"
"}";
char auth_header[256];
snprintf(auth_header, sizeof(auth_header), "Authorization: Bearer %s", api_key);
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, auth_header);
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSURL *url = [NSURL URLWithString:@"https://api.apimart.ai/v1/responses"];
NSString *apiKey = [NSProcessInfo processInfo].environment[@"OPENAI_API_KEY"];
NSDictionary *payload = @{
@"model": @"gpt-5.2-pro",
@"input": @[
@{
@"role": @"user",
@"content": @[
@{
@"type": @"input_text",
@"text": @"What is in this image?"
},
@{
@"type": @"input_image",
@"image_url": @"https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload
options:0
error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"Bearer %@", apiKey]
forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
NSURLSessionDataTask *task = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
return;
}
NSString *result = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
}];
[task resume];
[[NSRunLoop mainRunLoop] run];
}
return 0;
}
(* Requires cohttp and yojson libraries *)
open Lwt
open Cohttp
open Cohttp_lwt_unix
let url = "https://api.apimart.ai/v1/responses"
let api_key = Sys.getenv "OPENAI_API_KEY"
let payload = {|{
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "What is in this image?"
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}|}
let () =
let headers = Header.init ()
|> fun h -> Header.add h "Authorization" ("Bearer " ^ api_key)
|> fun h -> Header.add h "Content-Type" "application/json"
in
let body = Cohttp_lwt.Body.of_string payload in
let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) ->
body |> Cohttp_lwt.Body.to_string >|= fun body_str ->
print_endline body_str
in
Lwt_main.run response
import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://api.apimart.ai/v1/responses');
final apiKey = Platform.environment['OPENAI_API_KEY'];
final payload = {
'model': 'gpt-5.2-pro',
'input': [
{
'role': 'user',
'content': [
{
'type': 'input_text',
'text': 'What is in this image?'
},
{
'type': 'input_image',
'image_url': 'https://openai-documentation.vercel.app/images/cat_and_otter.png'
}
]
}
]
};
final response = await http.post(
url,
headers: {
'Authorization': 'Bearer $apiKey',
'Content-Type': 'application/json',
},
body: jsonEncode(payload),
);
print(response.body);
}
library(httr)
library(jsonlite)
url <- "https://api.apimart.ai/v1/responses"
api_key <- Sys.getenv("OPENAI_API_KEY")
payload <- list(
model = "gpt-5.2-pro",
input = list(
list(
role = "user",
content = list(
list(
type = "input_text",
text = "What is in this image?"
),
list(
type = "input_image",
image_url = "https://openai-documentation.vercel.app/images/cat_and_otter.png"
)
)
)
)
)
response <- POST(
url,
add_headers(
Authorization = paste("Bearer", api_key),
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"id": "resp-9876543210",
"object": "response",
"created_at": 1677652288,
"status": "completed",
"model": "gpt-5.2-pro",
"output": [
{
"id": "msg_9876543210",
"type": "message",
"status": "completed",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "This image shows a cat and an otter. They appear to be interacting with each other in a very cute and heartwarming scene. The cat and otter seem to be getting along well.",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 156,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens": 45,
"total_tokens": 201
}
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient account balance, please top up and try again",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "Access forbidden, you do not have permission to access this resource",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later",
"type": "server_error"
}
}
{
"error": {
"code": 502,
"message": "Gateway error, server temporarily unavailable",
"type": "bad_gateway"
}
}
curl https://api.apimart.ai/v1/responses \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "What is in this image?"
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}'
import requests
import os
url = "https://api.apimart.ai/v1/responses"
payload = {
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "What is in this image?"
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}
headers = {
"Authorization": f"Bearer {os.environ.get('OPENAI_API_KEY')}",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/responses";
const payload = {
model: "gpt-5.2-pro",
input: [
{
role: "user",
content: [
{
type: "input_text",
text: "What is in this image?"
},
{
type: "input_image",
image_url: "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
};
const headers = {
"Authorization": `Bearer ${process.env.OPENAI_API_KEY}`,
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"os"
)
func main() {
url := "https://api.apimart.ai/v1/responses"
payload := map[string]interface{}{
"model": "gpt-5.2-pro",
"input": []map[string]interface{}{
{
"role": "user",
"content": []map[string]string{
{
"type": "input_text",
"text": "What is in this image?",
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png",
},
},
},
},
}
jsonData, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
req.Header.Set("Authorization", "Bearer "+os.Getenv("OPENAI_API_KEY"))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := ioutil.ReadAll(resp.Body)
fmt.Println(string(body))
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;
public class Main {
public static void main(String[] args) throws Exception {
String url = "https://api.apimart.ai/v1/responses";
String apiKey = System.getenv("OPENAI_API_KEY");
String payload = """
{
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "What is in this image?"
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}
""";
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Authorization", "Bearer " + apiKey)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(payload))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());
}
}
<?php
$url = "https://api.apimart.ai/v1/responses";
$apiKey = getenv('OPENAI_API_KEY');
$payload = [
"model" => "gpt-5.2-pro",
"input" => [
[
"role" => "user",
"content" => [
[
"type" => "input_text",
"text" => "What is in this image?"
],
[
"type" => "input_image",
"image_url" => "https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
]
]
]
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Authorization: Bearer " . $apiKey,
"Content-Type: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>
require 'net/http'
require 'json'
require 'uri'
url = URI("https://api.apimart.ai/v1/responses")
api_key = ENV['OPENAI_API_KEY']
payload = {
model: "gpt-5.2-pro",
input: [
{
role: "user",
content: [
{
type: "input_text",
text: "What is in this image?"
},
{
type: "input_image",
image_url: "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer #{api_key}"
request["Content-Type"] = "application/json"
request.body = payload.to_json
response = http.request(request)
puts response.body
import Foundation
let url = URL(string: "https://api.apimart.ai/v1/responses")!
let apiKey = ProcessInfo.processInfo.environment["OPENAI_API_KEY"] ?? ""
let payload: [String: Any] = [
"model": "gpt-5.2-pro",
"input": [
[
"role": "user",
"content": [
[
"type": "input_text",
"text": "What is in this image?"
],
[
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
]
]
]
]
]
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONSerialization.data(withJSONObject: payload)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Error: \(error)")
return
}
if let data = data, let responseString = String(data: data, encoding: .utf8) {
print(responseString)
}
}
task.resume()
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var url = "https://api.apimart.ai/v1/responses";
var apiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY");
var payload = @"{
""model"": ""gpt-5.2-pro"",
""input"": [
{
""role"": ""user"",
""content"": [
{
""type"": ""input_text"",
""text"": ""What is in this image?""
},
{
""type"": ""input_image"",
""image_url"": ""https://openai-documentation.vercel.app/images/cat_and_otter.png""
}
]
}
]
}";
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
var result = await response.Content.ReadAsStringAsync();
Console.WriteLine(result);
}
}
#include <stdio.h>
#include <curl/curl.h>
#include <stdlib.h>
int main(void) {
CURL *curl;
CURLcode res;
const char *api_key = getenv("OPENAI_API_KEY");
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
const char *url = "https://api.apimart.ai/v1/responses";
const char *payload = "{"
"\"model\":\"gpt-5.2-pro\","
"\"input\":[{\"role\":\"user\",\"content\":[{\"type\":\"input_text\",\"text\":\"What is in this image?\"},{\"type\":\"input_image\",\"image_url\":\"https://openai-documentation.vercel.app/images/cat_and_otter.png\"}]}]"
"}";
char auth_header[256];
snprintf(auth_header, sizeof(auth_header), "Authorization: Bearer %s", api_key);
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, auth_header);
headers = curl_slist_append(headers, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
fprintf(stderr, "curl_easy_perform() failed: %s\n",
curl_easy_strerror(res));
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
return 0;
}
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSURL *url = [NSURL URLWithString:@"https://api.apimart.ai/v1/responses"];
NSString *apiKey = [NSProcessInfo processInfo].environment[@"OPENAI_API_KEY"];
NSDictionary *payload = @{
@"model": @"gpt-5.2-pro",
@"input": @[
@{
@"role": @"user",
@"content": @[
@{
@"type": @"input_text",
@"text": @"What is in this image?"
},
@{
@"type": @"input_image",
@"image_url": @"https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
};
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:payload
options:0
error:&error];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:[NSString stringWithFormat:@"Bearer %@", apiKey]
forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:jsonData];
NSURLSessionDataTask *task = [[NSURLSession sharedSession]
dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
return;
}
NSString *result = [[NSString alloc] initWithData:data
encoding:NSUTF8StringEncoding];
NSLog(@"%@", result);
}];
[task resume];
[[NSRunLoop mainRunLoop] run];
}
return 0;
}
(* Requires cohttp and yojson libraries *)
open Lwt
open Cohttp
open Cohttp_lwt_unix
let url = "https://api.apimart.ai/v1/responses"
let api_key = Sys.getenv "OPENAI_API_KEY"
let payload = {|{
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "What is in this image?"
},
{
"type": "input_image",
"image_url": "https://openai-documentation.vercel.app/images/cat_and_otter.png"
}
]
}
]
}|}
let () =
let headers = Header.init ()
|> fun h -> Header.add h "Authorization" ("Bearer " ^ api_key)
|> fun h -> Header.add h "Content-Type" "application/json"
in
let body = Cohttp_lwt.Body.of_string payload in
let response = Client.post ~headers ~body (Uri.of_string url) >>= fun (resp, body) ->
body |> Cohttp_lwt.Body.to_string >|= fun body_str ->
print_endline body_str
in
Lwt_main.run response
import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
void main() async {
final url = Uri.parse('https://api.apimart.ai/v1/responses');
final apiKey = Platform.environment['OPENAI_API_KEY'];
final payload = {
'model': 'gpt-5.2-pro',
'input': [
{
'role': 'user',
'content': [
{
'type': 'input_text',
'text': 'What is in this image?'
},
{
'type': 'input_image',
'image_url': 'https://openai-documentation.vercel.app/images/cat_and_otter.png'
}
]
}
]
};
final response = await http.post(
url,
headers: {
'Authorization': 'Bearer $apiKey',
'Content-Type': 'application/json',
},
body: jsonEncode(payload),
);
print(response.body);
}
library(httr)
library(jsonlite)
url <- "https://api.apimart.ai/v1/responses"
api_key <- Sys.getenv("OPENAI_API_KEY")
payload <- list(
model = "gpt-5.2-pro",
input = list(
list(
role = "user",
content = list(
list(
type = "input_text",
text = "What is in this image?"
),
list(
type = "input_image",
image_url = "https://openai-documentation.vercel.app/images/cat_and_otter.png"
)
)
)
)
)
response <- POST(
url,
add_headers(
Authorization = paste("Bearer", api_key),
`Content-Type` = "application/json"
),
body = toJSON(payload, auto_unbox = TRUE),
encode = "raw"
)
cat(content(response, "text"))
{
"id": "resp-9876543210",
"object": "response",
"created_at": 1677652288,
"status": "completed",
"model": "gpt-5.2-pro",
"output": [
{
"id": "msg_9876543210",
"type": "message",
"status": "completed",
"role": "assistant",
"content": [
{
"type": "output_text",
"text": "This image shows a cat and an otter. They appear to be interacting with each other in a very cute and heartwarming scene. The cat and otter seem to be getting along well.",
"annotations": []
}
]
}
],
"usage": {
"input_tokens": 156,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens": 45,
"total_tokens": 201
}
}
{
"error": {
"code": 400,
"message": "Invalid request parameters",
"type": "invalid_request_error"
}
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient account balance, please top up and try again",
"type": "payment_required"
}
}
{
"error": {
"code": 403,
"message": "Access forbidden, you do not have permission to access this resource",
"type": "permission_error"
}
}
{
"error": {
"code": 429,
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}
{
"error": {
"code": 500,
"message": "Internal server error, please try again later",
"type": "server_error"
}
}
{
"error": {
"code": 502,
"message": "Gateway error, server temporarily unavailable",
"type": "bad_gateway"
}
}
Authorizations
string
required
##All APIs require Bearer Token authentication##Get API Key:Visit the API Key Management Page to get your API KeyAdd to request header:
Authorization: Bearer YOUR_API_KEY
Body
string
default:"gpt-5.2-pro"
required
Model nameSupported models include:
gpt-5.2-progpt-5.2-codexqwen3.8-max- More models coming soon…
array
required
Input content listInput array, each item contains
role and content fields.💡 Quick fill (Try it area):- Click ”+ Add an item” to add an input item
roleinput:user(user message),assistant(AI response), orsystem(system prompt)contentadd content blocks (can include text and images)
Show Field details
Show Field details
string
default:"user"
required
Role typeOptions:
user (user message), assistant (AI response, for multi-turn), system (system prompt, to set AI behavior)array
required
Content arraySupports multiple types of content blocks, can include text and images.
Show Content block types
Show Content block types
string
required
Content typeOptions:
input_text: Text inputinput_image: Image input
string
Text contentUsed when
type is input_text, fill in the text contentobject
Mark the end of a reusable
input_text block with {"mode": "explicit"}. Without a separate breakpoint TTL, it inherits prompt_cache_options.ttl. The cacheable prefix must contain at least 1,024 tokens.string
Image URLUsed when
type is input_image, fill in the image URL or base64 encodingSupports two formats:1. Full image URL- Publicly accessible image URL (http:// or https://)
- Example:
https://example.com/image.jpg
- Must use the complete Data URI format
- Format:
data:image/{format};base64,{base64_data} - Supported image formats: jpeg, png, gif, webp
object
OpenAI prompt cache options for GPT-5.6 and later models that support this feature. 12-hour caching is available only through the Responses API.
For complete requests, see the OpenAI Context Caching Guide.
Show Cache options
Show Cache options
string
default:"30m"
30m: a minimum lifetime of 30 minutes, the default. 12h: a minimum lifetime of 12 hours.string
default:"implicit"
implicit: automatically select cache breakpoints, the default. explicit: use only prompt_cache_breakpoint markers on content blocks; without a marker, no cache reads or writes occur.number
Controls output randomness, range 0-2
- Lower values (e.g. 0.2) make output more deterministic
- Higher values (e.g. 1.8) make output more random
integer
Maximum number of tokens to generateDifferent models have different maximum limits, please refer to specific model documentation
boolean
Whether to use streaming output
true: Stream response (SSE format)false: Return complete response at once
number
Nucleus sampling parameter, range 0-1Controls diversity of generated text, recommended to use with temperature alternativelyDefault: 1.0
array
Tools list for extending model capabilitiesSupported tool types:
- Web Search (
web_search): Real-time internet information search - File Search (
file_search): Search uploaded file content - Function Calling (
function): Call custom functions - Remote MCP (
remote_mcp): Connect to remote Model Context Protocol services
[{"type": "web_search"}]Response
A non-streaming request returns a Response object directly. The main fields are listed below; examples omit unrelated fields. Read generated content fromoutput and usage from the top-level usage object.
string
Unique identifier for the response
string
Object type, fixed as
responseinteger
Creation timestamp
string
Actual model name used
string
Response status, such as
completed, incomplete, or failed.array
An array of output items that can include messages, reasoning, and tool calls. To read text, select items with
type: "message", then read text from their content blocks with type: "output_text". Do not assume the first output item contains text.object
Token usage statistics
Show Properties
Show Properties
integer
Total input tokens, including ordinary input, cache reads, and cache writes.
object
Input token details. Cache-write and TTL breakdown fields apply to GPT-5.6 and later models that support this feature. Parse the fields available in the actual response.
Show Properties
Show Properties
integer
Tokens read from the cache, already included in
input_tokens.integer
Total cache-write tokens, already included in
input_tokens. When the TTL breakdown is available, this equals the sum of both write counts.integer
Total output tokens.
integer
Total tokens, equal to
input_tokens + output_tokens.Cache usage example and token counting
This response excerpt shows onlyusage for an OpenAI model that supports caching, with writes at both TTLs. Actual counts depend on the response.
{
"usage": {
"input_tokens": 12000,
"input_tokens_details": {
"cached_tokens": 4000,
"cache_write_tokens": 7000,
"cache_write_tokens_details": {
"ttl_30m_tokens": 5000,
"ttl_12h_tokens": 2000
}
},
"output_tokens": 1000,
"total_tokens": 13000
}
}
input_tokens - input_tokens_details.cached_tokens - input_tokens_details.cache_write_tokens
cache_write_tokens = ttl_30m_tokens + ttl_12h_tokens
total_tokens = input_tokens + output_tokens
input_tokens. The two TTL counts are components of cache_write_tokens: do not add the total and its components again, or add cache reads and writes to total input.
Here, ordinary input is 12000 - 4000 - 7000 = 1000, writes are 5000 + 2000 = 7000, and total tokens are 12000 + 1000 = 13000.
Usage Examples
Text-Only Input
{
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "Hello, introduce artificial intelligence"
}
]
}
]
}
Using Web Search Tool
{
"model": "gpt-5.2-pro",
"tools": [{"type": "web_search"}],
"input": "What positive news is there today?"
}
cURL Example
curl "https://api.apimart.ai/v1/responses" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token>" \
-d '{
"model": "gpt-5.2-pro",
"tools": [{"type": "web_search"}],
"input": "What positive news is there today?"
}'
Image Understanding
{
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "Describe this image"
},
{
"type": "input_image",
"image_url": "https://example.com/image.jpg"
}
]
}
]
}
Multi-Image Analysis
{
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "Compare the similarities and differences of these two images"
},
{
"type": "input_image",
"image_url": "https://example.com/image1.jpg"
},
{
"type": "input_image",
"image_url": "https://example.com/image2.jpg"
}
]
}
]
}
Base64 Encoded Image
{
"model": "gpt-5.2-pro",
"input": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "Analyze this image"
},
{
"type": "input_image",
"image_url": "data:image/jpeg;base64,/9j/4AAQSkZJRg..."
}
]
}
]
}
Using File Search Tool
{
"model": "gpt-5.2-pro",
"tools": [{"type": "file_search"}],
"input": "Based on uploaded documents, summarize the company's quarterly performance"
}
Using Function Calling
{
"model": "gpt-5.2-pro",
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get weather information for a specified city",
"parameters": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "City name, e.g.: Beijing"
},
"unit": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "Temperature unit"
}
},
"required": ["city"]
}
}
}
],
"input": "What's the weather like in Beijing today?"
}
Using Remote MCP
{
"model": "gpt-5.2-pro",
"tools": [
{
"type": "remote_mcp",
"remote_mcp": {
"url": "https://mcp.example.com/api",
"auth_token": "your_mcp_token"
}
}
],
"input": "Query user information in the database"
}
Combining Multiple Tools
{
"model": "gpt-5.2-pro",
"tools": [
{"type": "web_search"},
{"type": "file_search"},
{
"type": "function",
"function": {
"name": "calculate",
"description": "Perform mathematical calculations",
"parameters": {
"type": "object",
"properties": {
"expression": {
"type": "string",
"description": "Mathematical expression"
}
},
"required": ["expression"]
}
}
}
],
"input": "Search for the latest Bitcoin price and calculate the total value of 100 Bitcoins"
}
Content Type Specifications
input_text
Text input type Properties:type: Fixed as"input_text"text: Text content (string)
input_image
Image input type Properties:type: Fixed as"input_image"image_url: Image URL or Base64 encoded data URI
- JPEG
- PNG
- GIF
- WebP
- Maximum file size: 20MB
- Recommended aspect_ratio: No more than 2048x2048 pixels
Tool Usage Details
Web Search
The web search tool allows the model to access real-time internet information. Configuration example:{
"tools": [{"type": "web_search"}]
}
- Query latest news and current events
- Get real-time data (stocks, weather, exchange rates, etc.)
- Search for latest technical documentation
- Verify factual information
File Search
The file search tool allows the model to search for relevant information in uploaded documents. Configuration example:{
"tools": [{"type": "file_search"}]
}
- Analyze internal corporate documents
- Search technical specifications and manuals
- Query contracts and legal documents
- Knowledge base Q&A systems
Function Calling
Define custom functions to enable the model to call external APIs or perform specific operations. Complete configuration example:{
"tools": [
{
"type": "function",
"function": {
"name": "get_stock_price",
"description": "Get real-time stock price",
"parameters": {
"type": "object",
"properties": {
"symbol": {
"type": "string",
"description": "Stock symbol, e.g.: AAPL"
},
"currency": {
"type": "string",
"enum": ["USD", "CNY"],
"description": "Currency unit",
"default": "USD"
}
},
"required": ["symbol"]
}
}
}
]
}
name: Function name (required)description: Function description (required)parameters: Parameter definition using JSON Schema formattype: Parameter typeproperties: Parameter property definitionsrequired: List of required parameters
- Call third-party APIs
- Execute database queries
- Trigger business processes
- Integrate with internal systems
Remote MCP
Connect to remote Model Context Protocol (MCP) services to extend model capabilities. Configuration example:{
"tools": [
{
"type": "remote_mcp",
"remote_mcp": {
"url": "https://your-mcp-server.com/api",
"auth_token": "your_auth_token",
"timeout": 30
}
}
]
}
url: MCP server address (required)auth_token: Authentication token (optional)timeout: Timeout in seconds, default 30 seconds
- Connect to enterprise-level AI services
- Use domain-specific models
- Access protected data sources
- Distributed AI system integration
Tool Response Format
When the model uses tools, the response format will include tool call information:{
"id": "resp-123456",
"object": "response",
"created_at": 1677652288,
"status": "completed",
"model": "gpt-5.2-pro",
"output": [
{
"id": "fc_abc123",
"type": "function_call",
"status": "completed",
"call_id": "call_abc123",
"name": "get_weather",
"arguments": "{\"city\": \"Beijing\"}"
}
]
}
function_call items in output. After execution, send the result in a function_call_output input item, using the same call_id to associate it with the call.
Tool call workflow:
- Model receives user input
- Analyzes whether tools are needed
- If needed, returns tool call request
- Client executes tool call
- Returns tool results to model
- Model generates final response
Important Notes
-
Image URL requirements:
- Must be a publicly accessible URL
- Or use Base64 encoded Data URI format
-
Token billing:
- Images consume tokens based on their aspect_ratio
- High-aspect_ratio images are automatically resized to optimize costs
- Tool calls also consume additional tokens
-
Content order:
- Order of elements in content array affects model understanding
- Recommended to place text instructions first, then images
-
Multimodal combinations:
- Can mix multiple texts and images in one request
- Supports multi-turn conversations with context coherence
-
Tool usage limitations:
- When using multiple tools simultaneously, the model intelligently selects the most appropriate tool
- Function calling requires clear function definitions and parameter descriptions
- Web search results may be limited by region and time
-
API compatibility:
- Fully compatible with OpenAI Responses API format
- Seamlessly migrate existing OpenAI code
- Supports all OpenAI tool extension features