Skip to content

lightning-createinvoice -- Low-level invoice creation


createinvoice invstring label preimage


The createinvoice RPC command signs and saves an invoice into the database.

The invstring parameter is of bolt11 form, but the final signature is ignored. Minimal sanity checks are done. (Note: if experimental-offers is enabled, invstring can actually be an unsigned bolt12 invoice).

The label must be a unique string or number (which is treated as a string, so "01" is different from "1"); it is never revealed to other nodes on the lightning network, but it can be used to query the status of this invoice.

The preimage is the preimage to supply upon successful payment of the invoice.


(Note: the return format is the same as lightning-listinvoices(7)).

On success, an object is returned, containing:

  • label (string): the label for the invoice
  • payment_hash (hash): the hash of the payment_preimage which will prove payment
  • status (string): Whether it has been paid, or can no longer be paid (one of "paid", "expired", "unpaid")
  • description (string): Description extracted from bolt11 or bolt12
  • expires_at (u64): UNIX timestamp of when invoice expires (or expired)
  • bolt11 (string, optional): the bolt11 string (always present unless bolt12 is)
  • bolt12 (string, optional): the bolt12 string instead of bolt11 (experimental-offers only)
  • amount_msat (msat, optional): The amount of the invoice (if it has one)
  • pay_index (u64, optional): Incrementing id for when this was paid (status paid only)
  • amount_received_msat (msat, optional): Amount actually received (status paid only)
  • paid_at (u64, optional): UNIX timestamp of when invoice was paid (status paid only)
  • payment_preimage (secret, optional): the proof of payment: SHA256 of this payment_hash
  • local_offer_id (hex, optional): the id of our offer which created this invoice (experimental-offers only). (always 64 characters)
  • invreq_payer_note (string, optional): the optional invreq_payer_note from invoice_request which created this invoice (experimental-offers only).

On failure, an error is returned and no invoice is created. If the lightning process fails before responding, the caller should use lightning-listinvoices(7) to query whether this invoice was created or not.

The following error codes may occur: - -1: Catchall nonspecific error. - 900: An invoice with the given label already exists.


Rusty Russell <> is mainly responsible.


lightning-invoice(7), lightning-listinvoices(7), lightning-delinvoice(7), lightning-getroute(7), lightning-sendpay(7), lightning-offer(7).


Main web site: