Live on Arc testnet · Built for AI agents & developers

Pay once for an AI answer. Every agent reuses it.

arcapis is the shared, on-chain cache for AI agents on Arc.
Call any AI API and pay per request in USDC — repeated answers come back free. No subscriptions, no API keys, no signup.

Connect wallet
Total Volume
Active Endpoints
Total Calls
Packets Minted
01

Pick an API

LLMs, image generation, TTS, embeddings, scraping. Each endpoint is on-chain in EndpointRegistry with a fixed USDC price.

02

Mint a packet NFT

Sign a USDC transfer — PacketContract mints an ERC-721 packet bound to your wallet, with the purchased quota baked in. Under a second on Arc testnet.

03

Call from anywhere

Your packet has a permanent URL. Call it from any agent or script — gateway verifies ownership on-chain, no API key needed.

Settlement <1s
Minimum cost $0.0008
Supports GPT · Claude · Image · TTS
— Services

Call AI APIs through one consistent gateway.

Use the same URL pattern, same payment flow, same response shape — across every supported AI service. OpenAI, Anthropic, Google, Stability, ElevenLabs, and more.

OpenAI GPT
Chat completions, image generation, embeddings, transcription.
POST /api/call/<packet>
from $0.0008
Anthropic Claude
Messages API · long-context reasoning.
POST /api/call/<packet>
from $0.0040
Google Gemini
Multimodal text + vision generation.
POST /api/call/<packet>
from $0.0025
Image & Audio
DALL·E, Stable Diffusion XL, ElevenLabs TTS, Whisper transcribe.
POST /api/call/<packet>
from $0.0050
Bring your own API
Drop in a base URL + auth header — we mint paid endpoints.
via Wrap APIs
Soon
— How it works

One shape, every service.

Pay once for a packet, get a private URL, then call it like any HTTP API. No keys to rotate, no plans to negotiate.

01

Approve & buy on-chain

Approve USDC, then mint a packet directly on PacketContract. Each packet is an ERC-721 token bound to your wallet.

usdc.approve(packet, price × qty)
packet.buyPacket(endpointId, qty)
 tokenId  (emit PacketBought)
02

Read your packet

Anyone can verify your packet on Arc testnet — buyer, price, and endpoint are all on-chain. Live quota is metered by the gateway.

packet.getPacket(tokenId)
 { endpointId, callsRemaining,
    buyer, pricePaid }
03

Call any service

Hit the gateway with your tokenId. It verifies ownership on-chain, checks the shared cache first — a repeat returns free — then forwards upstream on a miss and caches the answer for the next agent.

POST /api/call/123
Content-Type: application/json
{ "prompt": "Hello" }
For agents & developers
No API keys. No subscriptions. Just call & pay.

Choose a wallet to continue

Arcapis currently supports MetaMask on Arc testnet. More wallets are coming soon.

Need testnet USDC?

You need USDC on Arc testnet to pay for API calls. The Circle faucet drips 20 USDC every 2 hours per address.

Open Circle faucet
⚠ Treasury address is a placeholder. Set TREASURY_ADDRESS in Netlify env vars (or in x402-challenge.js) before going live, or test payments will go to a placeholder address.
Available endpoints
Run request

Select an endpoint to begin.

Endpoint fee (× 1) USDC
Arc gas (est.) USDC
Total USDC
Connect wallet to continue
Note. Packets are derived from confirmed payments under your connected wallet. URLs are deterministic per wallet × endpoint — keep them private.
Coming soon

Bring your own endpoint.

Self-serve provider onboarding: drop in a YAML spec or an OpenAPI URL, set your price, and we ship an arcapis.dev endpoint that handles billing, gas, and payouts in USDC.

YAML config Auto OpenAPI import Per-route pricing USDC payouts Webhook alerts
Coming soon

Resell the calls you don't need.

Fixed-price listings settled atomically in USDC: the packet NFT moves to the buyer and the seller is paid in the same transaction. The old call key revokes itself the moment ownership changes — the gateway re-checks the owner on every call.

