Vybevybe

Collect · integration docs

Vybe Collect integration guide

Step-by-step tracks for API sellers, checkout merchants, and codeless freelancers — plus skills and copy-paste prompts for Cursor, Claude, and Codex.

Overview

Vybe Collect is the get-paid rail: one catalog for humans and AI agents. Settlement is USDC and USDT on Base, Ethereum, and BNB — not card acquiring. Credits land on the same Vybe balance as human payment requests.

Building tonight? Use the short hackathon path — claim, publish, gate with express-vybe-402, then settle a 402.

ConceptValue
Catalog APIGET /api/agent/collect/{username}
Pay intentHTTP 402 + PAYMENT-REQUIRED
Server keyvybe_col_… (Business → Developers)
Route gatenpm i express-vybe-402
Hosted checkoutPOST /api/checkout/sessions → /r/{id}
Canonical originhttps://www.vybe.finance

Pick a track

You can run more than one track — e.g. a freelancer catalog (C) plus a gated API (A). Choose based on how buyers reach you.

Integrate with an AI IDE

Most teams wire Collect from Cursor, Claude Code, or Codex. Install the official Agent Skills so the model knows endpoints, auth, and 402 flow — then paste a prompt below or type /vybe-collect in Cursor after cloning skills into .cursor/skills/.

  • vybe-collect — catalog, 402, express-vybe-402, webhooks, invoke proxy
  • vybe-checkout — hosted sessions, /r/ links, cart fulfillment
  • Pair with /pay-mcp only for buyer agent spend (VAPT) — not seller Collect

Install skills

Recommended via skills.sh (works across 70+ agents). Global install (-g) makes skills available in every project.

Terminal
# Cursor, Claude Code, Codex, Copilot, 70+ agents
npx skills add Vybe-Finance/vybe-collect -g -y
npx skills add Vybe-Finance/vybe-checkout -g -y

# Or clone into your project (Cursor slash menu: /vybe-collect)
git clone https://github.com/Vybe-Finance/vybe-collect.git .cursor/skills/vybe-collect
git clone https://github.com/Vybe-Finance/vybe-checkout.git .cursor/skills/vybe-checkout

Repos: vybe-collect · vybe-checkout

Copy prompts

Paste into Agent chat after installing skills. Replace placeholders (YOURNAME, svc_…, webhook URL) before sending.

Kickoff

Prompt · any track
Before coding, install Vybe integration skills:

npx skills add Vybe-Finance/vybe-collect -g -y
npx skills add Vybe-Finance/vybe-checkout -g -y

Then read https://www.vybe.finance/collect/integrate and implement Track [A|B|C] for:
[describe your product, routes, and fulfillment logic]

Track A — gate API / MCP

Prompt · express-vybe-402
Integrate Vybe Collect on my Express API.

Requirements:
- Gate GET /v1/scan with express-vybe-402 (username: YOURNAME, offeringId: svc_scan)
- VYBE_ORIGIN=https://www.vybe.finance
- Register payment.paid webhook → credit API quota idempotently
- Smoke test: unpaid → 402 + PAYMENT-REQUIRED → settle → retry with X-Vybe-Public-Id

Use the vybe-collect skill if installed. Do not use card checkout — settlement is USDC/USDT via HTTP 402.

Track A — API / MCP product (invoke proxy)

Prompt · MCP / API product
I'm monetizing an API or MCP tool (e.g. wallet scan, enrichment).

Use Vybe Collect HTTP 402 — NOT Paystack or card checkout for agent/API buyers.

Plan:
1. Create api or mcp offering with integration.invokeBaseUrl or integration.mcpServerUrl
2. Optionally express-vybe-402 on my origin OR use Vybe invoke proxy only
3. payment.paid webhook for quota / fulfillment
4. Document trial requests if offering supports VAPT

Canonical origin: https://www.vybe.finance

Track B — Native Checkout

Prompt · checkout.sessions
Add Vybe Native Checkout to my app.

Requirements:
- Server-side POST https://www.vybe.finance/api/checkout/sessions with Authorization: Bearer vybe_col_… from env VYBE_COLLECT_API_KEY (never NEXT_PUBLIC_)
- Support fixed SKU (line_items price svc_…) and dynamic invoice amounts
- Redirect humans to session.url (/r/{id})
- Fulfill on payment.paid webhook — idempotent, verify X-Vybe-Signature
- Optional: agents hit same /r/ URL with Accept: application/json for 402

Use vybe-checkout skill if installed.

Track C — codeless

Prompt · no API keys
Help me enable Vybe Collect without code.

