---
title: Quickstart
description: Make an image with the Sume Open API in three calls.
---
This walk-through makes one low-quality image with `gpt-image-2`, which costs under a cent (`GET /v1/open/catalog` lists the exact price), and downloads it.

## 1. Get a key

Open **API keys** on open.sume.com and create a key. Copy it when it is shown: the full key is shown once. Then export it in your shell:

```bash
export SUME_API_KEY="sume_live_..."
```

[Authentication and keys](/docs/authentication) explains the two kinds of key and where each one works.

## 2. Submit the job

<!-- api-call-example:v2-image-generate -->

The API answers `202 Accepted` at once with the job id and the URLs to follow. `next_poll_after_seconds` tells you when to look again.

```json
{
  "data": {
    "request_id": "job_7513b52d-3669-4ffe-b317-8b02000715eb",
    "job": {
      "id": "job_7513b52d-3669-4ffe-b317-8b02000715eb",
      "type": "image_generation",
      "status": "queued",
      "model": "gpt-image-2",
      "idempotency_key": "9816bc88-9791-43a1-86c2-876dc7c544e8",
      "communication_mode": "async",
      "created_at": "2026-10-14T23:01:52.075Z",
      "started_at": null,
      "completed_at": null,
      "result": null,
      "error": null,
      "input": {
        "prompt": "A ceramic coffee cup on a wooden table, soft morning light",
        "quality": "low",
        "aspect_ratio": "1:1"
      }
    },
    "status_url": "https://api.open.sume.com/v1/jobs/job_7513b52d-3669-4ffe-b317-8b02000715eb/status",
    "result_url": "https://api.open.sume.com/v1/jobs/job_7513b52d-3669-4ffe-b317-8b02000715eb/result",
    "events_url": "https://api.open.sume.com/v1/jobs/job_7513b52d-3669-4ffe-b317-8b02000715eb/events",
    "cancel_url": null,
    "cancelable": false,
    "next_action": "poll_status",
    "next_poll_after_seconds": 2,
    "recommended_poll_interval_seconds": 2,
    "result_ready": false,
    "terminal": false,
    "idempotency_hit": false
  }
}
```

## 3. Poll until the job is done

Call `status_url` until `terminal` is `true`. Wait `next_poll_after_seconds` between calls.

```bash
curl -sS "https://api.open.sume.com/v1/jobs/$JOB_ID/status" \
  -H "Authorization: Bearer $SUME_API_KEY"
```

```json
{
  "data": {
    "request_id": "job_7513b52d-3669-4ffe-b317-8b02000715eb",
    "job_id": "job_7513b52d-3669-4ffe-b317-8b02000715eb",
    "status": "COMPLETED",
    "sume_status": "completed",
    "next_action": "fetch_result",
    "result_ready": true,
    "terminal": true
  }
}
```

## 4. Fetch the result

When `next_action` is `fetch_result`, read `result_url`. Each artifact has a URL you can download.

<!-- api-call-example:v2-job-result -->

```json
{
  "data": {
    "request_id": "job_7513b52d-3669-4ffe-b317-8b02000715eb",
    "job_id": "job_7513b52d-3669-4ffe-b317-8b02000715eb",
    "status": "COMPLETED",
    "result": {
      "artifacts": [
        {
          "id": "artf_UCdnhWThU_Tbemv7E2gE7-ee9lNCIDxP",
          "type": "image",
          "url": "https://media.sume.com/artifacts/artf_UCdnhWThU_Tbemv7E2gE7-ee9lNCIDxP/images.png",
          "content_type": "image/png",
          "public_artifact_id": "artf_UCdnhWThU_Tbemv7E2gE7-ee9lNCIDxP",
          "visibility": "public_by_link",
          "size_bytes": null,
          "width": null,
          "height": null,
          "duration_ms": null,
          "checksum_sha256": null
        }
      ]
    }
  }
}
```

## Next

- [Polling](/docs/polling) for intervals, timeouts and the wait modes.
- [Webhooks](/docs/webhooks) to be called back instead of polling.
- [Idempotency](/docs/idempotency) before you retry a submit.
