> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aireiter.com/llms.txt
> Use this file to discover all available pages before exploring further.

# P-Image-Upscale 图片超分放大

> - 异步处理模式，返回任务ID用于后续查询
- PrunaAI 超分辨率模型，将小图或压缩图放大为更清晰的大尺寸图片
- 支持按目标像素（MP）或按倍数放大，输出最高 128 MP
- 可选细节增强、真实感增强，支持 jpg / png / webp 输出


## Authorizations

**Authorization** `string` *required*

所有接口均需要使用Bearer Token进行认证

获取 API Key：

访问 [API Key 管理页面](https://aireiter.com/keys) 获取您的 API Key

使用时在请求头中添加：

```
Authorization: Bearer YOUR_API_KEY
```

## Body

**model** `string` *required*

模型名称

固定值：`"prunaai_p_image_upscale"`

**params** `object` *required*

模型参数对象

**params 对象属性**

**image\_url** `string` *required*

待放大的原图 URL

* 必填，且只能传 **1 张** 图片
* 支持以下两种格式：
  1. 公开可访问的 URL
  2. Base64 编码格式
     * 必须使用完整的 Data URI 格式：`data:image/{格式};base64,{base64数据}`
     * 支持的图片格式：jpeg、png、webp
     * 示例：`data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABg...`
     * ⚠️ 注意：必须包含 `data:image/jpeg;base64,` 前缀部分，base64 图片大小不超过 10MB

**upscale\_mode** `string` (default: target)

放大模式

* `target` - 按目标像素放大到固定的百万像素（MP）尺寸（默认），配合 `target` 参数使用
* `factor` - 按倍数放大，每条边乘以 `factor`，配合 `factor` 参数使用

**target** `integer` (default: 4)

目标分辨率（单位：MP，百万像素）

* 取值范围：`1` \~ `128`
* 仅在 `upscale_mode` 为 `target` 时生效

**factor** `number` (default: 2)

放大倍数

* 取值范围：`1` \~ `8`
* 仅在 `upscale_mode` 为 `factor` 时生效
* 输出图片最大不超过 128 MP，超出时自动封顶

**enhance\_details** `boolean` (default: false)

细节增强

增强细微纹理和小细节，可能会提高对比度并与原图产生轻微偏差。

**enhance\_realism** `boolean` (default: false)

真实感增强

提升画面真实感，但可能与原图偏差更大。推荐用于 AI 生成的图片。

**output\_format** `string` (default: jpg)

输出图片格式

* `jpg` - JPEG 格式（默认）
* `png` - PNG 格式
* `webp` - WebP 格式

**output\_quality** `integer` (default: 80)

输出图片质量

* 取值范围：`0` \~ `100`，100 为最佳质量，0 为最低质量
* 当 `output_format` 为 `png` 时该参数无效

**callback\_url** `string`

任务完成后的回调地址

**metadata** `object`

自定义元数据，原样返回

**out\_task\_id** `string` *required*

发起方任务ID

用户自定义的任务标识，必填

## Response

**out\_task\_id** `string`

发起方任务ID，可用于查询结果

**status** `string`

初始状态，固定为 `"pending"`

**estimated\_credits** `number`

预估消耗积分

**created\_at** `string`

创建时间（ISO 格式）

```bash cURL theme={null}
curl --request POST \
  --url https://aireiter.com/api/openapi/submit \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "model": "prunaai_p_image_upscale",
    "params": {
      "image_url": "https://example.com/portrait.jpg",
      "upscale_mode": "factor",
      "factor": 2,
      "output_format": "png"
    },
    "out_task_id": "my_task_123456"
  }'
```

```python Python theme={null}
import requests

url = "https://aireiter.com/api/openapi/submit"

payload = {
    "model": "prunaai_p_image_upscale",
    "params": {
        "image_url": "https://example.com/portrait.jpg",
        "upscale_mode": "factor",
        "factor": 2,
        "output_format": "png"
    },
    "out_task_id": "my_task_123456"
}

headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript JavaScript theme={null}
const url = "https://aireiter.com/api/openapi/submit";

const payload = {
  model: "prunaai_p_image_upscale",
  params: {
    image_url: "https://example.com/portrait.jpg",
    upscale_mode: "factor",
    factor: 2,
    output_format: "png"
  },
  out_task_id: "my_task_123456"
};

const headers = {
  "Authorization": "Bearer <token>",
  "Content-Type": "application/json"
};

fetch(url, {
  method: "POST",
  headers: headers,
  body: JSON.stringify(payload)
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));
```

```go Go theme={null}
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    url := "https://aireiter.com/api/openapi/submit"

    payload := map[string]interface{}{
        "model": "prunaai_p_image_upscale",
        "params": map[string]interface{}{
            "image_url":  "https://example.com/portrait.jpg",
            "upscale_mode":  "factor",
            "factor":        2,
            "output_format": "png",
        },
        "out_task_id": "my_task_123456",
    }

    jsonData, _ := json.Marshal(payload)

    req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
    req.Header.Set("Authorization", "Bearer <token>")
    req.Header.Set("Content-Type", "application/json")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    body, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(body))
}
```

```java Java theme={null}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

public class Main {
    public static void main(String[] args) throws Exception {
        String url = "https://aireiter.com/api/openapi/submit";

        String payload = """
        {
          "model": "prunaai_p_image_upscale",
          "params": {
            "image_url": "https://example.com/portrait.jpg",
            "upscale_mode": "factor",
            "factor": 2,
            "output_format": "png"
          },
          "out_task_id": "my_task_123456"
        }
        """;

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(url))
            .header("Authorization", "Bearer <token>")
            .header("Content-Type", "application/json")
            .POST(HttpRequest.BodyPublishers.ofString(payload))
            .build();

        HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
```

```php PHP theme={null}
<?php

$url = "https://aireiter.com/api/openapi/submit";

$payload = [
    "model" => "prunaai_p_image_upscale",
    "params" => [
        "image_url" => "https://example.com/portrait.jpg",
        "upscale_mode" => "factor",
        "factor" => 2,
        "output_format" => "png"
    ],
    "out_task_id" => "my_task_123456"
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer <token>",
    "Content-Type: application/json"
]);

$response = curl_exec($ch);
curl_close($ch);

echo $response;
?>
```

```ruby Ruby theme={null}
require 'net/http'
require 'json'
require 'uri'

url = URI("https://aireiter.com/api/openapi/submit")

payload = {
  model: "prunaai_p_image_upscale",
  params: {
    image_url: "https://example.com/portrait.jpg",
    upscale_mode: "factor",
    factor: 2,
    output_format: "png"
  },
  out_task_id: "my_task_123456"
}

http = Net::HTTP.new(url.host, url.port)

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer <token>"
request["Content-Type"] = "application/json"
request.body = payload.to_json

response = http.request(request)
puts response.body
```

```swift Swift theme={null}
import Foundation

let url = URL(string: "https://aireiter.com/api/openapi/submit")!

let payload: [String: Any] = [
    "model": "prunaai_p_image_upscale",
    "params": [
        "image_url": "https://example.com/portrait.jpg",
        "upscale_mode": "factor",
        "factor": 2,
        "output_format": "png"
    ] as [String: Any],
    "out_task_id": "my_task_123456"
]

var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer <token>", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = try? JSONSerialization.data(withJSONObject: payload)

let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let error = error {
        print("Error: \(error)")
        return
    }

    if let data = data, let responseString = String(data: data, encoding: .utf8) {
        print(responseString)
    }
}

task.resume()
```

```csharp C# theme={null}
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main(string[] args)
    {
        var url = "https://aireiter.com/api/openapi/submit";

        var payload = @"{
            ""model"": ""prunaai_p_image_upscale"",
            ""params"": {
                ""image_url"": ""https://example.com/portrait.jpg"",
                ""upscale_mode"": ""factor"",
                ""factor"": 2,
                ""output_format"": ""png""
            },
            ""out_task_id"": ""my_task_123456""
        }";

        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer <token>");

        var content = new StringContent(payload, Encoding.UTF8, "application/json");
        var response = await client.PostAsync(url, content);
        var result = await response.Content.ReadAsStringAsync();

        Console.WriteLine(result);
    }
}
```

```c C theme={null}
#include <stdio.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl;
    CURLcode res;

    curl_global_init(CURL_GLOBAL_DEFAULT);
    curl = curl_easy_init();

    if(curl) {
        const char *url = "https://aireiter.com/api/openapi/submit";
        const char *payload = "{"
            "\"model\":\"prunaai_p_image_upscale\","
            "\"params\":{"
                "\"image_url\":\"https://example.com/portrait.jpg\","
                "\"upscale_mode\":\"factor\","
                "\"factor\":2,"
                "\"output_format\":\"png\""
            "},"
            "\"out_task_id\":\"my_task_123456\""
        "}";

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer <token>");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

        res = curl_easy_perform(curl);

        if(res != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
                    curl_easy_strerror(res));
        }

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }

    curl_global_cleanup();
    return 0;
}
```

```dart Dart theme={null}
import 'dart:convert';
import 'package:http/http.dart' as http;

void main() async {
  final url = Uri.parse('https://aireiter.com/api/openapi/submit');

  final payload = {
    'model': 'prunaai_p_image_upscale',
    'params': {
      'image_url': 'https://example.com/portrait.jpg',
      'upscale_mode': 'factor',
      'factor': 2,
      'output_format': 'png'
    },
    'out_task_id': 'my_task_123456'
  };

  final response = await http.post(
    url,
    headers: {
      'Authorization': 'Bearer <token>',
      'Content-Type': 'application/json',
    },
    body: jsonEncode(payload),
  );

  print(response.body);
}
```

```r R theme={null}
library(httr)
library(jsonlite)

url <- "https://aireiter.com/api/openapi/submit"

payload <- list(
  model = "prunaai_p_image_upscale",
  params = list(
    image_url = "https://example.com/portrait.jpg",
    upscale_mode = "factor",
    factor = 2,
    output_format = "png"
  ),
  out_task_id = "my_task_123456"
)

response <- POST(
  url,
  add_headers(
    Authorization = "Bearer <token>",
    `Content-Type` = "application/json"
  ),
  body = toJSON(payload, auto_unbox = TRUE),
  encode = "raw"
)

cat(content(response, "text"))
```

```json 200 theme={null}
{
  "statusCode": 200,
  "message": "",
  "data": {
      "out_task_id": "my_task_123456",
      "status": "pending",
      "estimated_credits": 0,
      "created_at": "2026-08-12T06:03:28.242Z"
  }
}
```

```json 400 theme={null}
  {
      "statusCode": 400,
      "message": "请求参数无效",
      "ok": false
  }
```

```json 401 theme={null}
{
  "error": {
    "code": 401,
    "message": "身份验证失败，请检查您的API密钥"
  }
}
```

```json 433 theme={null}
  {
    "error": {
      "code": 433,
      "message": "账户余额不足，请充值后再试"
    }
  }
```

```json 500 theme={null}
{
  "error": {
    "code": 500,
    "message": "服务器内部错误，请稍后重试"
  }
}
```

## 查询任务结果

任务提交后，使用 `POST /api/openapi/query` 接口轮询任务状态。任务完成后，`output` 字段返回放大后的图片。

```bash cURL theme={null}
curl --request POST \
  --url https://aireiter.com/api/openapi/query \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
    "out_task_id": "my_task_123456"
  }'
```

**output** `array`

输出图片列表，每个元素包含放大后图片的 `url`

### 查询响应示例

```json 200 theme={null}
{
  "statusCode": 200,
  "message": "",
  "data": {
      "out_task_id": "my_task_123456",
      "status": "completed",
      "created_at": "2026-10-21T06:03:28.000Z",
      "completed_at": "2026-10-21T06:03:41.000Z",
      "output": [
          {
              "url": "https://static.aireiter.com/example/prunaai-p-image-upscale/output.png"
          }
      ]
  }
}
```

> 结果图片地址为临时存储，请及时下载并保存到您自己的存储中。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.