Payables overview
What a payable is in the Wingspan V3 API, how it relates to an invoice, and the ways you can pay one.
This page explains what a payable is, how it fits with payees, engagements, and invoices, and which paths you can use to pay one.
Payers, payees, and payables
A payer is the Account that sends money. A payee is the person or business it pays. In V1 these were the client and the member (or collaborator). In V3:
- Your company is an Account. When you pay someone, you are the payer.
- Each person or business you pay is a Payee: your own record of that counterparty. A Payee can be paid before the person has created or linked a Wingspan Account. See Payees.
- A PayeeEngagement is the working relationship a payment is made under, such as a contractor engagement. Eligibility requirements (tax information, signed documents, payout method) are tracked per engagement. See Engagements.
- A Payable is one payment obligation from you to one Payee.
Payable and invoice are two views of one document
A payable and an invoice are the same underlying document seen from opposite sides. You, the payer, see a Payable at /v3/payments/payables. Your payee sees the same document as an Invoice at /v3/payments/invoices. When a contractor invoices you, the invoice they send shows up in your payables list. When you create a payable, it shows up in the contractor's invoices once you open it.
Because the document is shared, some fields belong to one side. The creator controls the shared fields such as line items and due date. Payer-specific fields, such as your approval decision, are editable only by you. Lifecycle and payment fields are set by Wingspan. See Components of a payable.
Ways to pay a payable
| Path | Use it when | How |
|---|---|---|
| Pay one payable directly | You want one payment to go out now | POST /v3/payments/payables/{payableId}/pay. See Create a payable. |
| Payroll run | You want to pay many approved payables in one funded movement | Payroll runs |
| Bulk import | You have many payables to create from a spreadsheet or another system | Bulk payables |
| Record an off-platform payment | You already paid by check, wire, or another method outside Wingspan | POST /v3/payments/payables/{payableId}/pay-off-platform |
Payables can also come from other resources. An approved work log for a contractor engagement produces a payable, and a recurring payable generates one each period.
The basic flow
sequenceDiagram
participant Payer as Payer (your Account)
participant WS as Wingspan
participant Payee
Payer->>WS: POST /v3/payments/payables (status Created)
Payer->>WS: POST /payables/{id}/open
WS-->>Payee: Payable visible as an Invoice
Payer->>WS: PATCH /payables/{id}/workflow-status (Approved)
Payer->>WS: POST /payables/{id}/pay, or include it in a payroll run
WS-->>Payer: Payable moves to PaymentInTransit, then Paid
WS-->>Payee: Payout to the payee's payout method
- Create the payable. It starts in
Createdand the payee can't see it yet. - Open it. It moves to
Openedand becomes visible to the payee. Opening fails if the payee's engagement hasn't met its payment eligibility requirements. - Approve it. Only payables you mark
Approvedare selected into payroll runs. - Pay it, directly or through a payroll run.
- Reconcile. Read the payable's
statusandevents, or subscribe to thePayable.Paidwebhook.
Paid is not the same as deposited
Paid is Wingspan's internal state. DepositConfirmed means Wingspan's originating bank or provider reported its terminal processed state. It never means the recipient's bank received the money, funds are available, or the payment can't be returned. A payable can still move to Returned after both. See Paid vs DepositConfirmed.
Common mistakes
- Treating
Createdas sent. ACreatedpayable is a draft. The payee can't see it and it can't be paid until you open it. - Forgetting approval. An opened payable that isn't
Approvedis skipped by payroll runs. Nothing errors; it just doesn't get paid. - Burying your own ID in
metadata. Send your system's identifier asexternalId. It's echoed on every read, filterable withfilter[externalId][eq], and a duplicate returns409 ResourceConflictso you can't pay the same bill twice by accident. - Polling for payment status. Subscribe to webhooks and use the event log to catch anything you missed. See Webhooks overview.
Related pages
- Components of a payable
- Payable lifecycle and statuses
- Create a payable
- Invoices overview for the payee's side of the same document
Updated 10 days ago