Payday is an intent, not a spreadsheet upload.
The agent reads the approved contractor list, validates each payee's Pix key and tax ID, and pays the run over Pix inside a payroll mandate with a monthly cap. Every payout gets its own receipt, and the run closes reconciled to the ERP with nothing left in a pending column.
One run. Twenty-four receipts. Zero pending.
The June run, end to end: every payee validated before a cent moves, every transfer executed over Pix under the payroll mandate, every receipt sealed and matched to its ERP entry. A stale key fails fast at validation — before payment, not after a bank reject.
- Payees validated up front — a stale key never reaches the rail
- The mandate caps the month; the run stops at the ceiling, by construction
- Each payout sealed with its own receipt and reconciled to the ERP
Run the June contractor payroll.
24 contractors on the approved list — validating keys and tax IDs, then paying over Pix inside the payroll mandate.
The conversation is the easy part.
Contractor payroll in LATAM is a monthly ritual: export a spreadsheet, generate a CNAB file, upload it to the bank portal, fix the rejects, and reconcile by hand. It works until a key is stale, a name mismatches, or the same file gets uploaded twice — and every failure surfaces after the money already tried to move.
Build a CNAB file and upload it to the bank portal every month
One intent: the agent runs the whole payroll over Pix
Discover stale keys as bank rejects, after the run
Every payee's key and tax ID validated before payment
Trust that nobody fat-fingers the total or uploads twice
The payroll mandate caps the month; excess simply does not execute
Reconcile the run against the ERP entry by entry, by hand
codespar_ledger matches all 24 receipts back automatically
One intent. The whole run, governed.
codespar_kyc validates every payee before the run starts. codespar_wallet confirms the payroll mandate has room for the total. codespar_pay executes the transfers over Pix, one receipt per payee, and codespar_ledger reconciles the run against the ERP so payday ends settled, matched and sealed.
24 approved contractors
codespar_kycKeys + tax IDs checked
KYC railcodespar_walletRun fits the mandate
Policy enginecodespar_pay24 × Pix · one receipt each
Pix railcodespar_ledgerMatched to ERP entries
Audit ledgerThe approved list enters from the ERP or a sheet. The agent validates every payee, checks the run's total against the payroll mandate's monthly cap, then executes the transfers over Pix. Settlement correlation matches each confirmation to its payee and ERP entry, and the run seals as one record with 24 receipts inside.
A few lines. The whole loop.
const session = await codespar.sessions.create(); const run = await session.execute("codespar_pay", { batch: contractors.map((c) => ({ amount: c.monthlyFee, destination: c.pixKey, // validated before the run starts reference: `RUN-06/${c.id}`, })), mandate: "cm_payroll", // monthly cap · revocable }); // 24 transfers, 24 receipts, one sealed run — // reconciled against the ERP entry by entry
codespar_payExecutes the run over Pix, one sealed receipt per payee.
codespar_walletChecks the run against the payroll mandate's monthly cap before paying.
codespar_kycValidates every payee's key and tax ID before the run starts.
Ship it this afternoon.
Open the sandbox, point a session at your providers, and run the whole loop against real rails in minutes — not the quarter it takes to build it by hand.