Sending spontaneous Lightning payments

They can even be spontaneous payments to a node without a bolt11 invoice.

Rust
let node_id = "...".into();

sdk.send_spontaneous_payment(SendSpontaneousPaymentRequest {
    amount_msat: 3_000_000,
    node_id,
    extra_tlvs: None,
})
.await?;
Swift
let response = try? sdk.sendSpontaneousPayment(
    req: SendSpontaneousPaymentRequest(
        nodeId: "...",
        amountMsat: 3_000_000
    ))
Kotlin
val nodeId = "..."
val amountMsat = 3_000_000.toULong()
try {
    val response = sdk.sendSpontaneousPayment(
        SendSpontaneousPaymentRequest(nodeId, amountMsat))
} catch (e: Exception) {
    // handle error
}
React Native
try {
  const nodeId = '...'

  const sendPaymentResponse = await sendSpontaneousPayment({
    nodeId,
    amountMsat: 3000000
  })
} catch (err) {
  console.error(err)
}
Dart
SendSpontaneousPaymentRequest req = SendSpontaneousPaymentRequest(
  amountMsat: 3000000,
  nodeId: nodeId,
);
SendPaymentResponse resp = await BreezSDK().sendSpontaneousPayment(req: req);
Python
node_id = "..."
amount_msat = 3000000

req = breez_sdk.SendSpontaneousPaymentRequest(node_id,amount_msat)
result = sdk_services.send_spontaneous_payment(req)
Go
sendSpontaneousPaymentRequest := breez_sdk.SendSpontaneousPaymentRequest{
    NodeId:     "...",
    AmountMsat: uint64(3_000_000),
}
if response, err := sdk.SendSpontaneousPayment(sendSpontaneousPaymentRequest); err == nil {
    log.Printf("%#v", response)
}
C#
var nodeId = "...";
ulong amountMsat = 3_000_000;
try
{
    var response = sdk.SendSpontaneousPayment(
        new SendSpontaneousPaymentRequest(nodeId, amountMsat));
}
catch (Exception)
{
    // Handle error
}

Adding Extra TLVs to a Spontaneous Payment

A list of extra TLV data can also be sent with the sponaneous payment.

Rust
let node_id = "...".into();
let extra_tlvs = vec![TlvEntry {
    field_number: 34349334,
    value: "Hello world!".as_bytes().to_vec(),
}];

sdk.send_spontaneous_payment(SendSpontaneousPaymentRequest {
    amount_msat: 3_000_000,
    node_id,
    extra_tlvs: Some(extra_tlvs),
})
.await?;
Swift
let extraTlvs = [TlvEntry(fieldNumber: 34_349_334, value: Array("Hello world!".utf8))]
let response = try? sdk.sendSpontaneousPayment(
    req: SendSpontaneousPaymentRequest(
        nodeId: "...",
        amountMsat: 3_000_000,
        extraTlvs: extraTlvs))
Kotlin
val nodeId = "..."
val amountMsat = 3_000_000.toULong()
val extraTlvs = listOf<TlvEntry>(
    TlvEntry(34_349_334.toULong(), "Hello world!".encodeToByteArray().asUByteArray().toList())
)
try {
    val response = sdk.sendSpontaneousPayment(
        SendSpontaneousPaymentRequest(nodeId, amountMsat, extraTlvs))
} catch (e: Exception) {
    // handle error
}
React Native
try {
  const nodeId = '...'
  const extraTlvs: TlvEntry[] = [
    { fieldNumber: 34349334, value: stringToBytes('Hello world!') }
  ]

  const sendPaymentResponse = await sendSpontaneousPayment({
    nodeId,
    amountMsat: 3000000,
    extraTlvs
  })
} catch (err) {
  console.error(err)
}
Dart
List<TlvEntry> extraTlvs = [
  TlvEntry(
    fieldNumber: 34349334,
    value: utf8.encode("Hello world!"),
  )
];
SendSpontaneousPaymentRequest req = SendSpontaneousPaymentRequest(
  amountMsat: 3000000,
  nodeId: nodeId,
  extraTlvs: extraTlvs,
);
SendPaymentResponse resp = await BreezSDK().sendSpontaneousPayment(req: req);
Python
node_id = "..."
amount_msat = 300000
extra_tlvs = [breez_sdk.TlvEntry(34349334, str.encode("Hello world!"))]
try:
    req = breez_sdk.SendSpontaneousPaymentRequest(node_id, amount_msat, extra_tlvs)
    result = sdk_services.send_spontaneous_payment(req)
    return result
except Exception as error:
    print(error)
    raise
Go
value, _ := hex.DecodeString("Hello world!")
extraTlvs := []breez_sdk.TlvEntry{
    breez_sdk.TlvEntry{
        FieldNumber: uint64(34349334),
        Value:       value,
    },
}
sendSpontaneousPaymentRequest := breez_sdk.SendSpontaneousPaymentRequest{
    NodeId:     "...",
    AmountMsat: uint64(3_000_000),
    ExtraTlvs:  &extraTlvs,
}
if response, err := sdk.SendSpontaneousPayment(sendSpontaneousPaymentRequest); err == nil {
    log.Printf("%#v", response)
}
C#
var nodeId = "...";
ulong amountMsat = 3_000_000;
var extraTlvs = new List<TlvEntry>{
    new TlvEntry(34349334, Encoding.ASCII.GetBytes("Hello world!").ToList())
};

try
{
    var response = sdk.SendSpontaneousPayment(
        new SendSpontaneousPaymentRequest(nodeId, amountMsat, extraTlvs));
}
catch (Exception)
{
    // Handle error
}