Checklist:
- Claim @username on Vybe
- Publish offerings on my service page (price, duration, terms)
- Toggle "Accept payments from AI agents"
- Share human page /s/@me and agent docs /a/@me
- Confirm GET /api/agent/collect/me returns my catalog

No vybe_col_ key required for this path.

Agent briefs (llms.txt)

External agents that cannot install skills can read the public briefs:

Track A — Gate your API or MCP

Pay-per-request for agents and scripts. Callers get HTTP 402 until they settle USDC or USDT, then retry with X-Vybe-Public-Id. Not a card checkout page.

1. Enable Collect

Sign in → Business → Services. Publish an offering (per-request SKU). Toggle Accept payments from AI agents.

2. Mint a Collect key

Business → Developers → create vybe_col_…. Used for offerings API, webhooks, and checkout — not sent to public 402 callers.

Create key
curl -X POST https://www.vybe.finance/api/collect/v1/credentials \
  -H "Cookie: …" \
  -H "Content-Type: application/json"

3. Upsert offerings (optional)

PUT offerings
curl -X PUT https://www.vybe.finance/api/collect/v1/offerings \
  -H "Authorization: Bearer vybe_col_…" \
  -H "Content-Type: application/json" \
  -d '{
    "offerings": [{
      "id": "svc_scan",
      "title": "Wallet scan",
      "priceUsd": "0.05",
      "kind": "api",
      "integration": {
        "invokeBaseUrl": "https://api.yourservice.com"
      }
    }],
    "agentCollectEnabled": true
  }'

4. Install express-vybe-402

Express
npm install express-vybe-402

import express from "express";
import { requireVybePayment } from "express-vybe-402";

const app = express();

app.get(
  "/v1/scan",
  requireVybePayment({
    username: "yourname",
    offeringId: "svc_scan",
    origin: "https://www.vybe.finance",
  }),
  (req, res) => {
    res.json({ safe: true, payment: req.vybePayment });
  },
);

app.listen(3000);

5. Webhook for fulfillment

See Webhooks. Register URL, handle payment.paid to credit quota or unlock access.

Register webhook
curl -X PUT https://www.vybe.finance/api/collect/v1/webhook \
  -H "Authorization: Bearer vybe_col_…" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://you.com/hooks/vybe" }'

6. Smoke 402 → pay → retry

Caller flow
# Unpaid — expect 402
curl -i https://www.vybe.finance/api/agent/collect/yourname/svc_scan

# Settle (x402 PAYMENT-SIGNATURE, or POST …/status with txHash)

# Retry gated route
curl -i https://your-api.com/v1/scan \
  -H "X-Vybe-Public-Id: PUBLIC_ID_FROM_402"

MCP / private origin: set integration.mcpServerUrl or integration.invokeBaseUrl. Agents use /api/agent/invoke/… — Vybe proxies after pay or trial.

express-vybe-402 on npm

Prepaid packs & subscriptions (Phase B)

For high-frequency agents (e.g. 100 safety scans), set billing model to prepaid pack or subscription in Business → Products. One payment credits invoke quota on Vybe's ledger — buyers skip per-request Approve for each call while balance remains.

On payment.paid, Vybe credits PrepaidBalance and emits prepaid.credited. Invoke checks the ledger before 402; each successful proxy call decrements remaining invokes (or checks subscription expiry). When depleted, webhook prepaid.depleted fires.

List buyer balances (seller API)
curl "https://www.vybe.finance/api/collect/v1/prepaid-balances?buyerCrossmintId=…&offeringId=svc_scan" \
  -H "Authorization: Bearer vybe_col_…"

You can still handle payment.paidyourself for custom quota — Vybe ledger is optional but recommended when you don't want to maintain your own counter.

API-key MCPs (human keys vs agent rail)

Many MCP servers require an API key per customer on the marketing site (Paystack/card signup). Agents cannot complete that checkout or safely paste keys in prompts — use Vybe as a parallel rail, not a replacement for human signup.

BuyerAuthFulfillment
HumanYour site → API key → MCP with keyPaystack/card plans (unchanged)
AgentVybe invoke → pay/trial → X-Vybe-Public-Id on upstreampayment.paid webhook → quota / access

Setup on Vybe: create an mcp offering, set integration.mcpServerUrl to your Streamable HTTP endpoint, register a webhook, enable Collect. Agents call /api/agent/invoke/@you/offeringId — never your origin URL from the public catalog.

Setup on your MCP server: accept either your existing customer API key or a paid Vybe invoke. After Vybe verifies payment, the invoke proxy forwards X-Vybe-Public-Id and X-Vybe-Invoke-Access: trial|paid to your upstream. Verify the publicId (status API or your webhook ledger) instead of requiring a user API key for that request.

