{
  "schema_version": "1.0",
  "name": "Exende API catalog",
  "canonical_url": "https://www.exende.dev/api/catalog.json",
  "updated_at": "2026-09-10T00:00:00.000Z",
  "products": [
    {
      "id": "jobs-data",
      "name": "Exende Jobs & Hiring Data",
      "status": "available",
      "description": "Reviewed public hiring data with current catalogue counts and historical observation.",
      "public_overview": {
        "method": "GET",
        "url": "https://data.exende.dev/v1/public/overview",
        "authentication": "none",
        "payload": "aggregate_only",
        "cache_control": "public, max-age=60, s-maxage=300, stale-while-revalidate=600"
      },
      "customer_api_base_url": "https://data.exende.dev",
      "customer_access": "available_with_scoped_key",
      "billing": "live_subscriptions",
      "credit_metering": {
        "failed_requests": 0,
        "zero_result_per_record_requests": 0,
        "per_returned_record": [
          {
            "operation": "jobs.search",
            "method": "GET",
            "route": "/v1/jobs/search",
            "credits": 1
          },
          {
            "operation": "jobs.list",
            "method": "GET",
            "route": "/v1/jobs",
            "credits": 1
          },
          {
            "operation": "jobs.history",
            "method": "GET",
            "route": "/v1/jobs/{id}/history",
            "credits": 1
          },
          {
            "operation": "companies.jobs",
            "method": "GET",
            "route": "/v1/companies/{domain}/jobs",
            "credits": 1
          },
          {
            "operation": "skills.list",
            "method": "GET",
            "route": "/v1/skills",
            "credits": 1
          },
          {
            "operation": "jobs.history_feed",
            "method": "GET",
            "route": "/v1/history",
            "credits": 1
          }
        ],
        "fixed": [
          {
            "operation": "jobs.detail",
            "method": "GET",
            "route": "/v1/jobs/{id}",
            "credits": 1
          },
          {
            "operation": "companies.detail",
            "method": "GET",
            "route": "/v1/companies/{domain}",
            "credits": 2
          },
          {
            "operation": "companies.hiring",
            "method": "GET",
            "route": "/v1/companies/{domain}/hiring",
            "credits": 5
          },
          {
            "operation": "metrics.overview",
            "method": "GET",
            "route": "/v1/metrics/overview",
            "credits": 2
          },
          {
            "operation": "metrics.hiring",
            "method": "GET",
            "route": "/v1/metrics/hiring",
            "credits": 5
          }
        ]
      },
      "documentation": "https://www.exende.dev/docs/jobs",
      "openapi": "https://www.exende.dev/openapi/jobs.json",
      "quickstart": "https://www.exende.dev/docs/jobs#quickstart",
      "coverage": "https://www.exende.dev/coverage",
      "authentication": {
        "type": "bearer",
        "scopes": [
          "jobs:read",
          "companies:read",
          "signals:read"
        ]
      },
      "pagination": {
        "job_lists": {
          "default_limit": 50,
          "maximum_limit": 100,
          "cursor_field": "nextCursor",
          "ordering": [
            "last_seen_at DESC",
            "id DESC"
          ]
        },
        "job_history": {
          "maximum_limit": 100,
          "cursor": false
        },
        "skills": {
          "maximum_records": 100,
          "cursor": false
        },
        "history_feed": {
          "maximum_records": 100,
          "cursor": false
        }
      },
      "public_preview": {
        "url": "https://data.exende.dev/v1/public/search",
        "query": "q only, max 80 characters / 6 terms",
        "sample_limit": 5,
        "fixed_pool_limit": 12,
        "pagination": false,
        "authentication": "none",
        "description": "Real active-job aggregates and fixed, explicitly allowlisted public samples. No full descriptions, source payloads, customer or operator data.",
        "method": "GET",
        "purpose": "restricted_product_demonstration",
        "documentation": "https://www.exende.dev/docs/jobs#public-search"
      }
    },
    {
      "id": "callback",
      "name": "Exende Callback API",
      "status": "available",
      "description": "Create a temporary public webhook endpoint, receive external events, and read or wait for them through HTTP.",
      "base_url": "https://api.exende.dev",
      "receiver_base_url": "https://cb.exende.dev",
      "create": {
        "method": "POST",
        "url": "https://api.exende.dev/v1/callbacks"
      },
      "payment": {
        "protocol": "x402",
        "version": 2,
        "scheme": "exact",
        "price": "0.01",
        "amount_atomic": "10000",
        "decimals": 6,
        "currency": "USDC",
        "network": "eip155:8453"
      },
      "limits": {
        "lifetime_seconds": 600,
        "events": 10,
        "payload_bytes_per_event": 262144
      },
      "documentation": "https://www.exende.dev/docs/callback",
      "openapi": "https://www.exende.dev/openapi/callback.json"
    },
    {
      "id": "retry",
      "name": "Exende Retry API v1",
      "status": "available",
      "description": "Execute a public HTTPS request as a durable job with automatic retries, recovery, status polling, attempt history, and an optional terminal callback.",
      "base_url": "https://retry.exende.dev",
      "create": {
        "method": "POST",
        "url": "https://retry.exende.dev/v1/retries"
      },
      "payment": {
        "protocol": "x402",
        "version": 2,
        "scheme": "exact",
        "price": "0.02",
        "amount_atomic": "20000",
        "decimals": 6,
        "currency": "USDC",
        "network": "eip155:8453",
        "per_attempt_surcharge": false
      },
      "paid_limits": {
        "max_attempts": 8,
        "lifetime_seconds": 86400
      },
      "api_key_limits": {
        "max_attempts": 20
      },
      "documentation": "https://www.exende.dev/docs/retry",
      "openapi": "https://www.exende.dev/openapi/retry.json"
    },
    {
      "id": "resolve",
      "name": "Exende Resolve API v1",
      "status": "available",
      "description": "Resolve a public URL into bounded machine-readable web content, document text, structured data, text, or supported image metadata.",
      "base_url": "https://resolve.exende.dev",
      "create": {
        "method": "POST",
        "url": "https://resolve.exende.dev/v1/resolve"
      },
      "read": {
        "method": "GET",
        "url_template": "https://resolve.exende.dev/v1/resolves/{id}",
        "authentication": "job-scoped read token"
      },
      "payment": {
        "protocol": "x402",
        "version": 2,
        "scheme": "exact",
        "price": "0.03",
        "amount_atomic": "30000",
        "decimals": 6,
        "currency": "USDC",
        "network": "eip155:8453"
      },
      "limits": {
        "download_bytes": 10485760,
        "redirects": 3,
        "browser_timeout_seconds": 30,
        "pdf_pages": 500,
        "output_bytes": 524288,
        "retention_seconds": 259200
      },
      "documentation": "https://www.exende.dev/docs/resolve",
      "openapi": "https://www.exende.dev/openapi/resolve.json"
    }
  ],
  "discovery": {
    "x402_bazaar_search": "https://api.cdp.coinbase.com/platform/v2/x402/discovery/search?urlSubstring=exende.dev&network=eip155%3A8453&scheme=exact&limit=20"
  }
}
