Once uploaded, you can reuse the same resource for multiple generation requests.
Python
Copy
import sysimport requestsimport timebase_url = "https://api.verbalia.net"headers = {"X-API-Key": "<api_key>"}files = { 'file': ('audio.mp3', open('audio.mp3', 'rb'), 'audio/mpeg')} # Replace this with the path to your audio filedata = { 'resource_name': 'workshop-speech', # Descriptive name 'resource_type': 'audio' # One of the 5 types}# Make the POST requestaudio_upload_response = requests.post( base_url + "/resources/upload", files=files, params=data, headers=headers)# Check the responseif audio_upload_response.status_code != 200: print(f'Failed to upload file. Status code: {audio_upload_response.status_code}') print('Response:', audio_upload_response.text) sys.exit(1)print('Upload successful', audio_upload_response.json())# Contains resource_id
Step 3: Poll for the status and download the video
Space out polling requests by at least 30s to avoid getting rate limited.
Python
Copy
while True: time.sleep(60) # Poll every 60 seconds response = requests.get( base_url + "/status/" + generation_response.json()["request_id"], headers=headers ) print(response.json()) # Status and video urls once completed if response.json()["status"] in ["completed", "failed"]: breakif response.json()["status"] == "completed": video_response = requests.get(response.json()["video_url"]) with open(f"verbalia_video.mp4", "wb") as f: f.write(video_response.content)