メインコンテンツまでスキップ

ファイルアップロード

ウォレットにファイルを取り込む際は、複数のエンドポイントを組み合わせた3ステップのフローを実施します。 ファイルはRIKYUサーバーを経由せず、クライアントから GCS(Google Cloud Storage)へ直接アップロード する方式です。

フロー概要

[1] POST /v1/wallets/{wallet-id}/upload-csv/presigned-urls
└─ 署名付きURLとfilePathを取得

[2] PUT {uploadUrl}
└─ GCSへファイルを直接アップロード(RIKYUサーバー経由なし)

[3] POST /v1/wallets/{wallet-id}/upload-csv
└─ アップロード済みファイルの処理を開始(非同期)

[4] GET /v1/async-events/{async-event-id}
└─ 処理完了をポーリングで確認

Step 1: 署名付きURLの取得

POST /v1/wallets/{wallet-id}/upload-csv/presigned-urls を呼び出し、アップロード先の署名付きURLとファイルパスを取得します。

リクエスト

curl -X POST "https://api.rikyu.jp/v1/wallets/42/upload-csv/presigned-urls" \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: application/json" \
-d '{
"files": [
{
"index": 0,
"fileName": "transactions.csv",
"contentType": "text/csv"
}
]
}'
フィールド説明
files[].indexnumberファイルの識別インデックス(0始まり)。複数ファイルを一括取得する際に使用
files[].fileNamestringファイル名(拡張子付き)
files[].contentTypestringコンテントタイプ(例: text/csv

レスポンス

{
"uploadUrls": [
{
"index": 0,
"uploadUrl": "https://storage.googleapis.com/rikyu-uploads/...",
"filePath": "uploads/company-id/wallet-id/uuid.csv"
}
]
}
フィールド説明
uploadUrls[].indexリクエスト時に指定したインデックス
uploadUrls[].uploadUrlGCSへのPUTリクエスト用署名付きURL(有効期限あり)
uploadUrls[].filePathStep 3で使用するファイルパス

注意: uploadUrl には有効期限があります。取得後すぐにStep 2を実施してください。


Step 2: GCSへのファイルアップロード

Step 1で取得した uploadUrl に対して、PUT リクエストでファイルを直接アップロードします。 このリクエストはRIKYUサーバーではなく GCS に対して行います。

curl -X PUT "{uploadUrl}" \
-H "Content-Type: text/csv" \
--data-binary @transactions.csv

アップロード成功時はHTTPステータス 200 が返ります。


Step 3: アップロード処理の開始

POST /v1/wallets/{wallet-id}/upload-csv を呼び出し、アップロード済みファイルの処理を開始します。 Step 1で取得した filePath を指定します。

リクエスト

curl -X POST "https://api.rikyu.jp/v1/wallets/42/upload-csv" \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: application/json" \
-d '{
"filePaths": ["uploads/company-id/wallet-id/uuid.csv"]
}'

レスポンス(202 Accepted)

{
"results": [
{
"index": 0,
"filePath": "uploads/company-id/wallet-id/uuid.csv",
"status": "ACCEPTED",
"asyncEventId": "01ABCDEFGHIJKLMNOPQRSTUVWX",
"errorCode": null,
"errorMessage": null
}
]
}
status説明
ACCEPTEDファイルの形式が有効で、バックグラウンドで処理が開始された
FAILEDファイルの形式が不正など、処理を開始できなかった。errorCode / errorMessage に原因が含まれる

FAILED の場合、他のファイルの処理には影響しません(各ファイルは独立して評価されます)。


Step 4: 処理完了の確認

statusACCEPTED の場合、処理はバックグラウンドで非同期に実行されます。 asyncEventId を使って GET /v1/async-events/{async-event-id} をポーリングし、完了を確認します。

curl -X GET "https://api.rikyu.jp/v1/async-events/01ABCDEFGHIJKLMNOPQRSTUVWX" \
-H "Authorization: Bearer <api_key>"
{
"asyncEventId": "01ABCDEFGHIJKLMNOPQRSTUVWX",
"asyncEventStatus": "COMPLETED",
"errorCode": null,
"errorMessage": null
}

asyncEventStatusCOMPLETED になるまで 5〜30 秒間隔 でポーリングすることを推奨します。 詳細は 非同期イベント を参照してください。


複数ファイルの一括アップロード

Step 1 の files 配列に複数要素を指定することで、複数ファイルを一度に処理できます。

# Step 1: 複数ファイル分の署名付きURLを一括取得
curl -X POST "https://api.rikyu.jp/v1/wallets/42/upload-csv/presigned-urls" \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: application/json" \
-d '{
"files": [
{ "index": 0, "fileName": "transactions_2024.csv", "contentType": "text/csv" },
{ "index": 1, "fileName": "transactions_2025.csv", "contentType": "text/csv" }
]
}'
# Step 3: 全ファイルの filePath をまとめて指定
curl -X POST "https://api.rikyu.jp/v1/wallets/42/upload-csv" \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: application/json" \
-d '{
"filePaths": [
"uploads/company-id/wallet-id/uuid1.csv",
"uploads/company-id/wallet-id/uuid2.csv"
]
}'

各ファイルは独立して処理されます。一部が FAILED でも、他のファイルは ACCEPTED になります。


エラーケース

ケースHTTPステータス対処
ウォレットが存在しない404wallet-id を確認する
書き込み権限がない403WRITE権限を持つAPIキーを使用する
ファイル形式が不正202 / status: FAILEDerrorMessage を確認してファイルを修正する
uploadUrl の有効期限切れStep 2で 4xxStep 1からやり直す