POST pay per call

SafeCommit protected deploy

Ship a Vercel deployment or a Supabase migration with a checkpoint, health checks and automatic rollback if production breaks. Bring your own Vercel token; SafeCommit never uses its own on your project.

Price per call
$6.20
402 check
verified 402
Uptime
100% 7d · 100% 30d
Tried here
0 times

Pays via: x402 · USDC on Base to 0x5f2dAb...791696. Payment goes straight to the seller. Tensorust never holds it.

Endpoint: https://safecommit.vercel.app/api/agent/run · docs

Last probe

9 min ago: HTTP 402 in 82 ms. Valid payment terms.
  • $6.2 · exact · Base

Last 57 probes, oldest to newest (green = valid 402):

Try it

One call with no payment, sent from our server. You'll see exactly what your agent sees: usually the 402 and its price.

Code

See the price from a terminal:

# See the price: the bare call answers 402 with terms in PAYMENT-REQUIRED
curl -i -X POST "https://safecommit.vercel.app/api/agent/run" \
  -H "Content-Type: application/json" \
  -d '{"kind":"vercel_deployment","repository":"you/app","target":"production","summary":"Header copy change","payload":"diff --git a/x b/x\n+hello"}'

Pay and call from Node with the x402 client (your agent's own wallet signs; nothing goes through us):

// npm i @x402/core @x402/evm viem
import { x402Client } from "@x402/core/client";
import { x402HTTPClient } from "@x402/core/http";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

const signer = privateKeyToAccount(process.env.AGENT_WALLET_KEY); // your agent's own wallet
const client = new x402HTTPClient(new x402Client().register("eip155:*", new ExactEvmScheme(signer)));

const url = "https://safecommit.vercel.app/api/agent/run";
const init = { method: "POST", headers: { "content-type": "application/json" }, body: "{\"kind\":\"vercel_deployment\",\"repository\":\"you/app\",\"target\":\"production\",\"summary\":\"Header copy change\",\"payload\":\"diff --git a/x b/x\\n+hello\"}" };
let res = await fetch(url, init);
if (res.status === 402) {
  const terms = client.getPaymentRequiredResponse((h) => res.headers.get(h), await res.json());
  const payment = await client.createPaymentPayload(terms); // signs a USDC transfer straight to the seller
  res = await fetch(url, { ...init, headers: { ...(init.headers || {}), ...client.encodePaymentSignatureHeader(payment) } });
}
console.log(res.status, await res.text());
Did this answer your question?