Becoming a Provider in 5 minutes

Wrap your existing service as a JECP capability and start receiving 85% revenue per agent call.

What you'll need

1Register the Provider

POST https://jecp.dev/v1/providers/register
{
  "namespace":     "yourco",
  "display_name":  "Your Co",
  "country":       "US",
  "owner_email":   "founder@yourco.com",
  "endpoint_url":  "https://yourco.com/jecp"
}

← {
  "provider_id":      "uuid",
  "provider_api_key": "jdb_pk_...",   // shown ONCE
  "hmac_secret":      "...",          // shown ONCE
  "dns_token":        "..."
}
Save provider_api_key and hmac_secret immediately — they cannot be recovered.

2Verify domain ownership via DNS

# Add this TXT record at your DNS provider:
TXT _jecp.yourco.com  "jecp-verify=<dns_token>"

# Then call:
POST https://jecp.dev/v1/providers/verify-dns
Authorization: Bearer jdb_pk_...
{ "domain": "yourco.com" }

← { "verified": true }

3Connect Stripe Express

POST https://jecp.dev/v1/providers/connect-stripe
Authorization: Bearer jdb_pk_...

← { "onboarding_url": "https://connect.stripe.com/setup/..." }

Open the onboarding_url in a browser. Stripe walks you through KYC + bank account setup. 5-min for most legal entities.

4Publish your manifest

POST https://jecp.dev/v1/manifests
Authorization: Bearer jdb_pk_...
Content-Type: application/x-yaml

namespace: yourco
capability: translate
version: 1.0.0
endpoint: https://yourco.com/jecp
description: Translate text between any two languages
actions:
  - id: translate
    description: Translate input.text to input.target_lang
    pricing: { base: 0.005, currency: usdc }
    rate_limit_rpm: 60
    input_schema:
      type: object
      required: [text, target_lang]
      properties:
        text: { type: string, maxLength: 5000 }
        target_lang: { type: string, enum: [JA, EN, FR, DE, ES] }
    examples:
      - { input: { text: "Hello", target_lang: "JA" }, output: { translated: "こんにちは" } }

5Implement the endpoint

// Using @jecpdev/sdk's JecpProvider helper (TypeScript)
import { JecpProvider } from '@jecpdev/sdk';

const provider = new JecpProvider({
  hmacSecret: process.env.JECP_HMAC_SECRET!,
});

// Works on Bun, Cloudflare Workers, Next.js Route Handlers
export const POST = provider.createHandler(async (req) => {
  if (req.action === 'translate') {
    const { text, target_lang } = req.input as { text: string; target_lang: string };
    return { translated: await myTranslate(text, target_lang) };
  }
  throw new Error(`unknown action: ${req.action}`);
});

HMAC verification + ±5 min replay window are handled inside createHandler. Your business logic only runs after the signature is verified.

Revenue split

Failed invocations are not charged. Stripe Transfer payouts to your account are scheduled monthly (automated payouts ship Q3 2026).

Browser/edge runtime

If your endpoint runs on Cloudflare Workers, Deno, or any environment without node:crypto:

import { JecpProvider } from '@jecpdev/sdk/browser';
// ...same API, uses Web Crypto API under the hood