paid with applied: false is normal. It’s where a deposit sits between the customer paying and you issuing the invoice.
The lifecycle
paid isn’t always final:
- If a bank debit is returned, you get
deposit_link.payment_failed, and the link goes back toopenso the customer can try again on the same URL. If its expiry has passed, it becomesexpiredinstead. - If a payment attached to the link by hand is taken off again, usually because it was the wrong one, you get
deposit_link.payment_removedand the link isopenagain.
paid, and undo what you did if one of these follows.
1. Create the link
short_url, or url if short_url is null. Send an Idempotency-Key so a retried request returns the same link instead of a second one. See Create deposit link.
2. Hear when it’s paid
Register a webhook endpoint fordeposit_link.paid and the other deposit events. Each event carries the link as Retrieve deposit link returns it, so you can read status, paid_at and payment straight from it.
Money can also arrive outside the link, as a wire, ACH credit, or check. When it’s matched to the link, the link turns paid the same way. payment.attached_by tells you how: null if the customer paid through the link, merchant if someone on your team attached it, or auto_match if Streamlined matched it. payment.amount is what actually arrived, which can differ from what you asked for.
3. Apply it to the invoice
Once you’ve issued the invoice, put the deposit against it:paid: the money is applied now. You get200withapplied: true, andpayment.invoice_identifiernames the invoice.processing: the deposit is queued. You get202withapply_to_invoice_uuidset, and it’s applied when the bank debit settles. Until then the invoice shows it as a payment on its way, so automatic charges don’t take the same money twice.
Has Credit. See Invoice status and aging.
Cancel a link
Cancel deposit link stops anopen link from taking money. The link is kept, with status: canceled, so you can still look it up.