简介
欢迎加入A1的开发者平台,共同探索AIGC的无限可能!
a1平台已经推出了超过27,000+款影像生成应用,包括漫画、多巴胺、3D迪士尼等多种头像风格,“芭比”、“原神”主题等各种AI人像应用,以及种类繁多的表情包、艺术字体等。a1.art每月新增上百个优质应用,输入一张图或者一句话就可以生成风格各异的人像结果或者精美图片。等待你去探索!
通过调用我们的API,您可以快速将生图app集成到您的应用程序或服务中,满足不同业务需求,提升用户体验和产品价值。
我们的平台特点包括:
多样化的生图应用:提供多种图像生成应用,满足不同场景的需求。
易于集成:通过简单的API调用,即可将强大的图像生成功能集成到您的项目中。
高效的性能:优化的算法和服务器架构,确保快速响应和高质量的图像输出。
灵活的定制:支持多种参数设置,满足个性化的图像生成需求。
无论您是想为您的用户提供个性化的图像生成服务,还是需要在内部系统中自动生成图像,我们的平台都能为您提供强大的支持。
API收费规则
API接口将为您生成无水印图,便于您将图片应用于个人业务中。a1.art站内存在节点式应用与表单式应用两种生图应用。
通过API调用表单式应用,每生成1张无水印图,将从您的账户中扣1个积分。
节点式应用API积分消耗按照生成器节点个数进行积分扣除,详细可
通过API调用图片进行精绘,每精绘一张图消耗3个积分(最大支持2K出图)
请注意保持账号点数余额充足,以免调用失败影响您的业务正常使用
API提供什么能力
API目前提供5个接口:
上传图片接口:如果用户在使用图生图功能时,需要先调此接口上传图片后才可拿到生图依赖的参数
生图接口:用户传入生图依赖的参数,可以得到一个 taskId ,通过 taskId 可以查询到生图结果
精绘接口:对传入的图片进行高清处理,类似于生图接口,得到 taskId 后,通过 taskId 可以查询到生图结果
查询生图结果接口:传入 taskId 可以查询到生图结果
基础介绍
访问授权
Prefix
https://a1.art
请求规范说明
响应结果:JSON
数据格式。API 的响应体结构包含code、msg、msg_cn、data
四个部分。code
为错误码,msg
为英文错误说明,msg_cn
为中文错误说明,data
为调用 API 后返回的结果;如果code
不为0
则认为请求失败,失败信息可参考msg
和msg_cn
。
响应体
数据结构
Application
export type APPInfo = {
id: string;
versionId: string;
name: string;
formArr: []Form;
styleArr: []Style;
updateDate: Date;
createDate: Date;
processTime: string; // 该app最近生图的平均耗时
};
// form中的type字段的类型,对应风格、图片、文本、尺寸
export type FormItemTypeFieldType = 'style' | 'cnet' | 'description' | 'size' ;
export type Form = {
id: string; // 生图接口需传的id(带有inputs的description除外)
type: FormItemTypeFieldType;
title: string;
inputs: []Input;
position: string; // 合照图片的位置
};
export type Input = {
id: string; // 生图接口description表单需传的id
title: string;
tags: []string; // description表单提示词
};
Style
export type Style = {
id: string;
name: string;
image: string;
};
Size
// form中的sizeId字段的类型,1到7对分别对应的size 1:1 3:4 1:2 4:3 2:1 16:9 9:16
export type FormSizeIdType = '1' | '2' | '3' | '4' | '5' | '6' | '7' ;
Task
// task 执行状态,0—任务已提交 10-任务已完成 20-任务失败 30-任务进行中
export type TaskStateType = 0 |10 | 20 | 30 ;
export type Task = {
id: string;
startDate: Date;
finishDate: Date;
createDate: Date;
images: []string;
state: number;
};
API key
要以用户身份发出授权请求,您必须使用 API key。
您可以从网站右上角个人头像处,查找并管理您的 API key
Application
获取Application详情
/open-api/v1/a1/apps/{appId}
& GET
请求参数
语言,不传默认为发布时使用的文案,支持翻译为zh_CN,en_US,zh_TW,ru_RU,ja_JP,pt_BR,es_MX,de_DE,id_ID,tr_TR,vi_VN,th_TH,ms_MY
参数限制
不支持查询带有数字分身组件、wordart组件、group photo组件为 user upload模式(绝大多数合照应用不再此范围内)、Video组件的app
请求示例
curl --location --request GET 'https://a1.art/open-api/v1/a1/apps/{appId}' \
--header 'apiKey: {apiKey}' \
--header 'Accept: */*' \
--header 'Host: a1.art' \
--header 'Connection: keep-alive'
import requests
url = "https://a1.art/open-api/v1/a1/apps/{appId}"
payload={}
headers = {
'apiKey': {apiKey}
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
var axios = require('axios');
var config = {
method: 'get',
url: 'https://a1.art/open-api/v1/a1/apps/{appId}',
headers: {
'apiKey': {apiKey},
'Accept': '*/*',
'Host': 'a1.art',
'Connection': 'keep-alive'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
响应示例
{
"code": 0,
"msg": "success",
"msg_cn": "成功",
"data": {
"appInfo": {
"id": "1803632078862147586",
"versionId": "1803632078866341890",
"name": "Crazy Pet",
"formArr": [ // 生图待传的表单参数
{
"id": "1705408562085",
"type": "cnet",
"title": "Photo of your pet",
"position": "0"
},
{
"id": "1705403286130",
"type": "description",
"title": "Description",
"inputs": [
{
"id": "description_1705463790428_variant1",
"title": "Color and breed, such as: black devon rex cat",
"tags": [
"Obsidian_black",
"Porcelain_white"
]
}
]
},
{
"id": "1705398050190",
"type": "style",
"title": "Style"
},
{
"id": "1705403291444",
"type": "size",
"title": "Size"
}
],
"styleArr": [
{
"id": "1766068889598496769",
"name": "High Quality Anmie",
"image": "https://cdn.a1.art/assets/style/cover_image/6d7358e9-ddae-4253-bcc9-d4f54ebc25d5.png"
}
],
"updateDate": "2024-06-20 19:51:55.0",
"createDate": "2024-06-20 11:32:52.0",
"processTime": "22", // 该app最近生图的平均耗时
"cost": 2 // 节点式应用消耗点数
}
}
}
Image
上传图片:/open-api/v1/a1/images/upload
& POST
注:只有通过我们系统上传的图片才可用来做生图参数
请求参数
参数限制
请求示例
curl --location --request POST 'https://a1.art/open-api/v1/a1/images/upload' \
--header 'apiKey: {apiKey}' \
--header 'Accept: */*' \
--header 'Host: a1.art' \
--header 'Connection: keep-alive' \
--header 'Content-Type: multipart/form-data;' \
--form 'file=@"/Users/xxx/Downloads/imageName.png"' \
--form 'imageUrl="https://xxx/xxx.jpeg"'
import requests
url = "https://a1.art/open-api/v1/a1/images/upload"
payload={
'imageUrl': 'https://xxx/xxx.jpeg'
}
files=[
('file',('imageName.jpg',open('/Users/xxx/Downloads/imageName.jpg','rb'),'image/jpeg'))
]
headers = {
'apiKey': {apiKey}
}
response = requests.request("POST", url, headers=headers, data=payload, files=files)
print(response.text)
var axios = require('axios');
var FormData = require('form-data');
var fs = require('fs');
var data = new FormData();
data.append('file', fs.createReadStream('/Users/xxx/Documents/iamgeName'));
data.append('imageUrl', 'https://xxx/xxx.jpeg');
var config = {
method: 'post',
url: 'https://a1.art/open-api/v1/a1/images/upload',
headers: {
'apiKey': {apiKey},
'Accept': '*/*',
'Host': 'a1.art',
'Connection': 'keep-alive',
...data.getHeaders()
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
响应示例
{
"code": 0,
"msg": "success",
"msg_cn": "成功",
"data": {
"imageUrl": "63fa41e7-e282-4582-a07b-8e5e73e8d388.jpg",
"path": "assets/application/apikey_5f6ccf7b983e499fb8ba4e5c4de8013f/form/"
}
}
生成图片:/open-api/v1/a1/images/generate
& POST
请求参数
应用版本 id (如果遇到“应用版本已更新,请重新获取应用信息”的报错,则代表应用已经更新,需要重新获取一下)
图生图依赖的图片(如果查询 app 详情接口没返回才不用填,代表这个应用不需要输入图片)
formArr 中 type 为 cnet 的 form 的 id
合照图片索引位置 (用到合照功能需传该字段,表示将图片附于合照指定位置-索引从0开始)
生图依赖的描述词(如果查询 app 详情接口没返回才不用填,代表这个应用没有开放描述词输入)
formArr 中 type 为 description 的 form 的 id(如果有inputs字段的话则为input的id)
生图依赖的图片风格,来源— styleArr 中的id(如果查询 app 详情接口没返回才不用填,代表这个应用只能生成固定 style 的图片)
生图依赖的图片尺寸;(如果查询 app 详情接口没返回才不用填,代表这个应用只能生成固定尺寸的图片)
1到7对分别对应的size 1:1 3:4 1:2 4:3 2:1 16:9 9:16
参数限制
需要带上application最新的versionId
需要传图片生成数量(generateNum, 1~4)注:节点式应用单次仅能生成一张图
对于application formArr 里面的参数,每个type的参数至少传一个
在传form里面类型为description的参数时,如果form拥有inputs字段,description的id则应该传input的id
请求示例
curl --location --request POST 'https://a1.art/open-api/v1/a1/images/generate' \
--header 'apiKey: {apiKey}' \
--header 'Content-Type: application/json' \
--header 'Accept: */*' \
--header 'Host: a1.art' \
--header 'Connection: keep-alive' \
--data-raw '{
"cnet": [
{
"id": {cnetId},
"imageUrl": {imageUrl},
"path": {path},
"position": {position}
}
],
"description": [
{
"id": {descriptionId/inputId}, # form如果没有inputs字段,则传description的id而非input的id
"value": {value}
}
],
"styleId": {styleId},
"size": {
"sizeId": {sizeId}
},
"appId": {appId},
"versionId": {versionId},
"generateNum": {generateNum}
}'
import requests
import json
url = "https://a1.art/open-api/v1/a1/images/generate"
payload = json.dumps({
"cnet": [
{
"id": {cnetId},
"imageUrl": {imageUrl},
"path": {path},
"position": {position}
}
],
"description": [
{
"id": {descriptionId/inputId}, # form如果没有inputs字段,则传description的id而非input的id
"value": {value}
}
],
"styleId": {styleId},
"size": {
"sizeId": {sizeId}
},
"appId": {appId},
"versionId": {versionId},
"generateNum": {generateNum}
})
headers = {
'apiKey': {apiKey},
'Content-Type': 'application/json',
'Accept': '*/*',
'Host': 'a1.art',
'Connection': 'keep-alive'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
var axios = require('axios');
var data = JSON.stringify({
"cnet": [
{
"id": {cnetId},
"imageUrl": {imageUrl},
"path": {path},
"position": {position}
}
],
"description": [
{
"id": {descriptionId/inputId}, // form如果没有inputs字段,则传description的id而非input的id
"value": {value}
}
],
"styleId": {styleId},
"size": {
"sizeId": {sizeId}
},
"appId": {appId},
"versionId": {versionId},
"generateNum": {generateNum}
});
var config = {
method: 'post',
url: 'https://a1.art/open-api/v1/a1/images/generate',
headers: {
'apiKey': {apiKey},
'Content-Type': 'application/json',
'Accept': '*/*',
'Host': 'a1.art',
'Connection': 'keep-alive'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
响应示例
{
"code": 0,
"msg": "success",
"msg_cn": "成功",
"data": {
"taskId": "507b080cfe17f7956e8690c4eba2b80f"
}
}
图片精绘:/open-api/v1/a1/images/optimize& POST
curl --location --request POST 'https://a1.art/open-api/v1/a1/images/optimize' \
--header 'apiKey: {apiKey}' \
--header 'Content-Type: application/json' \
--header 'Accept: */*' \
--header 'Host: a1.art' \
--header 'Connection: keep-alive' \
--data-raw '{
"path": {path},
"imageUrl": {imageUrl}
}'
import requests
import json
url = "https://a1.art/open-api/v1/a1/images/optimize"
payload = json.dumps({
"path": {path},
"imageUrl": {imageUrl}
})
headers = {
'apiKey': {apiKey},
'Content-Type': 'application/json',
'Accept': '*/*',
'Host': 'a1.art',
'Connection': 'keep-alive'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
var axios = require('axios');
var data = JSON.stringify({
"path": {path},
"imageUrl": {imageUrl}
});
var config = {
method: 'post',
url: 'https://a1.art/open-api/v1/a1/images/optimize',
headers: {
'apiKey': {apiKey},
'Content-Type': 'application/json',
'Accept': '*/*',
'Host': 'a1.art',
'Connection': 'keep-alive'
},
data : data
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
响应结构同生成图片
{
"code": 0,
"msg": "success",
"msg_cn": "成功",
"data": {
"taskId": "507b080cfe17f7956e8690c4eba2b80f"
}
}
Task
查询任务执行结果:/open-api/v1/a1/tasks/{taskId}
& GET
注:生成的图片地址后续可能会失效,建议将生成结果保存在自己的cdn上
task 的 state 状态枚举可见TaskStateType
请求参数
图片资源所属地区,中国区使用传 cn,其他地区可不传
参数限制
请求示例
curl --location --request GET 'https://a1.art/open-api/v1/a1/tasks/{taskId}' \
--header 'apiKey: {apiKey}' \
--header 'section: {section}' \
--header 'Accept: */*' \
--header 'Host: a1.art' \
--header 'Connection: keep-alive'
import requests
url = "https://a1.art/open-api/v1/a1/tasks/{taskId}"
payload={}
headers = {
'apiKey': {apiKey},
'section': {section}
}
response = requests.request("GET", url, headers=headers, data=payload)
var axios = require('axios');
var config = {
method: 'get',
url: 'https://a1.art/open-api/v1/a1/tasks/{taskId}',
headers: {
'apiKey': {apiKey},
'section': {section},
'Accept': '*/*',
'Host': 'a1.art',
'Connection': 'keep-alive'
}
};
axios(config)
.then(function (response) {
console.log(JSON.stringify(response.data));
})
.catch(function (error) {
console.log(error);
});
响应示例
{
"code": 0,
"msg": "success",
"msg_cn": "成功",
"data": {
"id": "1803970662304264194",
"state": 10,
"startDate": "2024-06-21 09:58:16.0",
"finishDate": "2024-06-21 09:58:28.0",
"createDate": "2024-06-21 09:58:16.0",
"images": [
"imageUrl"
]
}
}
错误码
This app does not support API access
The quantity must not exceed 4
The application is updated. You need to obtain the application information again
You can only use API of your built apps.
Only one image can be uploaded at a time
Non image format files are not supported
The image file cannot exceed 10M
This image format is not supported
The size of the image file cannot exceed 2048*2048
No rights to use VIP app*Available after payment
balance insufficient error
联系我们