Why 'sent' and 'received' are separate claims on Lightning
Worth unpacking properly, because this comes round every few weeks and the thread always ends with two people talking past each other.
A swap service marks a payout sent when its node gets a preimage back. That is a real cryptographic fact: somebody on the route revealed the secret that unlocks the payment. What it does not establish is that the final hop delivered to the invoice you think it delivered to. In practice, the overwhelming majority of the time, it did. But 'the sender saw a preimage' and 'the recipient has the sats' are different statements, and a sender can only ever honestly make the first one.
The four things it actually is, in the order I would check
- No inbound liquidity. Your channels are full on your side, the payment could not be routed to you at all, and nothing settled. If this is it, the service has a failed attempt in their log — that is the thing to ask for.
- A second wallet on the same seed. More common than anyone admits. A seed restored onto a phone months ago, forgotten, quietly answering invoices.
- An expired invoice. If you generated it well before the swap completed, some services retry, some silently drop, and a few mark the order done anyway because the retry logic and the status field are not the same piece of code.
- A genuinely stuck HTLC. Rare. Resolves when the channel force-closes or the timeout expires, and it shows in your pending channel state rather than in your invoice list.
What to put in the ticket
Ask for the payment hash and the failure reason from their node's log. Not the order ID — the payment hash. A service that cannot produce one either is not logging properly or is not going to help you, and both are useful to establish in the first reply rather than the ninth day.
I have not tested this against a service that flatly refuses to hand over payment hashes, so I do not know what the second move is if they say no.
Summary: a preimage proves settlement happened, not that it happened to you. Get the payment hash, check your own invoice list first, and assume inbound liquidity before you assume malice.