tgpay cryptoAPI
crypto-payapiinvoicesrefunds

APIリファレンス:請求書と返金

1分で読めます最終更新: 2026年10月9日

請求書のメソッドはcreateInvoice・getInvoices・deleteInvoice・refundInvoiceです。 共通の決まり(認証、レスポンスの形、金額、spend_id)はMerchant APIリファレンスにまとめています。 手順に沿った解説は請求書で支払いを受け取るです。

createInvoice

POST /pay/api/createInvoice、スコープはinvoices、1分間の上限:60。

パラメーター型必須説明
currency_typestring任意crypto(既定)またはfiat
assetstringcryptoモード請求する資産(例USDT)。fiatの代わりに指定します
fiatstringfiatモード価格を表す法定通貨(getCurrenciesのis_fiatの行)
accepted_assetsstring / array任意fiatモードのみ。支払者が使える資産を、カンマ区切りの文字列("USDT,GRAM")かJSON配列で指定します。省略するとすべての対応資産
amountstringopen_amountがなければ必須正の10進数の文字列。cryptoモードでは資産の単位、fiatモードでは法定通貨の単位(小数点以下2桁まで)
open_amountboolean任意拡張、cryptoモードのみ。金額を固定せず、支払者が支払い時に入力します(寄付やチップ向け)。amountとは併用できません
descriptionstring任意1024文字まで。支払者に表示されます
hidden_messagestring任意2048文字まで。支払いが終わったあとだけ支払者に表示されます
payloadstring任意4096文字までの独自データ。請求書とWebhookにそのまま返ります
allow_commentsboolean任意支払者がコメントを付けられるようにします(既定はtrue)
allow_anonymousboolean任意支払者が名前を伏せられるようにします(既定はtrue)
paid_btn_namestring任意支払い後のボタン。viewItem・openChannel・openBot・callbackのいずれか
paid_btn_urlstring任意ボタンのhttp(s)のURL。paid_btn_nameを指定したときは必須
swap_tostring任意受け取った支払いをこの資産へ自動で交換します。ベストエフォートで、支払い時に交換できなければ、交換されないまま支払いは成立します
expires_ininteger任意請求書が期限切れになるまでの秒数。最大2678400(31日)。省略または0で既定の有効期間。結果のexpiration_dateを確認してください
rate_lock_secondsinteger任意拡張、fiatモードのみ。作成時の換算レートをこの秒数だけ固定します(下記)

説明、支払い後のコンテンツ、ボタンは、確認中または未承認の間、支払者に表示されない場合があります。請求書の支払い自体は可能です。

結果、そしてinvoice_paidのWebhookのペイロードは、請求書オブジェクトです。 主なフィールドは次のとおりです。

  • 識別とステータス:invoice_id、hash(pay_urlの中の公開ID)、status(active・paid・expired)、pay_url。 pay_urlは支払者に送るt.meのリンクです(bot_invoice_url・mini_app_invoice_url・web_app_invoice_urlは同じものの別名です)。
  • 金額:amount(額面。法定通貨建ての請求書では法定通貨の単位、それ以外は暗号資産。金額を固定しない請求書が未払いの間はnull)、amount_minor、支払い済みの法定通貨建て請求書ではpaid_asset・paid_amount・paid_fiat_rate(実際に請求した暗号資産と、使われたレート)。
  • 手数料:fee_asset・fee_amount。支払い時に記録され、帳簿にはこの値を使います(feeとusd_rateは非推奨のCrypto Bot互換の別名です)。手数料と限度額で説明しています。
  • 支払者:paid_by_user_id(名前を伏せた場合はnull)・paid_anonymously・comment。
  • 返金(拡張):refunded_amount・refunded_minor(累計)とrefunded_at。 refunded_atは全額返金された時点で記録されます。
  • レート固定(拡張):rate_lock_untilとrate_lock_rates。 資産ごとに記録されたレートで、固定を指定しなかった場合はnullです。
  • 作成時の内容:description・hidden_message・payload・paid_btn_name・paid_btn_url・expiration_date(expires_atは別名)と、交換関連のフィールド(swap_to・is_swapped・swapped_to・swapped_rate・swapped_outputなど)。

