Skip to content

Pay early for a discount

Offer a supplier payment today for a discount Vestiarion suggests from the reserve's yield, through a one-time link; if they accept, the agent pays the discounted amount the same day, after every check.

Most bills carry no early-payment discount, so the agent pays them on their due date and keeps the cash in the reserve until then. Many suppliers would rather be paid today and take a little less for it. An early-payment offer asks them: Vestiarion suggests the discount worth asking, you send the supplier a one-time link, and if they accept, the agent pays the discounted amount the same day.

For your business, 1% off for paying 20 days early is worth about 18% a year, far more than the reserve earns. For the supplier, the money arrives today, on Arc testnet or Arc mainnet as your workspace pays, instead of in three weeks.

Before you start

  • An owner or admin makes an offer. Anyone else sees what each offer would be worth, and "An owner or admin makes the offer."
  • A bill the agent will pay later. An offer is for a bill to pay that the agent has scheduled for a later day, or not decided yet. The bill must have no discount on its invoice, no payment started, and a due date at least 3 days away. A bill held, flagged or waiting for information is yours to decide first, in Approvals.

1.See which bills are worth it

Open Bills & receivables. Above the list, Pay early for a discount shows the bills paid later, each with the discount Vestiarion suggests and what it is worth. For example: "Paying 20 days early for 1.00% is like earning 18.3% a year, above the reserve's 4.2%."

The suggestion is twice what the cash would earn in the reserve by the due date, rounded up to the next 0.25%, from 0.5% to 5%. Asking at least that much makes the discount worth more than keeping the cash, which is also what the agent weighs when it decides the bill.

2.Make the offer

Change the discount if you want (from 0.1% to 10%), then choose Offer this discount for paying today. The card says "Offer made. Send the supplier this link: it works once." and shows the link with Copy the offer link, above the offer out. Send it to the supplier the way you usually write to them. Vestiarion keeps only a hash of the link, so it is shown this once, until you leave the page.

The ledger records early_payment_offered, with the discount, the bill's amount, what the supplier would receive and when the offer lapses.

An offer stands for 7 days, or until the day before the bill falls due if that comes sooner. While it stands, the bill shows "Offer out:" with the discount, what the supplier would receive and until when, and, for an owner or admin, Withdraw. Withdrawing says "Offer withdrawn. The link no longer works." and records early_payment_offer_withdrawn. Making a new offer for the same bill withdraws the one before.

If the bill changed since the page loaded, the card says "This bill can no longer take an offer: it changed, a payment started, or it falls due within 3 days."

3.What the supplier sees

The link opens a page with no account to make. It says who offers what for which invoice, for example "Pinecrest Studio offers to pay invoice INV-108 today: 990.00 USDC instead of 1,000.00 USDC on Oct 30, 2026.". The money goes where you already pay that supplier. The page offers Accept: get paid today and Decline, and shows nothing else about your business.

  • Accept says "Accepted. The business pays you today, at the discounted amount, once its usual checks pass."
  • Decline says "Declined. Your invoice is paid as planned, on its due date." and records early_payment_offer_declined.
  • A link already answered, withdrawn or past its date says "This link is no longer valid. Ask the business that sent it for a new one."
  • If the bill changed since the offer (its amount, or a payment started), the page says "This invoice changed since the offer was made, so nothing changed. Ask the business for a new offer."

4.The agent pays it

When the supplier accepts, Vestiarion puts the discount on the bill's invoice, ending today, returns the bill to the agent, and starts a cycle at once. The ledger records early_payment_offer_accepted.

The agent then decides the bill as any bill with a discount ending today, with every check it always runs: screening, the three-way match, the payment limit, the guardrails, two approvals above your figure, and a person for a bank payout. When they pass, it pays the discounted amount today. When a check stops it, the bill waits for a person in Approvals as usual, and the discount lapses at the end of the day.

An accepted offer never changes who is paid, where, or the amount upward: it only takes the discount off.

Let the agent make the offers

Instead of making each offer yourself, an owner or admin can let the agent make them. In Pay early for a discount, set the most the agent may ask (from 0.5% to 10%) next to "At most", then choose Let the agent make offers. The card says "The agent now offers these bills to their suppliers by email." and starts a cycle, so the bills already scheduled are weighed at once. The ledger records early_offers_on, with the most it asks.

From then on, each cycle, after it has decided its bills, the agent looks at each bill it scheduled for a later day. It weighs an offer only where all of this holds:

  • the bill is in USDC, falls due at least 7 days from today, and never had an offer, yours or its own;
  • the supplier has an email on file, the one payment notices go to, has no other offer out, and declined no offer in the last 30 days;
  • the suggested discount is no more than the most you set;
  • the operating wallet can pay it today: the USDC left after the cycle's payments, less what falls due in the next 7 days and the offers already out, covers what the supplier would receive.

