
Aggiornamento 2026: Z-Image API su PoYo costa 2 crediti per generazione, circa $0.01. Alimentato dall'architettura S3-DiT di Alibaba, offre una generazione rapida di immagini per flussi di lavoro di produzione leggeri e questa guida illustra l'integrazione con l'API di PoYo.
Iniziare con Z-Image API
Passaggio 1: configura il tuo account PoYo
Innanzitutto, crea il tuo account PoYo e ottieni le tue credenziali API:
- Iscriviti su PoYo.ai
- Genera la tua chiave API nel dashboard
- Aggiungi crediti al tuo account (Z-Image costa 2 crediti per generazione)
Passaggio 2: installa le dipendenze richieste
# For Node.js/JavaScript
npm install axios
# For Python
pip install requests
# For cURL (no installation needed)
Generazione di base da testo a immagine
Implementazione JavaScript/Node.js
const axios = require('axios');
const generateImage = async (prompt, size = '1:1') => {
try {
const response = await axios.post(
'https://api.poyo.ai/api/generate/submit',
{
model: 'z-image',
callback_url: 'https://your-domain.com/callback', // Optional webhook
input: {
prompt: prompt,
size: size // Options: '1:1', '4:3', '3:4', '16:9', '9:16'
}
},
{
headers: {
'Authorization': `Bearer YOUR_API_KEY`,
'Content-Type': 'application/json'
}
}
);
console.log('Task ID:', response.data.data.task_id);
console.log('Status:', response.data.data.status);
console.log('Created:', response.data.data.created_time);
return response.data.data;
} catch (error) {
console.error('Error generating image:', error.response?.data || error.message);
}
};
// Example usage
generateImage('A futuristic city skyline at sunset with flying cars', '16:9');
Implementazione Python
import requests
import json
def generate_image(prompt, api_key, size='1:1'):
url = "https://api.poyo.ai/api/generate/submit"
payload = {
"model": "z-image",
"callback_url": "https://your-domain.com/callback", # Optional webhook
"input": {
"prompt": prompt,
"size": size # Options: '1:1', '4:3', '3:4', '16:9', '9:16'
}
}
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
try:
response = requests.post(url, json=payload, headers=headers)
response.raise_for_status()
result = response.json()
print(f"Task ID: {result['data']['task_id']}")
print(f"Status: {result['data']['status']}")
print(f"Created: {result['data']['created_time']}")
return result['data']
except requests.exceptions.RequestException as e:
print(f"Error generating image: {e}")
return None
# Example usage
api_key = "YOUR_API_KEY"
result = generate_image("A serene mountain landscape with crystal clear lake", api_key, '16:9')
Implementazione cURL
curl -X POST "https://api.poyo.ai/api/generate/submit" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "z-image",
"callback_url": "https://your-domain.com/callback",
"input": {
"prompt": "A professional headshot of a confident business woman in modern office setting",
"size": "1:1"
}
}'
Parametri API
Corpo della richiesta
| Parametro | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
model | stringa | Sì | Deve essere "z-image" |
callback_url | stringa | No | Webhook URL per notifiche asincrone |
input.prompt | stringa | Sì | Descrizione testuale (massimo 1000 caratteri) |
input.size | stringa | Sì | Proporzioni: 1:1, 4:3, 3:4, 16:9, 9:16 |
Formato della risposta
{
"code": 200,
"data": {
"task_id": "task-unified-1757165031-uyujaw3d",
"status": "not_started",
"created_time": "2026-06-12T10:30:00"
}
}
Guida alle proporzioni
Scegli la dimensione giusta per il tuo caso d'uso:
const sizeGuide = {
'1:1': 'Square - Social media posts, profile images, thumbnails',
'4:3': 'Landscape - Presentations, web content, traditional photos',
'3:4': 'Portrait - Mobile content, portrait photography',
'16:9': 'Widescreen - Video thumbnails, banners, hero images',
'9:16': 'Vertical - Stories, reels, mobile-first content'
};
// Generate images for different platforms
const generateForPlatform = async (prompt, platform) => {
const platformSizes = {
instagram_post: '1:1',
instagram_story: '9:16',
youtube_thumbnail: '16:9',
twitter_header: '16:9',
linkedin_post: '4:3'
};
return generateImage(prompt, platformSizes[platform]);
};
Gestione dei risultati con i webhook
Z-Image API utilizza webhook per la consegna dei risultati. Configura un endpoint webhook per ricevere i risultati:
Configurazione dell'endpoint webhook
// Express.js webhook handler
const express = require('express');
const app = express();
app.use(express.json());
// Webhook endpoint to receive results
app.post('/webhook/callback', (req, res) => {
const { task_id, status, files } = req.body;
console.log(`Task ${task_id} status: ${status}`);
if (status === 'finished' && files && files.length > 0) {
console.log('Generated image URL:', files[0].file_url);
// Process the completed image
processGeneratedImage(task_id, files[0].file_url);
} else if (status === 'failed') {
console.error('Generation failed for task:', task_id);
handleGenerationError(task_id);
}
res.status(200).send('OK');
});
const processGeneratedImage = (taskId, imageUrl) => {
// Your logic to handle the completed image
console.log(`Processing image from task ${taskId}: ${imageUrl}`);
};
app.listen(3000, () => {
console.log('Webhook server running on port 3000');
});
Alternativa: controllo manuale dello stato
Se preferisci non utilizzare i webhook, puoi eseguire il polling dello stato dell'attività:
const checkTaskStatus = async (taskId) => {
try {
const response = await axios.get(
`https://api.poyo.ai/api/generate/status/${taskId}`,
{
headers: {
'Authorization': `Bearer YOUR_API_KEY`
}
}
);
return response.data.data;
} catch (error) {
console.error('Error checking status:', error.message);
return null;
}
};
const pollForResult = async (taskId, maxAttempts = 30) => {
for (let attempt = 0; attempt < maxAttempts; attempt++) {
const taskData = await checkTaskStatus(taskId);
if (!taskData) break;
console.log(`Status: ${taskData.status}`);
if (taskData.status === 'finished') {
console.log('Image generated successfully!');
if (taskData.files && taskData.files.length > 0) {
console.log('Image URL:', taskData.files[0].file_url);
}
return taskData;
} else if (taskData.status === 'failed') {
console.error('Generation failed:', taskData.error_message);
return null;
}
// Wait 1 second (Z-Image is fast!)
await new Promise(resolve => setTimeout(resolve, 1000));
}
console.error('Maximum polling attempts reached');
return null;
};
// Complete workflow example
const completeGeneration = async (prompt, size = '1:1') => {
// Step 1: Submit generation request
const generation = await generateImage(prompt, size);
if (!generation) return null;
// Step 2: Poll for results
const result = await pollForResult(generation.task_id);
return result;
};
Controllo dello stato in Python
import time
def check_task_status(task_id, api_key):
url = f"https://api.poyo.ai/api/generate/status/{task_id}"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
return response.json()['data']
except requests.exceptions.RequestException as e:
print(f"Error checking status: {e}")
return None
def wait_for_completion(task_id, api_key, max_attempts=30):
for attempt in range(max_attempts):
task_data = check_task_status(task_id, api_key)
if not task_data:
break
print(f"Status: {task_data['status']}")
if task_data['status'] == 'finished':
print("Image generated successfully!")
if task_data.get('files') and len(task_data['files']) > 0:
print(f"Image URL: {task_data['files'][0]['file_url']}")
return task_data
elif task_data['status'] == 'failed':
print(f"Generation failed: {task_data.get('error_message', 'Unknown error')}")
return None
time.sleep(1) # Wait 1 second
print("Maximum attempts reached")
return None
# Complete workflow
def complete_image_generation(prompt, api_key, size='1:1'):
# Step 1: Submit request
task_result = generate_image(prompt, api_key, size)
if not task_result:
return None
# Step 2: Wait for completion
final_result = wait_for_completion(task_result['task_id'], api_key)
return final_result
Gestione degli errori e best practice
Gestione completa degli errori
const robustImageGeneration = async (prompt, size = '1:1', retries = 3) => {
for (let attempt = 0; attempt < retries; attempt++) {
try {
const response = await axios.post(
'https://api.poyo.ai/api/generate/submit',
{
model: 'z-image',
input: {
prompt: prompt,
size: size
}
},
{
headers: {
'Authorization': `Bearer YOUR_API_KEY`,
'Content-Type': 'application/json'
},
timeout: 30000 // 30 second timeout
}
);
return response.data.data;
} catch (error) {
if (error.response) {
const status = error.response.status;
const message = error.response.data?.error || 'Unknown error';
console.error(`API Error (${status}): ${message}`);
// Don't retry for certain errors
if (status === 401 || status === 403) {
throw new Error('Authentication failed. Check your API key.');
}
if (status === 400) {
throw new Error(`Bad request: ${message}`);
}
} else if (error.request) {
console.error('Network error:', error.message);
} else {
console.error('Request setup error:', error.message);
}
// If this was the last attempt, throw the error
if (attempt === retries - 1) {
throw error;
}
// Wait before retrying (exponential backoff)
const delay = Math.pow(2, attempt) * 1000;
console.log(`Retrying in ${delay}ms... (Attempt ${attempt + 1}/${retries})`);
await new Promise(resolve => setTimeout(resolve, delay));
}
}
};
Migliori pratiche
- Mantieni i prompt entro 1000 caratteri - Z-Image ha una lunghezza massima del prompt
- Utilizza prompt descrittivi: maggiori dettagli generalmente producono risultati migliori
- Memorizza i risultati nella cache: archivia le immagini generate per evitare di rigenerare contenuti identici
- Gestisci correttamente le operazioni asincrone: attendi sempre il completamento dell'attività prima di utilizzare i risultati
Prompt tecnici rapidi
Struttura efficace dei prompt
// Good prompts for Z-Image
const goodPrompts = [
// Clear subject + style + details
"Professional product photo of a sleek smartphone on white background, studio lighting, 4K quality",
// Scene + atmosphere + composition
"Cozy coffee shop interior at golden hour, warm lighting, wooden furniture, plants on shelves",
// Character + action + setting
"Young woman reading a book in a modern library, natural light from large windows, peaceful atmosphere",
// Text rendering (Z-Image excels at this)
"Minimalist poster design with text 'INNOVATION 2026' in bold typography, blue gradient background"
];
// Prompts optimized for bilingual text
const textPrompts = [
"Store sign with 'OPEN' in English and '营业中' in Chinese, neon style",
"Business card design with company name 'TechFlow 科技流' in elegant font"
];
Elaborazione batch
const generateBatch = async (prompts, size = '1:1') => {
// Submit all generation requests in parallel
const generations = await Promise.all(
prompts.map(prompt => generateImage(prompt, size))
);
// Wait for all results
const results = await Promise.all(
generations
.filter(gen => gen !== null)
.map(gen => pollForResult(gen.task_id))
);
return results.filter(result => result !== null);
};
// Example: Generate multiple social media images
const socialMediaPrompts = [
"Motivational quote background with sunrise",
"Abstract geometric pattern in blue and purple",
"Minimalist workspace setup with laptop"
];
const images = await generateBatch(socialMediaPrompts, '1:1');
Conclusione
Z-Image API su PoYo fornisce una generazione di immagini ultraveloce e di alta qualità con eccezionali capacità di rendering del testo bilingue. Con la semplice API a due parametri (richiesta e dimensione), puoi integrare una potente generazione di immagini nelle tue applicazioni in pochi minuti.
Per funzionalità più avanzate e la documentazione API completa, visita la documentazione ufficiale Z-Image API.
Pronto per iniziare a costruire? Ottieni la tua chiave API e inizia a creare con Z-Image oggi stesso.
Hai bisogno di aiuto con l'implementazione? Unisciti alla nostra comunità di sviluppatori o dai un'occhiata ad altri tutorial API per tecniche avanzate.