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

# 画像の編集

> Edit existing images using Google Gemini 2.5 Flash Image with text instructions.
All requests and responses are processed through SMLTP for security and compliance.

This endpoint is specifically designed for **image-to-image editing** where:
- An image file is **required** (unlike `/images/generations` where it's optional)
- A text prompt describes how to edit or transform the image
- The edited image is returned with the same quality and format options

All prompts and responses are automatically processed through SMLTP for audit logging and compliance.


# 画像の編集

Google Gemini 2.5 Flash Image とテキスト指示を使用して、既存の画像を編集します。

## エンドポイント

```
POST /images/edits
```

## 説明

Google Gemini 2.5 Flash Image とテキスト指示を使用して、既存の画像を編集します。このエンドポイントは、**画像間の編集**用に特別に設計されています。

* 画像ファイルは **必須** (オプションである `/images/generations` とは異なります)
* 画像の編集または変換方法を説明するテキスト プロンプト
* 編集された画像は同じ品質と形式のオプションで返されます

すべてのプロンプトと応答は、監査ログとコンプライアンスのために SMLTP を通じて自動的に処理されます。

## 認証

必須: API キー

```bash theme={null}
Authorization: Bearer sk-your-api-key-here
```

## リクエスト本文

このエンドポイントは `multipart/form-data` 形式を受け入れます。

### パラメータ

| パラメータ             | タイプ  | 必須  | 説明                                               |
| ----------------- | ---- | --- | ------------------------------------------------ |
| `prompt`          | 文字列  | はい  | アップロードされた画像を編集または変換する方法を説明するテキスト手順 (1 ～ 4000 文字) |
| `image`           | バイナリ | はい  | 編集する画像ファイル (JPEG、PNG、WEBP、または GIF、最大 10MB)       |
| `smltp_policy`    | 文字列  | いいえ | SMLTP セキュリティ ポリシー (デフォルト: "内部")                  |
| `response_format` | 文字列  | いいえ | 応答形式: "url" または "b64\_json" (デフォルト: "url")       |

## リクエストの例

### cURL

```bash theme={null}
curl -X POST "https://{customer.name}.hiperai.ai/api/external/images/edits" \
  -H "Authorization: Bearer sk-your-api-key-here" \
  -F "prompt=Add dramatic sunset colors to the sky and enhance the overall atmosphere" \
  -F "image=@/path/to/image.jpg" \
  -F "smltp_policy=internal" \
  -F "response_format=url"
```

### JavaScript/Node.js

```javascript theme={null}
const formData = new FormData();
formData.append('prompt', 'Add dramatic sunset colors to the sky and enhance the overall atmosphere');
formData.append('image', fileInput.files[0]);
formData.append('smltp_policy', 'internal');
formData.append('response_format', 'url');

const response = await fetch('https://{customer.name}.hiperai.ai/api/external/images/edits', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer sk-your-api-key-here'
  },
  body: formData
});

const data = await response.json();
console.log('Edited image URL:', data.data[0].url);
```

### パイソン

```python theme={null}
import requests

url = "https://{customer.name}.hiperai.ai/api/external/images/edits"
headers = {
    "Authorization": "Bearer sk-your-api-key-here"
}

with open('image.jpg', 'rb') as f:
    files = {'image': f}
    data = {
        'prompt': 'Add dramatic sunset colors to the sky and enhance the overall atmosphere',
        'smltp_policy': 'internal',
        'response_format': 'url'
    }
    response = requests.post(url, headers=headers, files=files, data=data)
    result = response.json()
    print('Edited image URL:', result['data'][0]['url'])
```

## 応答

### 成功の応答 (200)

```json theme={null}
{
  "success": true,
  "id": "f55bb4aa-ad9a-4b5a-9c94-511bf6fce806",
  "object": "image.edit",
  "created": 1705312200,
  "data": [
    {
      "url": "http://localhost:5173/uploads/secureai_image_api_edit_68c5c6d2d57c85b102eb05e2_f55bb4aa_0.png",
      "revised_prompt": "Add dramatic sunset colors to the sky and enhance the overall atmosphere"
    }
  ],
  "metadata": {
    "model": "google/gemini-2.5-flash-image-preview",
    "provider": "Google",
    "total_images": 1,
    "is_image_to_image": true,
    "text_response": null,
    "smltp_trace_id": "trx-6caec994-73af-4f2c-9e13-572d53262f2a",
    "smltp_bundle_id": "jti-26464307-d455-4a3d-9ca4-8ec144cb601c",
    "smltp_policy": "internal"
  }
}
```

### 応答フィールド

| フィールド      | タイプ    | 説明                       |
| ---------- | ------ | ------------------------ |
| `success`  | ブール値   | リクエストが成功した場合は常に true     |
| `id`       | 文字列    | 一意のリクエスト識別子              |
| `object`   | 文字列    | オブジェクトタイプ: "image.edit"  |
| `created`  | 整数     | 画像が編集されたときの Unix タイムスタンプ |
| `data`     | 配列     | 編集された画像の配列               |
| `metadata` | オブジェクト | SMLTP 追跡を含む追加のメタデータ      |

### 画像オブジェクト

| フィールド            | タイプ | 説明                                                    |
| ---------------- | --- | ----------------------------------------------------- |
| `url`            | 文字列 | 編集画像にアクセスするためのURL（response\_formatが「url」の場合）          |
| `b64_json`       | 文字列 | Base64でエンコードされた画像データ（response\_formatが「b64\_json」の場合） |
| `revised_prompt` | 文字列 | 実際に編集に使用されるプロンプト (入力とは異なる場合があります)                     |

### メタデータ オブジェクト

| フィールド               | タイプ       | 説明                                               |
| ------------------- | --------- | ------------------------------------------------ |
| `model`             | 文字列       | 使用したモデル: "google/gemini-2.5-flash-image-preview" |
| `provider`          | 文字列       | プロバイダー: 「Google」                                 |
| `total_images`      | 整数        | 画像の総数 (編集の場合は常に 1)                               |
| `is_image_to_image` | ブール値      | このエンドポイントでは常に true                               |
| `text_response`     | 文字列\|null | モデルからのオプションのテキスト応答                               |
| `smltp_trace_id`    | 文字列       | 監査追跡用の SMLTP トレース ID                             |
| `smltp_bundle_id`   | 文字列       | 監査追跡用の SMLTP バンドル ID                             |
| `smltp_policy`      | 文字列       | 適用された SMLTP ポリシー                                 |

## エラー応答

### 400 不正なリクエスト

```json theme={null}
{
  "success": false,
  "error": "Missing image",
  "message": "An image file is required for image-to-image editing",
  "request_id": "f55bb4aa-ad9a-4b5a-9c94-511bf6fce806"
}
```

### 401 不正

```json theme={null}
{
  "success": false,
  "error": "Invalid API key",
  "message": "The provided API key is invalid or has been revoked"
}
```

### 403 禁止

```json theme={null}
{
  "success": false,
  "error": "Access denied",
  "message": "SMLTP policy not allowed"
}
```

### 413 ペイロードが大きすぎます

```json theme={null}
{
  "success": false,
  "error": "File too large",
  "message": "Maximum image size is 10MB",
  "request_id": "f55bb4aa-ad9a-4b5a-9c94-511bf6fce806"
}
```

### 500 内部サーバーエラー

```json theme={null}
{
  "success": false,
  "error": "Internal server error",
  "message": "Image editing failed"
}
```

### 503 サービスは利用できません

```json theme={null}
{
  "success": false,
  "error": "Service unavailable",
  "message": "Image generation service is not configured",
  "request_id": "f55bb4aa-ad9a-4b5a-9c94-511bf6fce806"
}
```

## 注意事項

* サポートされている画像形式: JPEG、PNG、WEBP、GIF
* 最大ファイルサイズ: 画像あたり 10MB
* このエンドポイントにはイメージ ファイルが **必須** (`/images/generations` とは異なります)
* プロンプトには、アップロードされた画像を編集または変換する方法が説明されています
* セキュリティとコンプライアンスのために、すべてのリクエストは SMLTP を通じて処理されます
* URL の代わりに `response_format: "b64_json"` を使用して、base64 でエンコードされた画像データを受信します


## OpenAPI

````yaml POST /images/edits
openapi: 3.0.3
info:
  title: SecureAI External API
  description: >
    SecureAI External API provides AI chat completion and image generation
    capabilities with knowledge base retrieval, 

    security policies, and comprehensive usage tracking. This API is designed
    for external developers 

    and integrations using API key authentication.


    ## Key Features

    - **RAG (Retrieval-Augmented Generation)**: Automatically search knowledge
    bases for relevant context

    - **Multi-Model Support**: OpenAI, Anthropic, Google, Meta, and other AI
    models

    - **Model Redundancy & Failover**: Caller-defined failover chains (primary +
    fallbacks) with per-attempt timeouts

    - **OpenAI-Compatible Endpoint**: Point any OpenAI SDK at `/api/external/v1`
    — no code changes

    - **Image Generation**: Generate and edit images using Google Gemini 2.5
    Flash Image

    - **Speech-to-Speech (S2S)**: Real-time voice conversations using OpenAI
    Realtime API with WebRTC

    - **Security Policies**: SMLTP policy enforcement, per-call Prompt Shield,
    and signed compliance receipts

    - **Usage Tracking**: Comprehensive usage monitoring, self-service quota,
    and rate limiting

    - **Knowledge Base Integration**: Access to personal and shared knowledge
    bases

    - **User Management**: Complete user, group, and role management
    capabilities

    - **Audit Logging**: Comprehensive activity and security audit logs


    ## Authentication

    All endpoints (except health check) require API key authentication using
    Bearer token:

    ```

    Authorization: Bearer sk-your-api-key-here

    ```


    ## Billing and Usage

    By default, API requests are billed to the user account that owns the API
    key. You can specify 

    a different user to bill by including the `user_id` parameter in your
    request. This allows for:

    - Multi-tenant applications with per-user billing

    - Flexible completion limit management

    - Per-user "Usage by Model" settings


    ## Rate Limits

    - Default: 60 requests per minute, 1000 requests per hour

    - Daily limits: 100 requests (configurable)

    - Monthly limits: 10,000 requests (configurable)


    ## Base URL

    ```

    https://secureai.hiperai.ai/api/external

    ```
  version: 1.1.0
  contact:
    name: SecureAI Support
    email: support@secureai.hiperai.ai
  license:
    name: Proprietary
    url: https://secureai.hiperai.ai/terms
servers:
  - url: https://secureai.hiperai.ai/api/external
    description: Production server
  - url: http://localhost:3010/api/external
    description: Development server
security:
  - ApiKeyAuth: []
tags:
  - name: System
    description: System health and status endpoints
  - name: Discovery
    description: Endpoints to discover available models, indexes, and policies
  - name: Chat
    description: AI chat completion endpoints
  - name: User Management
    description: Endpoints for managing user accounts and roles
  - name: Index Management
    description: Endpoints for managing knowledge base indexes
  - name: Group Management
    description: Endpoints for managing user groups
  - name: SMLTP Security
    description: Endpoints for managing SMLTP security policies and audit logs
  - name: Role Management
    description: Endpoints for managing user roles
  - name: Activity Logs
    description: Endpoints for retrieving activity logs
externalDocs:
  description: SecureAI Documentation
  url: https://secureai.hiperai.ai/docs
paths:
  /images/edits:
    post:
      tags:
        - Images
      summary: Image-to-Image Editing
      description: >
        Edit existing images using Google Gemini 2.5 Flash Image with text
        instructions.

        All requests and responses are processed through SMLTP for security and
        compliance.


        This endpoint is specifically designed for **image-to-image editing**
        where:

        - An image file is **required** (unlike `/images/generations` where it's
        optional)

        - A text prompt describes how to edit or transform the image

        - The edited image is returned with the same quality and format options


        All prompts and responses are automatically processed through SMLTP for
        audit logging and compliance.
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              required:
                - prompt
                - image
              properties:
                prompt:
                  type: string
                  description: >-
                    Text instructions describing how to edit or transform the
                    uploaded image
                  example: >-
                    Add dramatic sunset colors to the sky and enhance the
                    overall atmosphere
                  minLength: 1
                  maxLength: 4000
                image:
                  type: string
                  format: binary
                  description: >-
                    Image file to edit (required, JPEG, PNG, WEBP, or GIF, max
                    10MB)
                smltp_policy:
                  type: string
                  description: >-
                    SMLTP security policy to apply (e.g., 'internal', 'public',
                    'confidential', 'hipaa', 'gdpr')
                  default: internal
                  example: internal
                response_format:
                  type: string
                  description: The format of the response images
                  enum:
                    - url
                    - b64_json
                  default: url
                  example: url
      responses:
        '200':
          description: Image edited successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  id:
                    type: string
                    description: Unique request identifier
                    example: f55bb4aa-ad9a-4b5a-9c94-511bf6fce806
                  object:
                    type: string
                    example: image.edit
                  created:
                    type: integer
                    description: Unix timestamp of when the image was edited
                    example: 1705312200
                  data:
                    type: array
                    description: Array of edited images
                    items:
                      type: object
                      properties:
                        url:
                          type: string
                          format: uri
                          description: >-
                            URL to access the edited image (when response_format
                            is 'url')
                          example: >-
                            http://localhost:5173/uploads/secureai_image_api_edit_68c5c6d2d57c85b102eb05e2_f55bb4aa_0.png
                        b64_json:
                          type: string
                          description: >-
                            Base64-encoded image data (when response_format is
                            'b64_json')
                          example: iVBORw0KGgoAAAANSUhEUgAA...
                        revised_prompt:
                          type: string
                          description: >-
                            The prompt that was actually used for editing (may
                            differ from input)
                          example: >-
                            Add dramatic sunset colors to the sky and enhance
                            the overall atmosphere
                  metadata:
                    type: object
                    properties:
                      model:
                        type: string
                        example: google/gemini-2.5-flash-image-preview
                      provider:
                        type: string
                        example: Google
                      total_images:
                        type: integer
                        example: 1
                      is_image_to_image:
                        type: boolean
                        description: Always true for this endpoint
                        example: true
                      text_response:
                        type: string
                        nullable: true
                        description: Optional text response from the model
                        example: null
                      smltp_trace_id:
                        type: string
                        description: SMLTP trace ID for audit tracking
                        example: trx-6caec994-73af-4f2c-9e13-572d53262f2a
                      smltp_bundle_id:
                        type: string
                        description: SMLTP bundle ID for audit tracking
                        example: jti-26464307-d455-4a3d-9ca4-8ec144cb601c
                      smltp_policy:
                        type: string
                        description: SMLTP policy that was applied
                        example: internal
              example:
                success: true
                id: f55bb4aa-ad9a-4b5a-9c94-511bf6fce806
                object: image.edit
                created: 1705312200
                data:
                  - url: >-
                      http://localhost:5173/uploads/secureai_image_api_edit_68c5c6d2d57c85b102eb05e2_f55bb4aa_0.png
                    revised_prompt: >-
                      Add dramatic sunset colors to the sky and enhance the
                      overall atmosphere
                metadata:
                  model: google/gemini-2.5-flash-image-preview
                  provider: Google
                  total_images: 1
                  is_image_to_image: true
                  text_response: null
                  smltp_trace_id: trx-6caec994-73af-4f2c-9e13-572d53262f2a
                  smltp_bundle_id: jti-26464307-d455-4a3d-9ca4-8ec144cb601c
                  smltp_policy: internal
        '400':
          description: >-
            Invalid request parameters (missing prompt, missing image, invalid
            image format, etc.)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                success: false
                error: Missing image
                message: An image file is required for image-to-image editing
                request_id: f55bb4aa-ad9a-4b5a-9c94-511bf6fce806
        '401':
          description: Invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Access denied (SMLTP policy not allowed)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '413':
          description: Image file too large (maximum 10MB)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                success: false
                error: File too large
                message: Maximum image size is 10MB
                request_id: f55bb4aa-ad9a-4b5a-9c94-511bf6fce806
        '500':
          description: Internal server error or image editing failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Image generation service unavailable (Gemini service not configured)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                success: false
                error: Service unavailable
                message: Image generation service is not configured
                request_id: f55bb4aa-ad9a-4b5a-9c94-511bf6fce806
      security:
        - ApiKeyAuth: []
components:
  schemas:
    ErrorResponse:
      type: object
      properties:
        success:
          type: boolean
          example: false
        error:
          type: string
          example: Invalid API key
        message:
          type: string
          example: The provided API key is invalid or has been revoked
        request_id:
          type: string
          example: req-abc123
          description: Request ID for tracking (if available)
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      description: |
        API key authentication using Bearer token format.
        Example: `Authorization: Bearer sk-your-api-key-here`

````