Guida all’integrazione · API
Aggiornato 2026-10-22
Usa una chiave personale per chiamare strumenti tramite HTTPS. Gli esempi sequenziali separano la voce da un MP3. Prima di cambiare strumento controlla parametri e limiti.
Richiede Bash, curl 7.76+ e jq. Esegui nello stesso terminale.
01Preparazione e autenticazione
Crea una chiave Lettura ed esecuzione e invia Authorization: Bearer. Non servono Cookie di login, CSRF o rinnovi della sessione browser.
Le liste vuote consentono tutti gli strumenti e IP; valgono comunque le regole dell’account. Budget in UTC. I trasferimenti interrotti mantengono l’allocazione. La nuova chiave mantiene permessi e scadenza. Aggiorna gli script entro i cinque minuti massimi di transizione.
Crea chiave →jq() { command jq "$@" | tr -d '\r'; }
read -rsp 'TELKNET_API_KEY: ' TELKNET_API_KEY; printf '\n'
export TELKNET_API_KEY
BASE="${TELKNET_BASE_URL:-https://telknet.cc}"
TOOL="${TELKNET_TOOL:-music-vocal-split}"
FILE="${TELKNET_FILE:-sample.mp3}"
curl --connect-timeout 10 --max-time 60 --fail-with-body "$BASE/api/v1/credits/balance" \
-H "Authorization: Bearer $TELKNET_API_KEY"02Carica un file
Richiedi un URL firmato, poi invia l’originale con PUT. Usa byte reali e lo stesso Content-Type.
curl --connect-timeout 10 --max-time 60 --fail-with-body "$BASE/api/v1/tools/$TOOL/upload" \
-H "Authorization: Bearer $TELKNET_API_KEY" \
-H 'Content-Type: application/json' \
-d "$(jq -n --arg filename "$(basename "$FILE")" \
--argjson size "$(wc -c < "$FILE")" \
'{filename:$filename,content_type:"audio/mpeg",file_size:$size}')" \
-o upload.json || { cat upload.json >&2; exit 1; }
curl --connect-timeout 10 --max-time 1800 --fail-with-body --request PUT \
-H 'Content-Type: audio/mpeg' --upload-file "$FILE" \
"$(jq -r '.data.upload_url' upload.json)"Gli URL durano normalmente 15 minuti. Non inviare la chiave al PUT. Esempio con PUT singolo; per multipart_supported=true invia parts e chiama upload/multipart/complete, oppure abort in caso di errore.
03Conferma prezzo e invia
Leggi il prezzo base di modello o strumento, invialo invariato in pricing e salva task_id. Quantità e preelaborazione seguono le tariffe dello strumento; RVC richiede prima analisi e preventivo di addestramento.
printf '{}' > params.json
curl --connect-timeout 10 --max-time 60 --fail-with-body "$BASE/api/v1/tools/$TOOL/quote" \
-H "Authorization: Bearer $TELKNET_API_KEY" \
-H 'Content-Type: application/json' \
-d "$(jq -n --slurpfile params params.json '{params:$params[0]}')" \
-o quote.json || { cat quote.json >&2; exit 1; }
jq -n --arg tool "$TOOL" --arg key "$(jq -r '.data.s3_key' upload.json)" \
--slurpfile params params.json --slurpfile quote quote.json \
'{tool_id:$tool,file_key:$key,params:$params[0],pricing:$quote[0].data}' > request.json
REQUEST_KEY="$(date +%s)-$(od -An -N16 -tx1 /dev/urandom | tr -d ' \n')"
printf '%s' "$REQUEST_KEY" > request-key.txt
curl --connect-timeout 10 --max-time 60 --fail-with-body "$BASE/api/v1/tools/$TOOL/tasks" \
-H "Authorization: Bearer $TELKNET_API_KEY" \
-H "Idempotency-Key: $REQUEST_KEY" \
-H 'Content-Type: application/json' --data-binary @request.json -o task.json || { cat task.json >&2; exit 1; }
TASK=$(jq -r '.data.task_id' task.json)Il preventivo non riserva crediti. Con 409 PRICE_CHANGED rileggi e conferma il prezzo. Generazione musicale e cover di riferimento richiedono i parametri dei modelli scelti.
Conserva request-key.txt e request.json. Lo stesso account, Idempotency-Key e contenuto identico restituiscono l’attività originale. Usa una nuova chiave per una nuova attività e verifica gli invii incerti prima di riprovare.
04Controlla avanzamento
Interroga ogni 3 secondi. Scarica dopo completed; failed, timeout e cancelled sono finali. Dopo due ore termina solo l’attesa, non l’attività.
deadline=$((SECONDS + 7200))
while (( SECONDS < deadline )); do
curl --connect-timeout 10 --max-time 60 --fail-with-body "$BASE/api/v1/tasks/$TASK" \
-H "Authorization: Bearer $TELKNET_API_KEY" -o status.json || { cat status.json >&2; exit 1; }
status=$(jq -r '.data.status' status.json)
case "$status" in
completed) break ;;
failed|timeout|cancelled) cat status.json >&2; exit 1 ;;
pending|processing) sleep 3 ;;
*) cat status.json >&2; exit 1 ;;
esac
done
test "$(jq -r '.data.status' status.json)" = completed05Scarica risultati
Codifica s3_key di output_files per URL e usalo come fileId. proxy=true trasmette l’originale dalla stessa origine con controllo del proprietario.
mkdir -p results
jq -r '.data.output_files | to_entries[] | .key' status.json | while read -r INDEX; do
FILE_ID=$(jq -r --argjson i "$INDEX" '.data.output_files[$i].s3_key | @uri' status.json)
NAME=$(basename "$(jq -r --argjson i "$INDEX" '.data.output_files[$i].name' status.json)")
curl --connect-timeout 10 --max-time 7200 --fail-with-body "$BASE/api/v1/tasks/$TASK/files/$FILE_ID?proxy=true" \
-H "Authorization: Bearer $TELKNET_API_KEY" \
--output "results/$INDEX-$NAME.part" || exit 1
EXPECTED=$(jq -r --argjson i "$INDEX" '.data.output_files[$i].size_bytes' status.json)
test "$(wc -c < "results/$INDEX-$NAME.part")" -eq "$EXPECTED" || exit 1
mv "results/$INDEX-$NAME.part" "results/$INDEX-$NAME"
doneLe richieste Bearer a /api/v1/tasks/{taskId}/download restituiscono direttamente il file originale o uno ZIP. Si applica la conservazione dei file; la chiave API non viene inoltrata allo storage.
Errori e ripristino
Leggi stato HTTP e error.code, message, details originali. Non basarti solo sul testo né salvare un errore come file di risultato.
| 400 | Controlla file, parametri e JSON. |
| 401 | Chiave assente, non valida, scaduta o revocata. |
| 402 | Crediti insufficienti; controlla il saldo. |
| 403 | Sola lettura o accesso negato. |
| 404 | Risorsa assente o appartenente a un altro account. |
| 409 | Prezzo o stato cambiato; leggi il codice. |
| 413 | File oltre il limite dello strumento. |
| 429 | Troppe richieste; attendi Retry-After. |
| 503 | Manutenzione o guasto temporaneo; conserva l’errore e riprova più tardi. |
Per 429 rispetta Retry-After o usa attese progressive limitate. Ripeti solo letture sicure. Se un POST di caricamento o attività scade, verifica prima il risultato senza duplicarlo.
{
"ok": false,
"error": {
"code": "API_KEY_SCOPE",
"message": "Questa chiave API non consente l’operazione.",
"details": []
}
}HTTP_CODE=$(curl --connect-timeout 10 --max-time 60 --silent --show-error \
-H "Authorization: Bearer $TELKNET_API_KEY" \
--output response.json --dump-header response.headers --write-out '%{http_code}' \
"$BASE/api/v1/tasks/$TASK")
if [[ "$HTTP_CODE" != 2* ]]; then
cat response.json >&2
if [[ "$HTTP_CODE" == 429 ]]; then
awk 'tolower($1)=="retry-after:" {print $2}' response.headers
fi
exit 1
fiConserva task_id in task.json e riprendi il polling. Verifica gli invii recenti nell’elenco; usa cancel solo per fermare l’attività.
Riferimento API
I percorsi usano /api/v1 sullo stesso sito. Le chiavi accedono solo alle tue risorse, non a gestione account, creazione chiavi, admin o callback interni.
| GET | /api/v1/tools | Catalogo strumenti |
| GET | /api/v1/tools/{toolId} | Parametri e limiti |
| GET | /api/v1/credits/balance | Saldo crediti |
| POST | /api/v1/tools/{toolId}/quote | Prezzo attuale |
| POST | /api/v1/tools/{toolId}/upload | Carica un file |
| POST | /api/v1/tools/{toolId}/tasks | Conferma prezzo e invia |
| GET | /api/v1/tasks/{taskId} | Controlla avanzamento |
| GET | /api/v1/tasks | Le tue attività |
| GET | /api/v1/tasks/{taskId}/files/{fileId}?proxy=true | Scarica risultati |
| POST | /api/v1/tasks/{taskId}/cancel | Annulla la tua attività |
midi-converter e midi-lyrics funzionano nel browser senza API di caricamento o esecuzione server. Per altri strumenti, i dettagli definiscono disponibilità, formati, dimensioni e parametri.