Non-custodial listings Atomic USDC settlement Quota travels with the NFT Keys auto-revoke on sale
What arcapis is

A pay-per-call gateway for AI APIs on Arc. You buy a packet — an ERC-721 NFT that represents N prepaid calls to one endpoint — then your agent calls through the gateway. Two things set it apart from a plain API key:

1. Per-call EIP-712 auth. Every request carries a fresh signature instead of a long-lived bearer token, so a leaked signature risks one call, not your whole quota.
2. A cross-agent cache. Cacheable results are pinned to IPFS and shared across every agent — the first caller pays, everyone after reuses it free.

Quickstart

1. Buy a packet on the Buy APIs page (mint an NFT with quota). 2. Install the SDK. 3. Call.

npm i @manhcuongsev/arcapis-sdk ethers
import { ArcApis } from '@manhcuongsev/arcapis-sdk';
import { Wallet } from 'ethers';

const arc = new ArcApis({
  signer: new Wallet(process.env.AGENT_PRIVATE_KEY),
  packetTokenId: 5,          // the packet you just bought
});

const r = await arc.call('embed', { input: 'hello agentic economy' });

if (r._cached) {
  console.log('FREE — cache hit, quota unchanged');
} else {
  console.log('PAID — quota now', r.calls_remaining);
}

No build step? Sign the EIP-712 message yourself and POST /api/call/<packetId>. The full message format is in the SDK source on GitHub.

The cross-agent cache

The cache key is keccak256(endpointId + body) — the packet ID is deliberately excluded, so a result one agent paid for is reused by every agent. The first agent to embed "summarise CCTP v2" pays; everyone after gets the same vector free until it expires.

CategoryCache TTLWhy
VECTOR30 daysEmbeddings are deterministic
DATA30 minScrape data updates slowly
LLM / IMAGE / AUDIOneverPer-prompt / creative output — always fresh

A cache hit returns the same shape as a paid call, plus a _cached block and an unchanged calls_remaining:

{
  "endpoint": "embed",
  "calls_remaining": 5,          // unchanged on a hit
  "result": { /* upstream body, fetched from IPFS */ },
  "_cached": { "hit": true, "age_seconds": 18, "ttl_seconds": 2592000, "cid": "bafkrei…" }
}
Endpoints

Catalogue with per-call price. Live availability (and demo badges for endpoints without an upstream key) is shown on the Buy APIs page.

IDNameCategoryPrice / call
gpt5OpenAI GPT-5 chatLLM$0.003
claudeClaude Opus 4.7LLM$0.004
geminiGemini 2.5 ProLLM$0.0025
embedOpenAI embeddingsVECTOR$0.0008
whisperWhisper transcribeAUDIO$0.03
scrapeBright Data scrapeDATA$0.002
imageDALL·E imageIMAGE$0.10
sdxlStable Diffusion XLIMAGE$0.08
ttsElevenLabs TTSAUDIO$0.05
Authentication

Per-call EIP-712 (recommended). Each request signs a message binding packetId + endpointId + bodyHash + nonce + validUntil. A leaked signature is good for one call, not the whole packet. The SDK does this automatically.

Bearer (legacy). Authorization: Bearer ak_… still works server-side for older clients, but a leaked key drains the full quota until revoked — prefer EIP-712.

Contracts — Arc Testnet (chainId 5042002)
ContractAddressRole
EndpointRegistry0x417694A53666E62d058cAa35eB85cFCacBC28965API catalogue (anyone can register)
PacketContract0xB7B66bC873A4e9D415c1C4C4a8876AEC3892f798ERC-721 prepaid quota
CacheRegistry0xD06d70f356FF0ceC32582FB06177e163dBA76e02queryHash → IPFS CID
USDC0x3600000000000000000000000000000000000000Settlement asset (native gas on Arc)

✓ All contracts are source-verified on ArcScan — read the code and live state at testnet.arcscan.app.

Full SDK reference, the EIP-712 message format, and the reference research-bot example are on GitHub. SDK package: @manhcuongsev/arcapis-sdk.