Ideal House
Passa al contenuto

Documentazione API di ristrutturazione degli esterni#

URL di base: https://api.ideal.house
Versione: v1
Aggiornato: 2026-05-20


📖 Panoramica#

API di ristrutturazione degli esterni consente di rinnovare o cambiare lo stile dell'esterno di un edificio a partire da un'immagine. Fornisci un'immagine originale e, facoltativamente, aggiungi indicazioni testuali, un'immagine di riferimento, uno stile architettonico o una preferenza ambientale per orientare il risultato della ristrutturazione.

Il flusso di lavoro è asincrono e prevede due passaggi:

  1. Crea un'attività — Invia l'immagine dell'esterno e le indicazioni facoltative, quindi ricevi un taskId.
  2. Interroga periodicamente i risultati — Usa il taskId per interrogare lo stato dell'attività e recuperare l'immagine generata.

🔐 Autenticazione#

Tutte le richieste API devono essere autenticate con una chiave API.

Includi la chiave API nell'intestazione della richiesta:

IntestazioneValore
APIKEYyour_api_key_here

⚠️ Conserva la chiave API in sicurezza. Non esporla nel codice lato client o in repository pubblici.


💰 Detrazione dei crediti#

[!WARNING] 🪙 1 credito viene detratto alla creazione riuscita dell'attività. Se alla fine l'attività non riesce, il credito detratto viene rimborsato automaticamente sul tuo account.
Un saldo di crediti insufficiente restituisce il codice di errore 9051. 📄 Consulta il Riferimento delle detrazioni dei crediti.

OperazioneCrediti detratti
Attività di ristrutturazione degli esterni1 credito

Per le regole dettagliate sui crediti, consulta il Riferimento delle detrazioni dei crediti.


📌 Endpoint API#


1. Crea un'attività di ristrutturazione degli esterni#

Crea una nuova attività di ristrutturazione degli esterni e restituisce un taskId univoco per le interrogazioni periodiche.

Endpoint

Testo semplice
POST /api/v1/exteriorRenovator/generate

Intestazioni della richiesta

IntestazioneObbligatoriaDescrizione
APIKEY✅ SìLa tua chiave di autenticazione API
Content-Type✅ Sìapplication/json

Corpo della richiesta

CampoTipoObbligatorioDescrizione
imageUrlstring✅ SìURL dell'immagine originale dell'esterno da ristrutturare
promptstring❌ FacoltativoIndicazioni testuali facoltative per il risultato della ristrutturazione
referenceUrlstring❌ FacoltativoURL facoltativa di un'immagine di riferimento per orientare lo stile visivo
buildingStyleIdstring❌ FacoltativoIdentificatore facoltativo dello stile architettonico
environmentIdstring❌ FacoltativoIdentificatore facoltativo dello stile dell'ambiente o della scena. Supporta più identificatori uniti da virgole, ad esempio id1,id2

⚠️ Soltanto imageUrl è obbligatorio. Tutti gli altri campi del corpo della richiesta sono facoltativi.

🖼️ Requisiti delle immagini: tutte le immagini originali e di riferimento devono usare JPG/JPEG, PNG o WebP. Ogni immagine non deve superare 20 MB, con dimensioni da 128 × 128 px fino a 6,000 × 6,000 px (estremi inclusi). Prima dell'elaborazione, le immagini che superano le dimensioni massime in pixel vengono ridotte automaticamente in modo proporzionale per rientrare in 6,000 × 6,000 px. Le URLs delle immagini devono essere direttamente accessibili dal server API.


🎨 Opzioni di stile#

buildingStyleId e environmentId possono essere selezionati dall'endpoint Configurazione degli stili API.

Usa:

Testo semplice
GET /api/v1/style/exterior_renovator/getStyles
Gruppo di stileCampo della richiestaDescrizione
buildingStylebuildingStyleIdOpzione dello stile architettonico
environmentenvironmentIdOpzione dell'ambiente o della scena. Supporta più identificatori di opzione uniti da virgole, ad esempio id1,id2

