curl --request POST \
--url https://api.budgetpixel.com/v1/3d/meshy-7.1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"image": "<string>",
"animation": false,
"rigging": false,
"texture": true
}
'import requests
url = "https://api.budgetpixel.com/v1/3d/meshy-7.1"
payload = {
"image": "<string>",
"animation": False,
"rigging": False,
"texture": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({image: '<string>', animation: false, rigging: false, texture: true})
};
fetch('https://api.budgetpixel.com/v1/3d/meshy-7.1', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.budgetpixel.com/v1/3d/meshy-7.1",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'image' => '<string>',
'animation' => false,
'rigging' => false,
'texture' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.budgetpixel.com/v1/3d/meshy-7.1"
payload := strings.NewReader("{\n \"image\": \"<string>\",\n \"animation\": false,\n \"rigging\": false,\n \"texture\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.budgetpixel.com/v1/3d/meshy-7.1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"image\": \"<string>\",\n \"animation\": false,\n \"rigging\": false,\n \"texture\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.budgetpixel.com/v1/3d/meshy-7.1")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"image\": \"<string>\",\n \"animation\": false,\n \"rigging\": false,\n \"texture\": true\n}"
response = http.request(request)
puts response.read_body{
"credits": 123,
"id": "<string>",
"message": "<string>",
"model": "<string>",
"status": "pending"
}{
"error": {
"code": "model_not_available",
"message": "<string>",
"type": "invalid_request_error"
}
}{
"error": {
"code": "model_not_available",
"message": "<string>",
"type": "invalid_request_error"
}
}{
"error": {
"code": "model_not_available",
"message": "<string>",
"type": "invalid_request_error"
}
}{
"error": {
"code": "model_not_available",
"message": "<string>",
"type": "invalid_request_error"
}
}Generate a 3D model with Meshy 7.1
Image to 3D: a light textured model (~30K triangles) in GLB, FBX, USDZ and STL, optionally rigged and animated for humanoid characters. About 2 minutes. 1600 credits textured.
Asynchronous. Returns a job id (the model is not in this response). Poll GET /v1/3d/{id} every 15-30 seconds until status is succeeded (usually 2-5 minutes) — the GLB is that response’s model_url and every format is in files. Charged on success only; POST /v1/cost quotes the exact price for your options.
curl --request POST \
--url https://api.budgetpixel.com/v1/3d/meshy-7.1 \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"image": "<string>",
"animation": false,
"rigging": false,
"texture": true
}
'import requests
url = "https://api.budgetpixel.com/v1/3d/meshy-7.1"
payload = {
"image": "<string>",
"animation": False,
"rigging": False,
"texture": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({image: '<string>', animation: false, rigging: false, texture: true})
};
fetch('https://api.budgetpixel.com/v1/3d/meshy-7.1', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.budgetpixel.com/v1/3d/meshy-7.1",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'image' => '<string>',
'animation' => false,
'rigging' => false,
'texture' => true
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.budgetpixel.com/v1/3d/meshy-7.1"
payload := strings.NewReader("{\n \"image\": \"<string>\",\n \"animation\": false,\n \"rigging\": false,\n \"texture\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.budgetpixel.com/v1/3d/meshy-7.1")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"image\": \"<string>\",\n \"animation\": false,\n \"rigging\": false,\n \"texture\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.budgetpixel.com/v1/3d/meshy-7.1")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"image\": \"<string>\",\n \"animation\": false,\n \"rigging\": false,\n \"texture\": true\n}"
response = http.request(request)
puts response.read_body{
"credits": 123,
"id": "<string>",
"message": "<string>",
"model": "<string>",
"status": "pending"
}{
"error": {
"code": "model_not_available",
"message": "<string>",
"type": "invalid_request_error"
}
}{
"error": {
"code": "model_not_available",
"message": "<string>",
"type": "invalid_request_error"
}
}{
"error": {
"code": "model_not_available",
"message": "<string>",
"type": "invalid_request_error"
}
}{
"error": {
"code": "model_not_available",
"message": "<string>",
"type": "invalid_request_error"
}
}Authorizations
API key as a bearer token: Authorization: Bearer bpx_live_xxx
Body
The picture to turn into a 3D model: a public URL, a data URI, raw base64, or a URL from POST /v1/uploads.
Also return an animated model (+160 credits). Needs rigging.
Rig a humanoid character with walk and run clips (+270 credits). Humanoid characters only.
Paint the model (true) or return the plain shape (false, 1080 credits).
Response
Job accepted.
Credits this job will charge on success (held until it finishes).
Opaque job id — use it to poll status.
Lifecycle state. succeeded/failed/timeout are terminal.
pending, starting, processing, completing, succeeded, failed, timeout