紹介
LINE Blockchain Developers APIはREST APIであり、HTTPSで通信します。プラットフォームに関係なくHTTPSをサポートすると、どこでもAPIを呼び出すことができます。
APIを呼び出す際には、有効なAPI keyとAPI secretが必要です。これは、LINE Blockchain Developersコンソールで発行できます。API keyとAPI secretをAPI呼び出しに使用する方法は、リクエストヘッダーを参照してください。
Endpoint
LINE Blockchain Developers APIのendpoint形式は、以下のとおりです。
https://{host}/{api-path}?{query-string}
host
は、APIサーバーのホストです。以下から選択できます。- Testnet:
test-api.blockchain.line.me - Mainnet:
api.blockchain.line.me
- Testnet:
api-path
は、呼び出すAPIのパスです。各endpointの詳細説明から確認できます。APIバージョンもapi-path
の中に含まれます。query-string
は、クエリパラメータのセットです。各パラメータは、「&」で区切るkey=value
のペアです。
リクエスト
LINE Blockchain Developers APIのリクエストは、以下のプロトコルに従います。
- すべてのAPIリクエストは、HTTPSで送信します。
- パラメータは、パス、クエリまたはJSON形式のリクエストボディで送信できます。
LINE Blockchain Developer v2.8.0からは、クエリパラメータをURIエンコードする必要はありません。
- サーバー時刻の取得を除いたすべてのAPIリクエストは、必ず署名が必要です。正しく署名されていないAPIリクエストは処理しません。詳細は、認証を参照してください。
- レート制限を超えるリクエストを送ると、エラーを返します。
- すべてのサービスプランは基本的にMainnetで50 TPS、Testnetで20TPSのレート制限を提供します。
- レート制限が適用されるAPIを確認するには、APIリファレンスの概要または個別のendpointの詳細を参照してください。
- レート制限値は、今後変更されることがあります。
リクエストヘッダー
リクエストボディをパラメータとして使用するAPIは、HTTPヘッダーのContent-Type
を"application/json"に設定する必要があります。
認証が必要なAPIは、リクエストヘッダーでservice-api-key
、signature
、timestamp
、nonce
を送信する必要があります。各項目に入る値と有効性を確認する方法は、認証を参照してください。
プロキシサーバーを使用する際に
Host
ヘッダーを入力する
Host
は、基本的にすべてのHTTP/1.1リクエストに含まれるべき必須ヘッダーで、リクエストするサーバーの基本URLと同様に入力します。ほとんどHTTPクライアントにより自動入力されますが、独自のプロキシサーバーを使用する場合は異なる可能性がありますので、必ずリクエストするサーバーの基本URLを入力してください。
- Testnet:test-api.blockchain.line.me
- Mainnet:api.blockchain.line.me
HTTPリクエストヘッダー
Host
の詳細は、W3C RFC2616で確認できます。
以下に、リクエストHTTPヘッダーの例を示します。
Host: api.blockchain.line.me
Content-Type: application/json
service-api-key: <your api key>
signature: <the user generated message signature>
timestamp: <a timestamp for your request>
nonce: <a nonce value>
リクエストボディ
特定のendpointは、リクエストボディでパラメータを渡すことができます。リクエストボディは、JSONオブジェクトの形で、キーの名前はcamel caseで表記します。
以下に、リクエストボディの例を示します。
{
"ownerAddress": "link000000000000000000000000000000000000000",
"ownerSecret": "uuOtZ+RIgn009pDlnx+fmqlH9nzYJMvoUPE9Kz37m4w=",
"toAddress": "link000000000000000000000000000000000000000",
"value": "1234567890"
}
レスポンス
LINE Blockchain Developers APIは、HTTPステータスコード, レスポンスヘッダー、レスポンスボディでリクエストの結果を返します。
レスポンスヘッダー
レスポンスヘッダーには、レート制限の情報が含まれます。レート制限が適用されているAPI endpointを呼び出すときに取得できます。
Attribute | Type | Description | Required |
---|---|---|---|
X-RateLimit-Replenish-Rate | Integer | 1秒あたりの可能なリクエスト数。 レート制限. | Optional |
X-RateLimit-Remaining | Integer | 今後1秒間送信できる残りのリクエスト数 | Optional |
レスポンスボディ
レスポンスボディは、リクエスト結果の詳細を含むJSONオブジェクトで、以下のような属性が含まれています。
Attribute | Type | Description | Required |
---|---|---|---|
responseTime | Timestamp | APIサーバーの応答時刻。ミリ秒単位のUTC Unix Epochです。 | Required |
statusCode | Integer | レスポンス結果。API status codeを参照してください。 | Required |
statusMessage | String | statusCode に対応する詳細応答メッセージ | Required |
responseData | Object | リクエストの実際の結果データ | Optional |
成功レスポンス
APIリクエストが成功すると、サーバーはHTTPステータスコードで"200 OK"または"202 Accepted"を返します。
成功したAPIリクエストのレスポンスボディは、statusCode
を"1000"または"1002"に設定し、実際の結果データはresponseData
として含まれます。
以下に、成功したAPIリクエストの例を示します。
{
"responseTime": 1581866404449,
"statusCode": 1000,
"statusMessage": "Success",
"responseData": {
...
}
}
トランザクションが発生するAPIリクエストは、リクエストに問題がない場合、"202 Accepted"を返します。これは、リクエストが受け入れられたという意味で、トランザクションが確定(confirmed)されたという意味ではありません。リクエストに対する実際の処理結果は、トランザクションが確定されてから受け取ることができます。詳しくは、Callback応答を参照してください。
失敗レスポンス
APIリクエストにエラーがある場合、サーバーはこれを失敗とみなしてエラーの原因に対応するstatus codeを返します。
失敗したAPIリクエストのレスポンスボディはエラー情報を返し、その際にresponseData
は表示されません。
以下に、失敗したAPIリクエストのレスポンスボディの例を示します。
{
"responseTime": 1575357343316137,
"statusCode": 4010,
"statusMessage": "Service-api-key required"
}
ステータスコード
LINE Blockchain Developers APIは、HTTP ステータスコードごとにAPI ステータスコード(statusCode)とメッセージ(statusMessage)を提供します。以下の表を参照してください。
HTTP status code | statusCode | statusMessage | Description |
---|---|---|---|
200 | 1000 | Success | リクエストが正常に反応しました |
202 | 1002 | Accepted |
| トランザクションのリクエストが正常に受信されました。
202 | 1020 | Transaction not confirmed | txHash に当たるトランザクションがまだ確定(confirm)されていません | 入力した
400 | 4000 | Bad request / Bad request: ${cause} | クライアントからのリクエストに正しくないデータがある。応答とともに詳しい原因(${cause})を返すこともあります。 |
400 | 4002 | Address and UserId both in request | toAddress とtoUserId がすべて入力されました | リクエストボディに
400 | 4010 | Service-api-key required | service-api-key がありません | HTTPヘッダーに
400 | 4011 | Signature required | signature がありません | HTTPヘッダーに
400 | 4016 | Invalid wallet address: ${walletAddress} | ウォレットアドレスが正しくありません |
400 | 4017 | Invalid wallet secret | ウォレットsecretが正しくありません。 |
400 | 4018 | Owner wallet only available | 入力したownerAddressがowner walletのaddressではありません |
400 | 4021 | Timestamp required | timestamp がありません | HTTPヘッダーに
400 | 4022 | Invalid timestamp format | timestamp の形式が正しくありません | HTTPヘッダーの
400 | 4023 | Request timestamp too late | timestamp の値がサーバー時間より5分以上遅い (serverTime > リクエストのtimestamp + 5分`) | HTTPヘッダーの
400 | 4024 | Request timestamp too fast | timestamp の値がサーバー時間より5分以上早い (serverTime + 5分 < リクエストのtimestamp ) | HTTPヘッダーの
400 | 4031 | Nonce required | nonce がありません | HTTPヘッダーに
400 | 4032 | Duplicated nonce | 11分以内に使用されたnonce値を再利用しましましました |
400 | 4033 | Invalid nonce format | HTTPヘッダーに入力したnonce値の形式が無効です |
400 | 4060 | Transaction not acceptable | リクエストしたトランザクションの形式が無効です |
400 | 4100 | Please find responseData for details | responseData で確認できます。(FINSCHIA Voucher APIは、FINSCHIA Reward programに参加したサービスにのみ提供されるクローズドAPIです。) | FINSCHIA Voucher APIリクエストの処理中にエラーが発生しました。エラーの原因は、
400 | 4295 | Too many contract creation request over limit | サービスに許可されている最大のアイテムトークンコントラクトの数を超えました。 |
401 | 4012 | Invalid service-api-key | service-api-key と一致するAPI keyがありません | HTTPヘッダーに入力した
401 | 4013 | Invalid signature | signature が無効です | HTTPヘッダーに入力した
401 | 4014 | Service experiencing an issue. ${cause} |
| サービスが正常に利用できる状態ではありません。状況に応じて詳しい原因(${cause})を返すこともあります。${cause}の例は以下のとおりです。
401 | 4015 | Service wallet not owned by the given service-api-key | service-api-key に対応されるサービスでは、入力したサービスウォレットを使用できません | 当該
403 | 4034 | Item token proxy already set up | プロキシを設定しました | ユーザーが当該アイテムトークンに対してすでに
403 | 4035 | Requesting user blocked from DOSI Wallet | リクエストしたユーザーはDOSI Walletがアカウントブロックされており、トランザクションを発生できません |
403 | 4036 | Authorization not completed | ユーザーにリクエストしたDOSI Walletの認証が完了できません |
403 | 4037 | Target user blocked from DOSI Wallet: ${userId} | 受信ユーザー(${userId})のDOSI Walletのアカウントがロック状態で受信できません |
403 | 4039 | DOSI Wallet user account locked: ${userId} | 入力したユーザー(${userId})のDOSI Walletのアカウントがロック状態 |
403 | 4082 | Not registered test user: ${userId} | [Testnet only] テストユーザーとして登録されていないユーザーには転送できません |
403 | 4083 | Not registered test user wallet or service wallet: ${walletAddress} | [Testnet only] テストユーザーとして登録されているユーザーウォレットでもなく、サービスウォレットでもないウォレットアドレスには転送できません |
404 | 4001 | Service not found | サービスIDを持つサービスがありません | 当該
404 | 4038 | User is not an DOSI Wallet member: ${userId} | ユーザー(${userId})がDOSI Walletに登録していません |
404 | 4040 | Transaction not found | txHashに該当されるトランザクションが存在しません | 入力した
404 | 4041 | Service wallet not found: ${walletAddress} | 入力したアドレス${walletAddress}を持つサービスウォレットが存在しません |
404 | 4042 | Non-fungible token not owned | contractId , tokenType , tokenIndex を持つNFTを所有していません | 入力した
404 | 4044 | Item token contract not found | contractId がありません | 入力した
404 | 4045 | Item token type not found | tokenType が当該contractにありません | 入力した
404 | 4046 | Item token index not found | tokenIndex が当該contractのtokenType にありません | 入力した
404 | 4048 | Request session token not found | request session tokenが存在しないか満了しました | 入力した
404 | 4049 | Non fungible item token burned | 当該NFTが焼却されました |
404 | 4051 | User not found: ${userId} | user ID}と一致するユーザーがいません(サービスから退会したユーザーにもこのメッセージを返します) | 当該${
404 | 4061 | Multi message out of bound | マルチメッセージのサイズが最大値を超えています |
413 | 4131 | Payload too large | リクエストボディがサーバーで処理できる限度を超えています |
415 | 4151 | Unsupported media type | Content-type が"application/json"ではないか、リクエストボディがJSON形式ではありません | HTTPヘッダー
429 | 4291 | Too many requests from a single wallet | 一つのウォレットでトランザクションのリクエストが多すぎて処理できません |
429 | 4292 | No waiting area available | リクエストしたトランザクション(メッセージ)が処理キューに入ることができません。アイドル状態のノードを待つ必要があります。再試行してください |
429 | 4293 | Rate limit exceeded | サービスに許可されたレート制限を超えています |
429 | 4294 | Too many request over limit | サービスに許可されたレート制限を超えています |
500 | 5000 | Internal server error |
|
500 | 5001 | Internal server error (possible broadcast of transaction) | 内部サーバーのエラー。トランザクションがブロードキャストされた可能性があります。 |
501 | 0 | Not implemented | サポートしないAPIへのアクセス |
503 | 5030 | Service temporarily unavailable | 内部の問題により、一時的にサービスをご利用いただけません。ご不便をおかけしますが、復旧までしばらくお待ちください。 |