Skip to content

How to Get Result

Retrieve the result of a submitted task.

Endpoint

GET https://api.get3w.com/v1/requests/{request_id}

request_id is the id from the submit response.

Request

bash
curl "https://api.get3w.com/v1/requests/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
  -H "Authorization: Bearer YOUR_API_KEY"
python
import requests

response = requests.get(
    "https://api.get3w.com/v1/requests/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    headers={"Authorization": "Bearer YOUR_API_KEY"}
)

data = response.json()
print(data["status"], data.get("outputs"))
javascript
const response = await fetch(
    "https://api.get3w.com/v1/requests/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    { headers: { "Authorization": "Bearer YOUR_API_KEY" } }
);

const data = await response.json();
console.log(data.status, data.outputs);

Response

Still Running

While the task is not yet terminal, the response is minimal and carries a Retry-After: 3 header:

json
{
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "status": "processing"
}

Completed

json
{
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "model": "google/nano-banana-pro/text-to-image",
  "status": "completed",
  "code": 0,
  "outputs": ["https://storage.example.com/output.png"],
  "timings": {
    "queue_wait": 427,
    "celery_init": 2054,
    "api_call": 23068,
    "save": 1902,
    "run_overhead": 679,
    "total": 28131
  },
  "error": null,
  "created_at": "2026-03-28T07:50:42"
}

Failed

json
{
  "id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "model": "google/nano-banana-pro/text-to-image",
  "status": "failed",
  "code": 1200,
  "outputs": [],
  "error": "Content moderation: prompt contains prohibited content",
  "created_at": "2026-03-28T07:50:42"
}

A failed task still returns HTTP 200 — the failure is reported in status and code, not in the HTTP status. See Error Codes.

Response Fields

FieldDescription
idTask ID
modelModel slug that ran
statuscreated, processing, completed, or failed
code0 on success, otherwise a task error code
outputsArray of output URLs; empty unless completed
timingsPer-stage durations in milliseconds
errorError message, null on success
created_atWhen the task was created

For speech-to-text, outputs contains the transcribed text rather than a URL.

Polling Pattern

python
import time
import requests

request_id = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
headers = {"Authorization": "Bearer YOUR_API_KEY"}

while True:
    response = requests.get(
        f"https://api.get3w.com/v1/requests/{request_id}",
        headers=headers
    )
    data = response.json()

    if data["status"] == "completed":
        print("Done!", data["outputs"])
        break
    if data["status"] == "failed":
        print(f"Failed ({data['code']}):", data["error"])
        break

    time.sleep(3)

Poll every 3–5 seconds. Use estimated_duration from the submit response to delay your first poll rather than hammering the endpoint immediately.

Alternatives to Polling

  • Sync — Add ?sync=true when submitting to get the result in the same response. Waits up to 10 minutes, then returns status: "processing" and you poll from there
  • Webhook — Add ?webhook=<your-url> when submitting to receive the result as a callback

Next Steps

Released under the MIT License.