curl -X GET https://api.bizmori.com/api/v3/orders/ORDER_ID/download \
-H "Authorization: Bearer YOUR_API_KEY"const orderId = 'ORDER_ID';
const response = await fetch(`https://api.bizmori.com/api/v3/orders/${orderId}/download`, {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const { data } = await response.json();
import requests
order_id = 'ORDER_ID'
response = requests.get(
f'https://api.bizmori.com/api/v3/orders/{order_id}/download',
headers={'Authorization': 'Bearer YOUR_API_KEY'}
)
data = response.json()['data']
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bizmori.com/api/v3/orders/{orderId}/download",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.bizmori.com/api/v3/orders/{orderId}/download"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.bizmori.com/api/v3/orders/{orderId}/download")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bizmori.com/api/v3/orders/{orderId}/download")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"archiveUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/zip/1001/archive.zip?X-Amz-...",
"files": [
{
"fileId": "21",
"downloadUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/out/cat.png?X-Amz-..."
},
{
"fileId": "22",
"downloadUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/out/dog.png?X-Amz-..."
}
],
"expiresInSeconds": 3600
}
}注文結果のダウンロード URL を発行
完了した Anti-AI・watermark 埋め込み注文について、結果ファイルごとのダウンロード URL と、結果全体を受け取る URL を 1 回の呼び出しで発行します。watermark 注文を v2 と v3 のどちらで作成したかに関係なく、レスポンスの形式は同じです。
files[]: 結果ファイルごとの{ fileId, downloadUrl }。GET /api/v3/orders/{orderId}のresult.outputFiles[]と同じファイルを同じ順序で含み、fileIdも同じですarchiveUrl: この URL 1 つで結果全体を受け取れます。常に文字列です- Anti-AI の注文、v2 で作成した watermark 埋め込み注文: 結果の ZIP
- v3 で作成した watermark 埋め込み注文: 結果ファイルが 2 件以上なら ZIP、1 件ならその結果ファイルの URL(
files[0].downloadUrlと同じファイル)
expiresInSeconds: URL の有効期間。既定は 3600 秒(1 時間)で、保管期限(expiresAt)までの残り時間のほうが短い場合はその時間に短縮します。新しい URL が必要な場合は再度呼び出してください
エラーの確認順序(最初に該当したエラーを返します)
- 注文が存在しないか、他のアカウントの注文 →
404 ORDER_NOT_FOUND - watermark 検出・AI Detection の注文 →
400 ORDER_TYPE_CANT_DOWNLOAD。保管期限が過ぎていてもこのエラーです - 保管期限切れ →
400 ORDER_EXPIRED。保管期限を確認できない場合は409 FILE_RETENTION_UNKNOWN statusがcompleteではない(pending、inProgress、failed) →400 ORDER_NOT_COMPLETED
以前の v3 レスポンスからの変更(破壊的変更、2026-10-08): レスポンスは { downloadUrl, expiresInSeconds: 300 } から { archiveUrl, files, expiresInSeconds } に変わり、Anti-AI の注文と v2 で作成した watermark 埋め込み注文にも対応しました。URL の有効期間は 300 秒から最大 3600 秒に延びました。未完了の注文は VALIDATION_FAILED の代わりに ORDER_NOT_COMPLETED を、検出注文は ORDER_TYPE_CANT_DOWNLOAD を返します。結果ファイルを 1 つ受け取る GET /api/v3/orders/{orderId}/files/{fileId}/download は削除されました。files[] を使用してください。
テストキー(sk_test_): 同じキーで作成した、完了済みの Anti-AI・watermark 埋め込みテスト注文(v2・v3)で動作します。URL は処理結果ではなく、https://api.bizmori.com/api/v2/test-samples/{signedToken} で提供されるサンプルファイルを指します。結果ファイルのない Anti-AI テスト注文は files: [] とサンプル ZIP の archiveUrl を返します。結果が 1 件の v3 埋め込みテスト注文はそのサンプルファイルを、それ以外のテスト注文はサンプル ZIP を archiveUrl として返します。expiresInSeconds、エラーコード、確認順序は本番注文と同じです。
curl -X GET https://api.bizmori.com/api/v3/orders/ORDER_ID/download \
-H "Authorization: Bearer YOUR_API_KEY"const orderId = 'ORDER_ID';
const response = await fetch(`https://api.bizmori.com/api/v3/orders/${orderId}/download`, {
headers: { 'Authorization': 'Bearer YOUR_API_KEY' }
});
const { data } = await response.json();
import requests
order_id = 'ORDER_ID'
response = requests.get(
f'https://api.bizmori.com/api/v3/orders/{order_id}/download',
headers={'Authorization': 'Bearer YOUR_API_KEY'}
)
data = response.json()['data']
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.bizmori.com/api/v3/orders/{orderId}/download",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.bizmori.com/api/v3/orders/{orderId}/download"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.bizmori.com/api/v3/orders/{orderId}/download")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.bizmori.com/api/v3/orders/{orderId}/download")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"archiveUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/zip/1001/archive.zip?X-Amz-...",
"files": [
{
"fileId": "21",
"downloadUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/out/cat.png?X-Amz-..."
},
{
"fileId": "22",
"downloadUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/out/dog.png?X-Amz-..."
}
],
"expiresInSeconds": 3600
}
}GET /api/v3/orders/{orderId}/files/{fileId}/download は削除されました。以前のレスポンスからの変更を確認してください。レスポンスのフィールド
| フィールド | 型 | 説明 |
|---|---|---|
archiveUrl | string | 結果全体を受け取る URL。常にあります |
files[] | array | 結果ファイルごとの { fileId, downloadUrl } |
expiresInSeconds | integer | URL の有効期間(秒)。最大 3600 |
files[] は、注文詳細を取得の result.outputFiles[] と同じファイルを同じ順序で含み、fileId も同じです。fileId を使って、各 URL を結果ファイルとその inputFileId に対応付けてください。
archiveUrl が指すファイル
| 注文 | archiveUrl |
|---|---|
| Anti-AI | すべての結果ファイルの ZIP |
| v2 で作成した watermark 埋め込み | すべての結果ファイルの ZIP |
| v3 で作成した watermark 埋め込み、結果ファイル 2 件以上 | すべての結果ファイルの ZIP |
| v3 で作成した watermark 埋め込み、結果ファイル 1 件 | その結果ファイル(files[0].downloadUrl と同じファイル) |
archiveUrl は結果ファイル 1 つか全体の ZIP のどちらかなので、1 つのダウンロードボタンにそのまま割り当てられます。
URL の有効期間
URL は 3600 秒(1 時間)有効です。注文の保管期限(expiresAt)がそれより先に来る場合は残り時間に短縮し、短縮した値を expiresInSeconds に入れます。URL は保存せず、ダウンロードするたびにこのエンドポイントを呼び出してください。
例
{
"data": {
"archiveUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/zip/1001/archive.zip?X-Amz-...",
"files": [
{
"fileId": "21",
"downloadUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/out/cat.png?X-Amz-..."
},
{
"fileId": "22",
"downloadUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/out/dog.png?X-Amz-..."
}
],
"expiresInSeconds": 3600
}
}
{
"data": {
"archiveUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/out/logo.png?X-Amz-...",
"files": [
{
"fileId": "201",
"downloadUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/out/logo.png?X-Amz-..."
}
],
"expiresInSeconds": 3600
}
}
{
"data": {
"archiveUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/archive/2001.zip?X-Amz-...",
"files": [
{
"fileId": "201",
"downloadUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/out/logo-1.png?X-Amz-..."
},
{
"fileId": "202",
"downloadUrl": "https://bucket.s3.ap-northeast-2.amazonaws.com/out/logo-2.png?X-Amz-..."
}
],
"expiresInSeconds": 3600
}
}
すべての結果ファイルをダウンロードする
import { writeFile } from 'node:fs/promises';
const headers = { Authorization: 'Bearer YOUR_API_KEY' };
const base = `https://api.bizmori.com/api/v3/orders/${orderId}`;
const { data: order } = await (await fetch(base, { headers })).json();
const { data: download } = await (await fetch(`${base}/download`, { headers })).json();
// files[] と result.outputFiles[] は fileId の値と順序が一致します。
const names = new Map(order.result.outputFiles.map((file) => [file.fileId, file.fileName]));
for (const { fileId, downloadUrl } of download.files) {
const res = await fetch(downloadUrl);
await writeFile(`${fileId}-${names.get(fileId)}`, Buffer.from(await res.arrayBuffer()));
}
import requests
headers = {'Authorization': 'Bearer YOUR_API_KEY'}
base = f'https://api.bizmori.com/api/v3/orders/{order_id}'
order = requests.get(base, headers=headers).json()['data']
download = requests.get(f'{base}/download', headers=headers).json()['data']
# files[] と result.outputFiles[] は fileId の値と順序が一致します。
names = {f['fileId']: f['fileName'] for f in order['result']['outputFiles']}
for item in download['files']:
res = requests.get(item['downloadUrl'])
with open(f"{item['fileId']}-{names[item['fileId']]}", 'wb') as out:
out.write(res.content)
エラー
次の順序でエラーを確認し、最初に該当したエラーを返します。| 順序 | 条件 | HTTP | code |
|---|---|---|---|
| 1 | 注文が存在しないか、他のアカウントの注文 | 404 | ORDER_NOT_FOUND |
| 2 | watermark 検出・AI Detection の注文(保管期限が過ぎていても同じ) | 400 | ORDER_TYPE_CANT_DOWNLOAD |
| 3 | 保管期限切れ | 400 | ORDER_EXPIRED |
| 3 | 保管期限を確認できない | 409 | FILE_RETENTION_UNKNOWN |
| 4 | status が pending、inProgress、failed | 400 | ORDER_NOT_COMPLETED |
orderId の形式が正しくない場合は 400 VALIDATION_FAILED を返します。
以前のレスポンスからの変更
2026 年 10 月 8 日から、このエンドポイントは上記の形式で応答します。後方互換性のない変更です。| 以前の動作 | 現在 |
|---|---|
レスポンス { downloadUrl, expiresInSeconds } | { archiveUrl, files, expiresInSeconds }。downloadUrl の代わりに archiveUrl |
| v3 の watermark 埋め込み注文のみ対応 | Anti-AI の注文と、v2・v3 で作成した watermark 埋め込み注文に対応 |
| URL は 300 秒有効 | 最大 3600 秒。保管期限までに制限 |
未完了の注文: 400 VALIDATION_FAILED | 400 ORDER_NOT_COMPLETED |
| watermark 検出・AI Detection の注文: 非対応 | 引き続き非対応で、専用のエラー 400 ORDER_TYPE_CANT_DOWNLOAD を返す |
結果ファイルを 1 つ受け取る GET /api/v3/orders/{orderId}/files/{fileId}/download | 削除。このエンドポイントの files[] を使用 |
GET /api/v2/orders/{orderId}/download は、以前のレスポンスをそのまま返します。
テストキー
sk_test_ キーで呼び出すと、同じキーで作成した完了済みの Anti-AI・watermark 埋め込みテスト注文で動作します。URL は処理結果ではなく、固定のサンプルファイルを指します。テスト API キーを参照してください。承認
外部クライアントアクセス用のBearer APIキー。本番キーは sk_ プレフィックスを使用し、テストキーは sk_test_ プレフィックスを使用して、処理やクレジット消費なしに注文ライフサイクルを検証します。
パスパラメータ
注文 ID
^[0-9]{1,20}$レスポンス
結果ファイルごとの URL と結果全体の URL
Hide child attributes
Hide child attributes
結果全体を一度に受け取る URL。Anti-AI の注文と v2 の watermark 埋め込み注文では結果の ZIP です。v3 の watermark 埋め込み注文では、結果ファイルが 2 件以上なら ZIP、1 件ならその結果ファイルの URL(files[0].downloadUrl と同じファイル)です
URL の有効期間(秒)。既定は 3600 秒で、expiresAt までの残り時間のほうが短い場合はその時間に短縮します
x <= 36003600