Capvant

Embed funding in your product

Know which customers can get funding, show it inside your own product, and hand them a funding request that already knows what you know.

Most partners already hold what a funding request asks for: the company, its number, when it was formed, who owns it, who you deal with. The Partner API lets you use that, so your customer never types it twice, and so you only put funding in front of customers who can actually get it.

Three pieces, each usable on its own:

PieceWhat it doesEndpoints
EligibilityWhich kinds of funding one company may qualify for, nowPOST /eligibility/check
CustomersYour book, synced in bulk, with an answer we keep currentPOST /customers/bulk, GET /customers
SessionsA prefilled funding request, opened by a link you hand outPOST /sessions, GET /sessions/{id}

Events tie them together: customer.became_eligible when a synced customer now likely qualifies, customer.request_started when they open your link, and customer.request_submitted when they send the funding request.

1. Sync your customers

Send the businesses on your book, up to 500 per call. A company number is enough for an answer; monthly revenue sharpens it. Businesses only: no people and no personal numbers here.

Shell
curl https://sandbox.capvant.com/partner/v1/customers/bulk \
  -H "X-API-Key: $CAPVANT_KEY" -H "Content-Type: application/json" \
  -d '{
    "customers": [
      { "partner_customer_id": "cus_42", "country": "GB", "company_number": "01234567" },
      { "partner_customer_id": "cus_43", "country": "GB", "company_number": "09876543",
        "facts": { "monthly_revenue": 45000 } }
    ]
  }'

Each customer comes back with its band (likely, possible, not_yet, unlikely, or not_assessed with a reason). We look again when the next check is due: sooner for possible, and on the very day a not_yet business has traded long enough.

2. Hear who became eligible

Subscribe to customer.became_eligible with POST /webhook-subscriptions. When a customer moves to likely, you get:

JSON
{
  "event": "customer.became_eligible",
  "environment": "live",
  "data": {
    "partner_customer_id": "cus_42",
    "market": "UK",
    "band": "likely",
    "previous_band": "not_yet",
    "families": [{ "family": "working_capital", "band": "likely", "previous_band": "not_yet" }]
  }
}

No lender is ever named. A first sync is silent by default, so importing your whole book does not flood your endpoint; send "notify_initial": true if you want the first answers as events too.

3. Show it where your customer already is

Put a quiet card in your product for customers who are likely:

Funding options available. Your business already meets the basic criteria for 3 kinds of funding. [Check my options]

Say "may qualify" or "likely to qualify", never "approved": no lender has assessed the business yet.

4. Open a prefilled session

When the customer clicks, create a session with what you hold. Contact and owner details need your consent record for sharing them with Capvant.

Node
const session = await capvant.post('/sessions', {
  country: 'GB',
  partner_customer_id: customer.id,
  business: { legal_name: customer.legalName, company_number: customer.companyNumber },
  contact: { first_name: user.firstName, last_name: user.lastName, email: user.email },
  owners: customer.owners.map((o) => ({ first_name: o.firstName, last_name: o.lastName, ownership_percentage: o.percent })),
  funding: { amount: 60000 },
  consent: { reference: consent.id, captured_at: consent.at, method: 'click_through' },
  return_url: 'https://app.example.com/capital',
});
// Send the customer to session.launch_url. session.asks_for lists what is still asked.

The launch link opens your own programme domain when it is live, otherwise your page on Capvant, with the details filled in. It works until expires_at (a week by default), and POST /sessions/{id}/link issues a new one if it gets lost; the old one stops working.

Personal tax and identity numbers (SSN, ITIN, National Insurance, passport) are refused on every endpoint. The lender step that needs one asks the customer directly.

5. Follow the funding request

customer.request_started fires when the customer opens the link and customer.request_submitted when they send the funding request. GET /sessions/{id} carries the request id from then on.

Try it in the sandbox

Every step works on a sandbox key. A sandbox launch link opens a page that shows what would be prefilled, and POST /sessions/{id}/simulate with {"event":"start"} or {"event":"submit"} fires the same events a real customer would, so you can prove your handling before go live.

On this page