Ogni opzione contiene name, id e url. Passa l'id dell'opzione nel campo corrispondente della richiesta.


📥 Esempi di richiesta#

cURL
bash
# Minimal request
curl -X POST "https://api.ideal.house/api/v1/exteriorRenovator/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/exterior.jpg"
  }'

# Request with optional guidance
curl -X POST "https://api.ideal.house/api/v1/exteriorRenovator/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "imageUrl": "https://example.com/exterior.jpg",
    "prompt": "Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping",
    "referenceUrl": "https://example.com/reference-house.jpg",
    "buildingStyleId": "modern-farmhouse",
    "environmentId": "Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day"
  }'
Java (OkHttp)
java
import okhttp3.*;

import java.io.IOException;

public class ExteriorRenovatorApiExample {

    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/exterior.jpg",
                    "prompt": "Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping",
                    "referenceUrl": "https://example.com/reference-house.jpg",
                    "buildingStyleId": "modern-farmhouse",
                    "environmentId": "Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day"
                }
                """;

        Request request = new Request.Builder()
                .url(BASE_URL + "/api/v1/exteriorRenovator/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)
python
import requests

BASE_URL = "https://api.ideal.house"
API_KEY = "your_api_key_here"

headers = {
    "APIKEY": API_KEY,
    "Content-Type": "application/json"
}

payload = {
    "imageUrl": "https://example.com/exterior.jpg",
    "prompt": "Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping",
    "referenceUrl": "https://example.com/reference-house.jpg",
    "buildingStyleId": "modern-farmhouse",
    "environmentId": "Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day"
}

response = requests.post(
    f"{BASE_URL}/api/v1/exteriorRenovator/generate",
    headers=headers,
    json=payload
)

data = response.json()
task_id = data.get("data")
print(f"Task ID: {task_id}")
Node.js (axios)
javascript
const axios = require('axios');

const BASE_URL = 'https://api.ideal.house';
const API_KEY = 'your_api_key_here';

async function createExteriorRenovatorTask() {
  try {
    const response = await axios.post(
      `${BASE_URL}/api/v1/exteriorRenovator/generate`,
      {
        imageUrl: 'https://example.com/exterior.jpg',
        prompt: 'Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping',
        referenceUrl: 'https://example.com/reference-house.jpg',
        buildingStyleId: 'modern-farmhouse',
        environmentId: 'Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day'
      },
      {
        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);
  }
}

createExteriorRenovatorTask();

📤 Risposta#

Risposta di successo

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
CampoTipoDescrizione
codeinteger0 indica il successo
messagestringMessaggio della risposta
datalongIdentificatore univoco dell'attività per interrogare periodicamente i risultati

2. Ottieni il risultato dell'attività#

Recupera lo stato e l'output correnti di un'attività di ristrutturazione degli esterni creata in precedenza.

Endpoint

Testo semplice
GET /api/v1/exteriorRenovator/result

Intestazioni della richiesta

IntestazioneObbligatoriaDescrizione
APIKEY✅ SìLa tua chiave di autenticazione API

Parametri di interrogazione

ParametroTipoObbligatorioDescrizione
taskIdlong✅ SìIdentificatore dell'attività restituito dall'endpoint di creazione dell'attività

📥 Esempi di richiesta#

cURL
bash
curl -X GET "https://api.ideal.house/api/v1/exteriorRenovator/result?taskId=1234567890123456789" \
  -H "APIKEY: your_api_key_here"
Java (OkHttp)
java
import okhttp3.*;

import java.io.IOException;

public class ExteriorRenovatorResultExample {

    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/exteriorRenovator/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)
python
import requests
import time

BASE_URL = "https://api.ideal.house"
API_KEY = "your_api_key_here"

headers = {
    "APIKEY": API_KEY
}

task_id = 1234567890123456789

while True:
    response = requests.get(
        f"{BASE_URL}/api/v1/exteriorRenovator/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)

if status == "Success":
    print("Result URL:", result["output"]["resultUrl"])
else:
    print("Task failed")
Node.js (axios)
javascript
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/exteriorRenovator/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);
        console.log('Size:', result.output.width, 'x', result.output.height);
      } else {
        console.log('Task failed');
      }
      break;
    }

    await new Promise(resolve => setTimeout(resolve, 3000));
  }
}

pollResult(1234567890123456789);

📤 Risposta#

Risposta di successo (attività completata)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Success",
    "waitNumber": 0,
    "percentage": 100,
    "input": {
      "imageUrl": "https://example.com/exterior.jpg",
      "prompt": "Modern farmhouse exterior with warm wood accents, black window frames, and clean landscaping",
      "refImageUrl": "https://example.com/reference-house.jpg",
      "buildingStyleId": "modern-farmhouse",
      "environmentId": "Architecture_Enviroment_Time_Night,Architecture_Enviroment_Time_Day"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/exterior_renovator_result.jpg",
      "width": 1024,
      "height": 1024
    }
  }
}

Risposta (attività in elaborazione / in coda)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Processing",
    "waitNumber": 1,
    "percentage": 50,
    "input": {
      "imageUrl": "https://example.com/exterior.jpg"
    },
    "output": null
  }
}

Risposta (attività non riuscita)

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Failed",
    "waitNumber": 0,
    "percentage": 0,
    "input": {
      "imageUrl": "https://example.com/exterior.jpg"
    },
    "output": null
  }
}

Campi della risposta

CampoTipoDescrizione
idlongIdentificatore univoco dell'attività
statusstringStato corrente dell'attività (vedi Stato dell'attività)
waitNumberintegerNumero di attività precedenti in coda (0 significa attualmente in elaborazione)
percentageintegerPercentuale di completamento dell'attività (0–100)
inputobjectParametri di input originali dell'attività
input.imageUrlstringURL dell'immagine originale dell'esterno
input.promptstringIndicazioni testuali facoltative, se fornite
input.refImageUrlstringURL facoltativa dell'immagine di riferimento, se fornita
input.buildingStyleIdstringIdentificatore facoltativo dello stile architettonico, se fornito
input.environmentIdstringIdentificatore facoltativo dello stile dell'ambiente o della scena, se fornito. Può contenere più identificatori uniti da virgole
outputobjectRisultato della generazione (disponibile soltanto quando status è Success)
output.resultUrlstringURL dell'immagine risultante dalla ristrutturazione degli esterni
output.widthintegerLarghezza dell'output in pixel
output.heightintegerAltezza dell'output in pixel

📊 Stato dell'attività#

StatoDescrizione
UnprocessedL'attività è stata creata ma non è ancora iniziata
ProcessingL'attività è attualmente in elaborazione
SuccessL'attività è stata completata correttamente — l'output è disponibile
FailedL'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:

json
{
  "code": 5002,
  "message": "Invalid API Key",
  "data": null
}

Riferimento dei codici di errore#

CodiceNomeDescrizioneAzione suggerita
1001FAILEDRichiesta non riuscita (errore generico)Controlla il campo message per i dettagli specifici dell'errore
1003INTERNAL_ERRORErrore interno del serverRiprova dopo una breve attesa; contatta l'assistenza se il problema persiste
1011PARAM_ERRORErrore nei parametri della richiestaAssicurati che i parametri della richiesta siano formattati correttamente
5002API_KEY_INVALIDChiave API non valida o mancanteAssicurati che l'intestazione APIKEY sia presente e che il valore sia corretto
9010SCAN_TEXT_ERRORIl prompt testuale non ha superato la verifica dei contenutiModifica il prompt per rimuovere eventuali contenuti sensibili o vietati
9038PROHIBITED_CONTENTL'immagine generata contiene contenuti vietatiModifica prompt/stile/input e riprova
9051COINS_NOT_ENOUGHMonete / crediti insufficientiRicarica i crediti dell'account e riprova. Consulta il Riferimento delle detrazioni dei crediti

📄 Per l'elenco completo dei codici di errore API comuni, consulta il Riferimento dei codici di errore.