Restorations

/v1/restorations The /v1/restorations resource lets you create and manage photo restoration jobs. Jobs are processed asynchronously — submit a job, then poll for its status or receive a webhook when it completes.

Create a restoration

POST/api/v1/restorations

Request body

FieldTypeRequiredDescription
image_urlstringYesPublic HTTPS URL of the photo to restore (max 20 MB)
presetstringNoRestoration preset: standard | enhance | colorize | portrait. Default: standard.
resolutionstringNoOutput resolution: 1k | 2k | 4k. Default: 1k.
remove_framebooleanNoRemove photo frame/border before restoring. Default: false.
colorizebooleanNoApply AI colorization. Default: false.
callback_urlstringNoHTTPS webhook URL to call when the job completes. Must be publicly reachable.
idempotency_keystringNoClient-supplied key (max 255 chars). Re-sending the same key returns the existing restoration instead of creating a duplicate.

Example request

curl -X POST https://picrenew.com/api/v1/restorations \
  -H "Authorization: Bearer pk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "image_url": "https://example.com/grandma-1952.jpg",
    "preset": "enhance",
    "resolution": "2k",
    "callback_url": "https://yourapp.com/webhooks/picrenew"
  }'

Response — 202 Accepted

{
  "id": "a1b2c3d4-...",
  "status": "analyzing",
  "preset": "enhance",
  "resolution": "2k",
  "credits_charged": 2,
  "created_at": "2026-03-27T12:00:00.000Z",
  "expires_at": null
}

List restorations

GET/api/v1/restorations

Returns your 50 most recent restorations, newest first.

Example

curl https://picrenew.com/api/v1/restorations \
  -H "Authorization: Bearer pk_live_YOUR_KEY"

Response — 200 OK

{
  "restorations": [
    {
      "id": "a1b2c3d4-...",
      "status": "complete",
      "preset": "enhance",
      "resolution": "2k",
      "credits_charged": 2,
      "output_url": "https://...",
      "created_at": "2026-03-27T12:00:00.000Z",
      "expires_at": "2026-06-25T12:00:00.000Z"
    }
  ]
}

Get a restoration

GET/api/v1/restorations/:id

Returns the current state of a single restoration job.

Status values

StatusDescription
analyzingJob created, queued for processing
processingAI model is running
completeComplete — output_url is populated
failedProcessing failed — credits refunded
expiredOutput deleted per retention policy

Delete a restoration

DELETE/api/v1/restorations/:id

Deletes the restoration record and its associated blob storage. Only restorations in complete or failed status can be deleted. Credits are not refunded for deletions.

Response — 200 OK

{ "deleted": true }

Webhooks

If you supply a callback_url when creating a restoration, PicRenew will POST a JSON payload to that URL when the job reaches a terminal status ( complete or failed). The request includes a 10-second timeout.

Payload

{
  "id": "a1b2c3d4-...",
  "status": "complete",
  "output_url": "https://...",
  "credits_charged": 2,
  "preset": "enhance",
  "resolution": "2k",
  "created_at": "2026-03-27T12:00:00.000Z",
  "expires_at": "2026-06-25T12:00:00.000Z"
}

Your endpoint should return a 2xx status. PicRenew retries up to 3 times with exponential backoff on non-2xx or network errors.

Output expiry

Restoration outputs are stored for 90 days for free accounts. Subscriber accounts have permanent storage. Expired restorations show status expired and have a null output_url.