# 欢迎

> Kamiya致力于提供面向社区的生成式AI服务。

## 概述

你可以在这自由地里体验到由社区创造的最新的内容而无需付出任何成本。不同于其他的AI服务提供商，我们是完全**公益**且**面向社区**的。在任何时候Kamiya都不会存在强制付费，任何资源都有机会免费获得。

查看[快速开始](/start)了解详情。

## 主页

访问 [Kamiya.Dev](https://www.kamiya.dev) 了解我们的主要业务。

## API 访问

* Stable Diffusion Image Generate
* GPT Chat Generate
* Anthropic Chat Generate(limited)
* AI Art QR Code Generate
* Global Image Delivery
* And More...

## 捐赠

如果你觉得众神之谷对您有帮助，欢迎前往 [魔法商店](https://shop.kamiya.dev) 支持我们


# 快速开始

## 基本准备

您应拥有一个 Kamiya ID，在 [Kamiya.Dev](https://www.kamiya.dev) 注册。

## API Key

在注册 Kamiya ID 后，您需要在 [Kamiya ID](https://www.kamiya.dev/account.html) 页面创建与账号关联的API Key来作为访问Kamiya API的凭据。

API Key类似于 `sk-cAPqidPQEZlHQ2T09iKYwOeWz9ZF5VUbbCgSPxNtivnpCV67`。

!> API Key具有关联账户的全部访问权限，请妥善保管。

## 计费

使用Kamiya的服务时会扣除相应的代币，在 [Kamiya.Dev](https://www.kamiya.dev) 中被称为 **魔晶** 。

可以通过 [Kamiya.Dev](https://www.kamiya.dev) 中的 **签到** 或前往 [魔法商店](https://shop.kamiya.dev) 补充账户内的魔晶。


# 鉴权

Kamiya API使用API Key作为鉴权凭据。

### 检查API端点

```
GET https://p0.kamiya.dev/api/checkNetwork
```

返回示例

```json
{
    "status":200,
    "ip":"103.186.212.127",
    "message":"OK"
}
```

## 鉴权方式

Kamiya API使用HTTP Header中的`Authorization`字段作为鉴权方式，需要将API Key以Bearer Token的方式传入。

以获取API Key所关联的账户详情为例

```http
GET https://p0.kamiya.dev/api/session/getDetails
```

Headers应包含

```json
{
  "Authorization": "Bearer sk-cAPqidPQEZlHQ2T09iKYwOeWz9ZF5VUbbCgSPxNtivnpCV67"
}
```

返回示例

```json
{
    "status": 200,
    "message": "OK",
    "data": {
        "email": "example@example.com",
        "role": "Normal", 
        "credit": 17993.36,
        "active": true
    },
    "useNAIFallback": false
}
```


# 图像生成

## 获取配置信息

```http
GET https://p0.kamiya.dev/api/image/config
```

响应示例过长 请见 <https://s.kmy.lol/gawol1yq>

## 图像生成

```http
POST https://p0.kamiya.dev/api/image/generate
```

请求示例

```json
{
    "type": "text2image", //image2image
    "prompts": "礼花，气球，红色瞳孔，小巷，看着观众，城市，浮世绘，头发飘起，",
    "negativePrompts": "lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry",
    "step": 28,
    "cfg": 12,
    "seed": 218506577,
    "sampling": "DPM++ 2M Karras",
    "width": 768,
    "height": 512,
    "model": "original", //模型配置见Config
    "LoRAs": [ //LoRA配置见Config
        {
            "id": "bocchiEdStyleLora_bocchiEdStyle",
            "weight": 60
        }
    ],
    "image": "<base64 url>" //在type为image2image时传递
}
```

响应示例

```json
{
    "status": 200,
    "message": "OK",
    "data": {
        "id": "w1tjx7j",
        "hashid": "nqy1zenwuykr256",
        "metaid": "dc9d09c889017a0538ccad375339c275",
        "status": "created",
        "metadata": {
            "LoRAs": [],
            "model": "original",
            "width": 768,
            "height": 512,
            "type": "text2image",
            "prompts": "礼花，气球，红色瞳孔，小巷，看着观众，城市，浮世绘，头发飘起，",
            "negativePrompts": "lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry,lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry",
            "sampling": "DPM++ 2M Karras",
            "step": 28,
            "cfg": 12,
            "seed": 218506577,
            "batch": 1,
            "artboard": "768x512"
        },
        "userId": 2,
        "createdAt": "08-06 07:30:20",
        "updatedAt": "08-06 07:30:20"
    }
}
```

## 任务追踪

根据上面API返回的`data`中的`hashid`，则可以通过以下接口获取任务状态。

```http
GET https://p0.kamiya.dev/api/image/generate/:hashid
```

响应示例

```json
{
    "status": 200,
    "message": "OK",
    "data": {
        "id": "w1tjx7j",
        "hashid": "nqy1zenwuykr256",
        "metaid": "dc9d09c889017a0538ccad375339c275",
        "status": "generated",
        "metadata": {
            "LoRAs": [],
            "model": "original",
            "width": 768,
            "height": 512,
            "type": "text2image",
            "prompts": "礼花，气球，红色瞳孔，小巷，看着观众，城市，浮世绘，头发飘起，",
            "negativePrompts": "lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry,lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry",
            "sampling": "DPM++ 2M Karras",
            "step": 28,
            "cfg": 12,
            "seed": 218506577,
            "batch": 1,
            "artboard": "768x512",
            "jpg": "https://huader-output.cdn.aliceeiga.com/hrw-v3_3/outputs/text2image/2023-08-06/1691278224754-513473-dc9d09c889017a0538ccad375339c275-generated.jpg"
        },
        "userId": 2,
        "createdAt": "08-06 07:30:20",
        "updatedAt": "08-06 07:30:26"
    }
}
```

如果状态为`generated`则可以在`metadata`中读取到`jpg`属性。

## 列出任务

<pre><code><strong>GET https://p0.kamiya.dev/api/image/generate?start=1&#x26;take=1
</strong></code></pre>

响应示例

```
{
    "status": 200,
    "message": "OK",
    "data": [
        {
            "id": "lnd1zsy",
            "hashid": "58pqdly1h2pvmeg",
            "metaid": "58970eb88901230adeb3d6c7f0287024",
            "status": "generated",
            "metadata": {
                "LoRAs": [],
                "model": "original",
                "width": 768,
                "height": 512,
                "type": "text2image",
                "prompts": "礼花，气球，红色瞳孔，小巷，看着观众，城市，浮世绘，头发飘起，",
                "negativePrompts": "lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry,lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry",
                "sampling": "DPM++ 2M Karras",
                "step": 28,
                "cfg": 12,
                "seed": 3050350418,
                "batch": 1,
                "artboard": "768x512",
                "jpg": ""
            },
            "userId": 2,
            "createdAt": "08-03 05:01:51",
            "updatedAt": "08-03 05:01:57"
        }
    ]
}
```


# OpenAI

Kamiya API与OpenAI官方API完全兼容，您可以将该接口作为中继直接用于像 [BetterChatGPT](https://github.com/ztjhz/BetterChatGPT) 这样为OpenAI API开发的应用程序。

## Chat Completion

```http
POST https://p0.kamiya.dev/api/openai/chat/completions
```

Stream调用示例(SSE)

```json
{
    "messages": [
        {
          "role":"system",
          "content":"You are ChatGPT, a large language model trained by OpenAI.\nCarefully heed the user's instructions. \nRespond using Markdown."
        },
        {
          "role":"user",
          "content":"你好"
        }
    ],
    "model":"openai:gpt-3.5-turbo",
    "max_tokens":null,
    "temperature":1,
    "presence_penalty":0,
    "top_p":1,
    "frequency_penalty":0,
    "stream":true
}
```

阻塞式调用示例(非SSE)

```json
{
    "messages": [
        {
          "role":"user",
          "content":"Generate a title in less than 6 words for the following message (language: zh-CN):\n\"\"\"\nUser: 你好\nAssistant: 你好！请问有什么我能帮到你的吗？\n\"\"\""
        }
    ],
    "model":"openai:gpt-3.5-turbo",
    "max_tokens":null,
    "temperature":1,
    "presence_penalty":0,
    "top_p":1,
    "frequency_penalty":0
}
```

如需以非Stream(SSE)方式调用，仅支持调用`gpt-3.5-turbo`模型，其余模型均以Stream(SSE)方式提供。

如果您具有相应权限，也可以调用`anthropic:claude-1`等由Anthropic提供的模型，在该API端点下这些模型的响应都被格式化为OpenAI兼容(SSE)。

## 经简化的Chat API

Kamiya同时提供经过简化的Chat API，可按实际需求调用。该API由服务器维护上下文(Context)，Redis缓存时间为48H。

```http
POST https://p0.kamiya.dev/api/openai/chatgpt/conversation
```

请求示例

```json
{
    "content":"你好",
    "conversationId": "e282d7a0-b183-4c7c-ba9c-3559e2af751f" //首次请求（第一条消息）无需携带，后续消息需携带
}
```

Stream(SSE)响应

响应格式与OpenAI Chat Completion一致，在`[DONE]`发送后还会追加一段由Kamiya提供的`kamiyaInfo`，其中包含

```json
{
    "id": "kamiyaInfo",
    "conversationId": "e282d7a0-b183-4c7c-ba9c-3559e2af751f", // 后续消息中需包含的conversationId
    "message": "[DONE]",
    "fullContent": "请问你想要我帮助你什么方面的问题呢？" // 产生计费的完整回复
}
```

使用该API时无需维护上下文，上下文裁剪与窗口控制均有Kamiya完成。


# QR Waifu

使用Kamiya提供的QR Waifu可快速生成AI艺术化的二维码，集成了短链接与二维码生成模块，无需额外的接口调用。

## 生成二维码

```http
POST https://p0.kamiya.dev/api/image/qrwaifu
```

请求示例

```json
{
    "prompt":"1 girl",
    "type":"link", //如需缩短文段则可提交 post
    "content":"https://baidu.com",
    "steps":"28",
    "weight":"0.7", // controlnet 权重
    "guidance_start":"0.14", // controlnet 引导开始
    "guidance_end":"0.68" // controlnet 引导结束
}
```

响应示例

```json
{
    "status": 200,
    "message": "OK",
    "image": "https://r2.kamiya-a.tech/usercontent/b36c58a2-c489-4fac-8729-cae20b7b0429",
    "shortly": "https://s.kmy.lol/05nv4f02" // 二维码扫描后的内容
}
```


# 计费历史

可以通过该API获取账户的计费历史。

## 获取计费历史列表

```http
GET https://p0.kamiya.dev/api/billing/history?start=1&take=2
```

响应示例

```json
{
    "status": 200,
    "message": "OK",
    "data": [
        {
            "id": "1p9w7",
            "amount": 1,
            "reason": "chatCompletion-Legacy",
            "createdAt": "07-10 03:59:33"
        },
        {
            "id": "zq14a",
            "amount": 1,
            "reason": "chatCompletion-Legacy",
            "createdAt": "07-10 03:59:32"
        }
    ]
}
```


# 生成历史

该API现已弃用，但仍保留以维持兼容性。

## 获取历史记录

```http
GET https://p0.kamiya.dev/api/userContent/get?start=1&take=2
```

响应示例

```json
{
    "status": 200,
    "message": "OK",
    "data": [
        {
            "uuid": "7aa97681-284f-4faf-8ce3-567f3cebe141",
            "url": "https://r2.kamiya-a.tech/usercontent/7aa97681-284f-4faf-8ce3-567f3cebe141"
        },
        {
            "uuid": "a6851538-16a4-439f-8bc3-bc8618502f9f",
            "url": "https://r2.kamiya-a.tech/usercontent/a6851538-16a4-439f-8bc3-bc8618502f9f"
        }
    ]
}
```

图片倒序排列，越晚生成越靠前。

## 删除历史记录

```http
GET https://p0.kamiya.dev/api/userContent/delete?uuid=a6851538-16a4-439f-8bc3-bc8618502f9f
```

响应示例

```json
{
    "status":200,
    "message":"OK"
}
```

!>该操作不仅在数据库中删除历史记录，同时也在对象储存中永久删除该图片，操作不可逆


# 简介

> Kamiya当前仅为合作伙伴提供OpenID服务，暂未开放公开的OpenID接口。

Kamiya为第三方应用提供OpenID服务，以方便外围应用通过Kamiya ID进行用户身份认证和计费等操作。


# Kamiya OpenID App Doc

## 1.登录页面

将用户跳转到

```
Browser https://www.kamiya.dev/openIDAppLogin.html?appId=<Your APP ID>
```

## 2.通过Token获取用户数据

```
POST https://p0.kamiya.dev/api/session/verifyOpenIDToken
```

请求JSON示例

```json
{
    "appId": "<Your APP ID>",
    "secret": "<Your APP Secret>",
    "token": "J2C1O-4D4TQ"
}
```

返回JSON示例

```json
{
    "status": 200,
    "data": {
        "id": 1,
        "email": "example@example.com",
        "role": "Normal"
    }
}
```

其他status

404: Token不存在或存在的Token不对应请求的AppId

400: 请求格式错误

401: AppId或AppSecret错误

## 3.向用户扣费

```
POST https://p0.kamiya.dev/api/billing/charge
```

请求JSON示例

```json
{
    "appId": "<Your APP ID>",
    "secret": "<Your APP Secret>",
    "id": 1, //接口返回用户信息中的id
    "credit": 15, //魔晶数目
    "allowNC": true //允许使用非商业魔晶
}
```

返回JSON示例

```json
{
    "status": 200,
    "message": "OK"
}
```

其他status

403:

如message为 `insufficient credit` 则表示用户魔晶不足

如message为 `user not active` 则表示用户未在Kamiya验证邮箱地址或账户已禁用

400: 请求格式错误

401: AppId或AppSecret错误

## 4.授权扣费模式

### 4.1.授权用户账户

该操作旨在确认用户账户余额是否为正。

```
POST https://p0.kamiya.dev/api/billing/auth
```

请求JSON示例

```json
{
    "appId": "<Your APP ID>",
    "secret": "<Your APP Secret>",
    "id": 1 //接口返回用户信息中的id
}
```

返回JSON示例

```json
{
    "status": 200,
    "message": "OK"
}
```

其他status

403:

如message为 `insufficient credit` 则表示用户魔晶不足

如message为 `user not active` 则表示用户未在Kamiya验证邮箱地址或账户已禁用

400: 请求格式错误

401: AppId或AppSecret错误

#### 4.1.1.余量查询

```
POST https://p0.kamiya.dev/api/billing/detail
```

请求JSON示例

```json
{
    "appId": "<Your APP ID>",
    "secret": "<Your APP Secret>",
    "id": 1 //接口返回用户信息中的id
}
```

返回JSON示例

```json
{
    "status": 200,
    "message": "OK",
    "data": {
        "email": "as1583377@outlook.com",
        "role": "Administrator",
        "credit": 17328.47,
        "NCCredit": 1000, // 非商业魔晶
        "active": true
    }
}
```

#### 4.1.2.签到

```
POST https://p0.kamiya.dev/api/billing/openidCheckin
```

请求JSON示例

```json
{
    "appId": "<Your APP ID>",
    "secret": "<Your APP Secret>",
    "id": 1 //接口返回用户信息中的id
}
```

返回JSON示例

```json
{
    "status": 200,
    "message": "OK"
}
```

其他status

400:

如message为 `Bad Request` 则说明请求格式错误

如message为 `already checkin` 则说明用户今日已签到

401: AppId或AppSecret错误

### 4.2.扣费

扣费操作可在业务逻辑完成后进行，目的是方便结合业务动态扣费。该接口不检查用户余额是否大于请求扣费额。

```
POST https://p0.kamiya.dev/api/billing/forceCharge
```

请求JSON示例

```json
{
    "appId": "<Your APP ID>",
    "secret": "<Your APP Secret>",
    "id": 1, //接口返回用户信息中的id
    "credit": 15, //魔晶数目
    "allowNC": true //允许使用非商业魔晶
}
```

返回JSON示例

```json
{
    "status": 200,
    "message": "OK"
}
```

其他status

403: 如message为 `user not active` 则表示用户未在Kamiya验证邮箱地址或账户已禁用

400: 请求格式错误

401: AppId或AppSecret错误