エラーは400 invalid_currency(assetとfiatの取り違え)・400 invalid_amount・400 unknown_asset・400 unsupported_fiat・400 paid_btn_url_required、レート固定では400 rate_lock_fiat_only・409 ratelock_disabled・409 rate_unavailable(対応資産の新しいレートがないとき。送り直してください)です。

請求書が支払われるしくみ

支払者はミニアプリでウォレットの残高から支払います。十分な残高と支払いの確認が必要で、成立するとすぐに完了し、ネットワーク手数料はかかりません。外部のウォレットからの入金が選べる場合は、入金アドレスと支払い期限が表示されます。入金は支払者自身のウォレットに反映されます。自動支払いには、そのアドレスへの入金、十分な利用可能残高、送金・出金の制限がないこと、支払い要求と請求書の期限内であることが必要です。遅れて届いた入金は支払者のウォレットに残り、請求書の支払いが済んだことにはなりません。 加盟店側では、通常と同じpaidの請求書になり、Webhook URLを設定していればinvoice_paidイベントを受け取ります。追加のパラメーターやフィールドはありません。

法定通貨建ての請求書では、支払い時点で暗号資産の金額を計算し、選んだ資産の最小単位に切り上げます。その金額から加盟店手数料が引かれます。有効な固定レートも最新のレートもない場合は、古いレートで成立させず、支払いは失敗します。

法定通貨建ての請求書でレートを固定する

rate_lock_secondsを渡すと、作成の時点ですべての対応資産のレートが記録されます。 固定が効いている間、支払者には記録された金額がそのまま表示され、支払いも記録されたレートで換算されます。 その間のレート変動は加盟店側が引き受けます。 指定した時間は、対応する範囲に調整されます。実際の期限は結果のrate_lock_untilを確認してください。

固定が切れても、期限内の請求書は支払い時点のレートで支払えます。両方の期限をそろえるには、固定できる時間の範囲内でexpires_inを指定し、レスポンスのexpiration_dateとrate_lock_untilが一致するか確認してください。

getInvoices

GET /pay/api/getInvoices、スコープはreadです。 絞り込みはasset・fiat・invoice_ids(カンマ区切り)・status(active・paid・expired。expiredは拡張で、activeは期限を過ぎた請求書を含みません)と、offset・countです。 {"items": [invoice, …]}を新しい順に返します。

deleteInvoice

POST /pay/api/deleteInvoice、スコープはinvoicesです。 パラメーターはinvoice_idの1つです。 未払いの請求書をキャンセルしてtrueを返します。 エラーは404 invoice_not_found・409 invoice_already_paidです。 支払い済みの請求書は削除できません。資金がすでに動いているからです。

refundInvoice

POST /pay/api/refundInvoice、スコープはrefunds、1分間の上限:30。Crypto Botに対する拡張です。 実際に支払われた暗号資産の全額、またはその一部を、アプリの残高から支払った相手に返します。 名前を伏せた相手にも、それが誰かを明かさずに返せます。法定通貨建ての請求書ではpaid_assetとpaid_amountを使い、法定通貨から再換算はしません。

パラメーター型必須説明
invoice_idinteger必須支払い済みの請求書
amountstring任意返す暗号資産の金額。元の支払い資産(法定通貨建てではpaid_asset)で指定します。省略すると未返金の残り全額。一部返金の累計は、元の暗号資産の支払額を超えることはできません
spend_idstring任意べき等キー。タイムアウトした再送で二重に返金しないよう、指定してください

結果は、累計のrefunded_amount・refunded_minorが入った請求書オブジェクトです。 refunded_atは全額返金された時点で記録されます。 ステータスはpaidのままです。 サービス手数料は返りません。swap_toで別の資産に交換した場合も、元の支払い資産の残高を十分に用意する必要があります。 受信を有効にしている場合は、返金のたびにrefund_completedのWebhookが送信されます。

エラーは404 invoice_not_found・409 invoice_not_paid・409 already_refunded(返す残りがない)・409 amount_too_big(未返金の残りを超えている)・409 insufficient_funds・400 invalid_amountと、spend_idの409 idempotency_conflict・409 idempotency_in_progressです。