Documentazione API di generazione AI 3D#
URL di base:
https://api.ideal.house
Versione: v1
Aggiornato: 2026-03-06
📖 Panoramica#
API di generazione AI 3D consente di inviare attività di generazione 3D basate su immagini o prompt e recuperarne i risultati in modo asincrono. Il flusso di lavoro prevede due passaggi:
- Crea un'attività — Invia l'input (URL dell'immagine o prompt testuale) e ricevi un
taskId. - Interroga periodicamente i risultati — Usa il
taskIdper interrogare lo stato dell'attività e recuperare l'output generato.
🔐 Autenticazione#
Tutte le richieste API devono essere autenticate con una chiave API.
Includi la chiave API nell'intestazione della richiesta:
| Intestazione | Valore |
|---|---|
APIKEY | your_api_key_here |
⚠️ Conserva la chiave API in sicurezza. Non esporla nel codice lato client o in repository pubblici.
⚡ Limite di concorrenza#
🚦 Importante: questa API consente soltanto 1 richiesta simultanea per account alla volta.
Se vengono inviate più richieste contemporaneamente, quelle successive vengono messe in coda ed elaborate in ordine.
Puoi monitorare la posizione in coda tramite il campowaitNumbernella risposta del risultato dell'attività.
💰 Detrazione dei crediti#
[!WARNING] 🪙 Ogni attività detrae 20 crediti dal tuo account alla creazione riuscita dell'attività.
I crediti vengono detratti al momento della creazione dell'attività. Se alla fine l'attività non riesce, i crediti detratti vengono rimborsati automaticamente sul tuo account.
Un saldo di crediti insufficiente restituisce il codice di errore9051. 📄 Consulta il Riferimento delle detrazioni dei crediti.
📌 Endpoint API#
1. Crea un'attività di generazione 3D#
Crea una nuova attività di generazione AI 3D e restituisce un taskId univoco per le interrogazioni periodiche.
Endpoint
POST /api/v1/ai3d/generate
Intestazioni della richiesta
| Intestazione | Obbligatoria | Descrizione |
|---|---|---|
APIKEY | ✅ Sì | La tua chiave di autenticazione API |
Content-Type | ✅ Sì | application/json |
Corpo della richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
imageUrl | string | ⚠️ È obbligatorio uno tra imageUrl e prompt | URL dell'immagine originale da cui generare il 3D |
prompt | string | ⚠️ È obbligatorio uno tra imageUrl e prompt | Prompt testuale che descrive il contenuto 3D da generare |
💡 Nota:
imageUrlepromptsi escludono a vicenda — fornisci uno solo dei due per richiesta.
🖼️ Requisiti delle immagini: usa JPG/JPEG, PNG o WebP. Ogni immagine non deve superare 20 MB, con dimensioni da 128 × 128 px fino a 5,000 × 5,000 px (estremi inclusi). La URL dell'immagine deve essere direttamente accessibile dal server API.
📥 Esempi di richiesta#
cURL
# Using imageUrl
curl -X POST "https://api.ideal.house/api/v1/ai3d/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"imageUrl": "https://example.com/room.jpg"
}'
# Using prompt
curl -X POST "https://api.ideal.house/api/v1/ai3d/generate" \
-H "APIKEY: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"prompt": "A modern minimalist living room with wooden floor"
}'
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class Ai3dApiExample {
private static final String BASE_URL = "https://api.ideal.house";
private static final String API_KEY = "your_api_key_here";
public static void main(String[] args) throws IOException {
OkHttpClient client = new OkHttpClient();
String requestBody = """
{
"imageUrl": "https://example.com/room.jpg"
}
""";
Request request = new Request.Builder()
.url(BASE_URL + "/api/v1/ai3d/generate")
.addHeader("APIKEY", API_KEY)
.addHeader("Content-Type", "application/json")
.post(RequestBody.create(requestBody, MediaType.parse("application/json")))
.build();
try (Response response = client.newCall(request).execute()) {
System.out.println("Response: " + response.body().string());
}
}
}
Python (requests)
import requests
BASE_URL = "https://api.ideal.house"
API_KEY = "your_api_key_here"
headers = {
"APIKEY": API_KEY,
"Content-Type": "application/json"
}
# Using imageUrl
payload = {
"imageUrl": "https://example.com/room.jpg"
}
# Or using prompt
# payload = {
# "prompt": "A modern minimalist living room with wooden floor"
# }
response = requests.post(
f"{BASE_URL}/api/v1/ai3d/generate",
headers=headers,
json=payload
)
data = response.json()
task_id = data.get("data")
print(f"Task ID: {task_id}")
Node.js (axios)
const axios = require('axios');
const BASE_URL = 'https://api.ideal.house';
const API_KEY = 'your_api_key_here';
async function createTask() {
try {
const response = await axios.post(
`${BASE_URL}/api/v1/ai3d/generate`,
{
imageUrl: 'https://example.com/room.jpg'
// Or use prompt instead:
// prompt: 'A modern minimalist living room with wooden floor',
},
{
headers: {
'APIKEY': API_KEY,
'Content-Type': 'application/json'
}
}
);
const taskId = response.data.data;
console.log('Task ID:', taskId);
return taskId;
} catch (error) {
console.error('Error:', error.response?.data || error.message);
}
}
createTask();
📤 Risposta#
Risposta di successo
{
"code": 0,
"message": "success",
"data": 1234567890123456789
}
| Campo | Tipo | Descrizione |
|---|---|---|
code | integer | 0 indica il successo |
message | string | Messaggio della risposta |
data | long | Identificatore univoco dell'attività per interrogare periodicamente i risultati |
2. Ottieni il risultato dell'attività#
Recupera lo stato e l'output correnti di un'attività creata in precedenza.
Endpoint
GET /api/v1/ai3d/result
Intestazioni della richiesta
| Intestazione | Obbligatoria | Descrizione |
|---|---|---|
APIKEY | ✅ Sì | La tua chiave di autenticazione API |
Parametri di interrogazione
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
taskId | long | ✅ Sì | Identificatore dell'attività restituito dall'endpoint di creazione dell'attività |
📥 Esempi di richiesta#
cURL
curl -X GET "https://api.ideal.house/api/v1/ai3d/result?taskId=1234567890123456789" \
-H "APIKEY: your_api_key_here"
Java (OkHttp)
import okhttp3.*;
import java.io.IOException;
public class Ai3dResultExample {
private static final String BASE_URL = "https://api.ideal.house";
private static final String API_KEY = "your_api_key_here";
public static void main(String[] args) throws IOException {
OkHttpClient client = new OkHttpClient();
long taskId = 1234567890123456789L;
Request request = new Request.Builder()
.url(BASE_URL + "/api/v1/ai3d/result?taskId=" + taskId)
.addHeader("APIKEY", API_KEY)
.get()
.build();
try (Response response = client.newCall(request).execute()) {
System.out.println("Response: " + response.body().string());
}
}
}
Python (requests)
import requests
import time
BASE_URL = "https://api.ideal.house"
API_KEY = "your_api_key_here"
headers = {
"APIKEY": API_KEY
}
task_id = 1234567890123456789
# Poll until task is complete
while True:
response = requests.get(
f"{BASE_URL}/api/v1/ai3d/result",
headers=headers,
params={"taskId": task_id}
)
data = response.json()
result = data.get("data", {})
status = result.get("status")
print(f"Status: {status}, Progress: {result.get('percentage')}%, Queue: {result.get('waitNumber')}")
if status in ("Success", "Failed"):
break
time.sleep(3) # Poll every 3 seconds
if status == "Success":
print("Result URL:", result["output"]["resultUrl"])
else:
print("Task failed or terminated")
Node.js (axios)
const axios = require('axios');
const BASE_URL = 'https://api.ideal.house';
const API_KEY = 'your_api_key_here';
async function pollResult(taskId) {
const headers = { 'APIKEY': API_KEY };
while (true) {
const response = await axios.get(
`${BASE_URL}/api/v1/ai3d/result`,
{
headers,
params: { taskId }
}
);
const result = response.data.data;
const { status, percentage, waitNumber } = result;
console.log(`Status: ${status} | Progress: ${percentage}% | Queue: ${waitNumber}`);
if (['Success', 'Failed'].includes(status)) {
if (status === 'Success') {
console.log('Result URL:', result.output.resultUrl);
} else {
console.log('Task ended with status:', status);
}
break;
}
// Wait 3 seconds before next poll
await new Promise(resolve => setTimeout(resolve, 3000));
}
}
pollResult(1234567890123456789n);
📤 Risposta#
Risposta di successo (attività completata)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Success",
"waitNumber": 0,
"percentage": 100,
"input": {
"imageUrl": "https://example.com/room.jpg"
},
"output": {
"resultUrl": "https://cdn.ideal.house/output/result_3d_model.zip",
"width": 1024,
"height": 1024
}
}
}
Risposta (attività in elaborazione / in coda)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Processing",
"waitNumber": 2,
"percentage": 35,
"input": {
"imageUrl": "https://example.com/room.jpg"
},
"output": null
}
}
Risposta (attività non riuscita)
{
"code": 0,
"message": "success",
"data": {
"id": 1234567890123456789,
"status": "Failed",
"waitNumber": 0,
"percentage": 0,
"input": {
"imageUrl": "https://example.com/room.jpg"
},
"output": null
}
}
Campi della risposta
| Campo | Tipo | Descrizione |
|---|---|---|
id | long | Identificatore univoco dell'attività |
status | string | Stato corrente dell'attività (vedi Stato dell'attività) |
waitNumber | integer | Numero di attività precedenti in coda (0 significa attualmente in elaborazione) |
percentage | integer | Percentuale di completamento dell'attività (0–100) |
input | object | Parametri di input originali dell'attività |
input.imageUrl | string | URL dell'immagine originale (se fornita) |
input.prompt | string | Prompt testuale originale (se fornito) |
input.modelType | string | Tipo di modello usato |
output | object | Risultato della generazione (disponibile soltanto quando status è Success) |
output.resultUrl | string | URL del file del modello 3D generato |
output.width | integer | Larghezza dell'output in pixel |
output.height | integer | Altezza dell'output in pixel |
📊 Stato dell'attività#
| Stato | Descrizione |
|---|---|
Unprocessed | L'attività è stata creata ma non è ancora iniziata |
Processing | L'attività è attualmente in elaborazione |
Success | L'attività è stata completata correttamente — l'output è disponibile |
Failed | L'attività non è riuscita a causa di un errore |
Interroga lo stato ogni 3-5 secondi. Consulta i Limiti delle attività API.
❌ Risposte di errore#
Tutte le risposte di errore condividono la stessa struttura JSON:
{
"code": 5002,
"message": "Invalid API Key",
"data": null
}
Riferimento dei codici di errore#
| Codice | Nome | Descrizione | Azione suggerita |
|---|---|---|---|
1001 | FAILED | Richiesta non riuscita (errore generico) | Controlla il campo message per i dettagli specifici dell'errore |
1003 | INTERNAL_ERROR | Errore interno del server | Riprova dopo una breve attesa; contatta l'assistenza se il problema persiste |
1011 | PARAM_ERROR | Errore nei parametri della richiesta | Verifica che tutti i parametri obbligatori siano forniti e formattati correttamente |
5002 | API_KEY_INVALID | Chiave API non valida o mancante | Assicurati che l'intestazione APIKEY sia presente e che il valore sia corretto |
9010 | SCAN_TEXT_ERROR | Il prompt testuale non ha superato la verifica dei contenuti | Modifica il prompt per rimuovere eventuali contenuti sensibili o vietati |
9038 | PROHIBITED_CONTENT | L'immagine generata contiene contenuti vietati | Modifica prompt/stile/input e riprova |
9036 | COVERT_3D_FAILED | Questa immagine non supporta la generazione 3D | Prova un'altra immagine con struttura e profondità più chiare |
9051 | COINS_NOT_ENOUGH | Monete / crediti insufficienti | Ricarica i crediti dell'account e riprova |
Esempi di risposte di errore#
5002 — Chiave API non valida
{
"code": 5002,
"message": "Invalid API Key",
"data": null
}
1011 — Errore nei parametri
{
"code": 1011,
"message": "Request parameter error: imageUrl is required",
"data": null
}
9036 — Immagine non supportata per la generazione 3D
{
"code": 9036,
"message": "This image does not support 3D generation",
"data": null
}
9010 — Moderazione del contenuto testuale non superata
{
"code": 9010,
"message": "Text prompt failed content review, contains prohibited content",
"data": null
}
9051 — Crediti insufficienti
{
"code": 9051,
"message": "Insufficient coins",
"data": null
}
📄 Per l'elenco completo dei codici di errore API comuni, consulta il Riferimento dei codici di errore.