The model then decides whether to offer, and what discount to ask, between the suggestion and the most you set, from the bill, the days early, the reserve's yield, the cash left and what the supplier did with earlier offers. Without a model, the agent offers at the suggestion. At most 3 offers go out a cycle.

When it offers, the agent emails the supplier the link, with who offers what for which invoice and until when, at the address payment notices go to. The email is a fixed template: the model writes none of it. The ledger records early_payment_offered with via: "agent", the masked address, the agent's reasoning and the written policy's answer. On the card, the offer out says "The agent emailed it to the supplier." If the email does not go, the offer is withdrawn, so no link stands that the supplier never got, and the bill is weighed again at the next cycle.

When it decides not to offer, the ledger records early_payment_offer_skipped with its reasoning, and the bill is weighed again a week later.

The agent makes no offers while it is paused, or when email is not set up. Choose Stop the agent's offers to turn it off: "The agent no longer makes offers. Offers already out still stand." The ledger records early_offers_off. Members who are not an owner or admin read whether it is on.

Try it in a sandbox

A sandbox's suppliers are sample data, with no address of their own. So in a sandbox, the agent sends its offers, and its answers to counters, to the email of the member who turned the offers on. That member answers as the supplier would.

  • The emails start "[Sandbox]" and say so.
  • Payments are simulated, as every sandbox's are.
  • The ledger entry carries sandbox: true.

To try it:

  1. Load the sample data from the console. It includes a catalogue print run from Kestrel Print Co, due in three weeks with no discount, which the agent schedules for its due date.
  2. On Bills & receivables, under Pay early for a discount, choose Let the agent make offers.
  3. Within a minute, the offer reaches your inbox. Open it, and accept it, decline it, or propose a smaller discount. The agent answers a counter by email, and an accepted offer is paid at once, in simulation.

When the supplier proposes a smaller discount

On an offer the agent made, the supplier's page also asks "Would a smaller discount work for you?" The supplier enters a discount below the one offered and chooses Propose a smaller discount. The page says "Sent. The business answers you by email shortly. Until then, your invoice stays due as planned." and the link works no more. The ledger records early_payment_offer_countered, and a cycle starts at once. An offer you made yourself has no counter: the agent does not negotiate your terms.

On Bills, the bill says "Supplier proposed pct% instead of pct%. The agent answers it at its next cycle."

The agent answers each counter once. Code lets it accept only when all of this holds:

  • its offers are still on;
  • the bill has not changed since the offer;
  • the counter is more than what the cash would earn in the reserve by the due date;
  • the operating wallet can pay it today, as for a new offer.

Where code allows it, the model decides whether to accept, from the bill, the two discounts, the reserve's yield, the cash left and what the supplier did with earlier offers. Without a model, the agent accepts. Where code does not allow it, the agent declines, and no model is asked.

  • Accepted: the counter goes on the bill as its discount, ending today. A cycle starts at once and pays the supplier the discounted amount, after every check. The ledger records early_payment_counter_accepted, and the supplier is emailed "Business accepted your pct%: it pays you amount today, ...". On Bills it reads "accepted pct% off, after a counter".
  • Declined: the bill keeps its due date. The ledger records early_payment_counter_declined, and the supplier is emailed "Business keeps the original terms: your invoice is paid as planned, ...".

Both emails are fixed templates, sent to the address payment notices go to.

Following along

Each step the agent takes shows as it happens: in the workspace's activity toasts, in the Telegram chats connected to it, and in its Slack channel. That covers:

  • the offers it made, with who decided them;
  • a supplier's acceptance or counter;
  • its answer to a counter, with code's reason when code declined it;
  • an offer it withdrew.

For example: "Offered Lumen Print Co. payment today for 0.50% off, by email: 0.4975 USDC today instead of 0.50 USDC."

Offers you make yourself, and bills the agent chose not to offer, are not told.

What the offers came to

Once you have made an offer, Pay early for a discount says what they came to. For example: "So far: 4 offers made, 2 by the agent; 3 accepted, 1 of them after a counter; none declined. Paying early saved 0.02255 USDC, like earning 15.3% a year."

  • Saved is the bills' amounts less what was paid, for the bills paid early.
  • The yearly rate is that saving on the cash paid early, weighted by how many days before the due date each payment went. It reads the workspace's last 60 offers.

Offers stay covered

An offer promises payment today, so the cash for it must stay there. At each cycle, the agent first checks the cash: the operating USDC left after the cycle's payments, less what falls due in the next 7 days. If that no longer covers every offer out, the agent withdraws its own offers, the largest first, until it does.

  • Each withdrawal is recorded in the ledger as early_payment_offer_withdrawn, with reason: "cash".
  • The supplier's link then says it is no longer valid.
  • The agent does not offer that bill again.

The agent never withdraws an offer you made.

Edit this page on GitHub (opens in a new tab)