Verify a paid invoke (server-side)
// Optional: double-check before running the tool
const status = await fetch(
  "https://www.vybe.finance/api/agent/collect/YOURNAME/OFFERING_ID/status?publicId=" +
    encodeURIComponent(publicId),
);
// Expect paid + matching offeringId; mark consumed in your DB when tool runs

Do not publish your master API key in the Vybe catalog. If your MCP cannot accept Vybe headers yet, run a thin BFF at a separate URL (service key in env only on your infra) that validates X-Vybe-Public-Id then forwards to the real MCP with your server key.

Track B — Hosted checkout

Your server creates a checkout.session, returns /r/{id}, fulfills on payment.paid. Fixed catalog SKUs or dynamic invoice totals.

1. Collect key + offerings

Same desk setup as Track A. Test sessions from Business → Checkout.

2. Create session

Fixed SKU
curl https://www.vybe.finance/api/checkout/sessions \
  -H "Authorization: Bearer vybe_col_…" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "payment",
    "line_items": [{ "price": "svc_OFFERING_ID", "quantity": 1 }]
  }'
Multi-SKU cart
curl https://www.vybe.finance/api/checkout/sessions \
  -H "Authorization: Bearer vybe_col_…" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "payment",
    "line_items": [
      { "offering_id": "svc_A", "quantity": 2 },
      { "offering_id": "svc_B", "variant_id": "var_…", "quantity": 1 }
    ],
    "shipping_amount": "5.00",
    "shipping_address": {
      "name": "Buyer",
      "line1": "1 Main St",
      "city": "Lagos",
      "country": "NG"
    }
  }'
Dynamic invoice
curl https://www.vybe.finance/api/checkout/sessions \
  -H "Authorization: Bearer vybe_col_…" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "payment",
    "amount": "42.50",
    "currency": "usdc",
    "memo": "Invoice #1042"
  }'

3. Share hosted URL

Humans → session.url. Agents → same URL with Accept: application/json.

Agent JSON
curl -i https://www.vybe.finance/r/SESSION_ID \
  -H "Accept: application/json"
# → HTTP 402, agent_pay_url, PAYMENT-REQUIRED

4. Fulfill on paid

Poll GET /api/checkout/sessions/{id} or webhook. Keep handlers idempotent.

5. Redirect URLs (optional)

success_url / cancel_url are UX only — prove payment via webhook or status poll.

Native Checkout overview

Track C — Codeless

No API keys or middleware. Publish once; humans and agents pay from your catalog.

  1. Sign in and claim @username
  2. Add offerings under Services — price, duration, terms — Publish
  3. Toggle Accept payments from AI agents
  4. Share /s/@you (humans), /a/@you (agent docs), GET /api/agent/collect/yourname (catalog JSON)

Collect marketing page

Webhooks

Register in the desk or via API. Verify X-Vybe-Signature (HMAC-SHA256). Respond 2xx quickly. Events: payment.paid, payment.expired, and webhook.test (from Business → Integration health).

Checkout session metadata at create time is echoed on payment.paid and payment.expired when set.

payment.paid
POST https://you.com/hooks/vybe
X-Vybe-Signature: sha256=…

{
  "type": "payment.paid",
  "publicId": "Vh3xR2mQ",
  "offeringId": "svc_9fQ2Kd",
  "amount": "150.00",
  "token": "usdc",
  "settlementTxHash": "0x…",
  "metadata": {
    "order_id": "ord_1042",
    "user_id": "usr_abc"
  }
}
  • Verify signature before trusting the body
  • Idempotent handling — retries happen
  • Handle webhook.test during desk integration checks
webhook.test (health ping)
POST https://you.com/hooks/vybe
X-Vybe-Signature: sha256=…

{
  "protocol": "vybe-agent-collect",
  "version": "0.1",
  "type": "webhook.test",
  "message": "Vybe Collect integration health ping — respond 2xx to confirm delivery.",
  "username": "yourname",
  "sentAt": "2026-08-27T22:00:00.000Z"
}

Smoke test

  • Catalog returns offerings with Collect enabled
  • Unpaid call → 402 + PAYMENT-REQUIRED
  • Test payment credits Vybe balance
  • Webhook fires with valid signature
  • Gated route accepts X-Vybe-Public-Id after pay
  • Hosted /r/ session → payment_status: paid
Catalog probe
curl https://www.vybe.finance/api/agent/collect/yourname

Business desk

Keys, webhooks, test checkout sessions, and revenue analytics live in Business mode. Buyer-side VAPT / Pay MCP is separate.