{
  "schema_version": "sourcestrand-assistant-compatibility-v1",
  "generated_at": "2026-07-13T07:47:32.307Z",
  "gateway": "SourceStrand Data Gateway",
  "base_url": "https://api.sourcestrand.com",
  "canonical_base_url": "https://api.sourcestrand.com",
  "market_selection": {
    "selected_on": "2026-07-13",
    "selected_assistants": [
      "ChatGPT",
      "Google Gemini",
      "Perplexity",
      "Claude",
      "Microsoft Copilot"
    ],
    "basis": "Selected from current AI chatbot traffic/share sources plus enterprise connector relevance. Rankings vary by source, but these five cover the most common consumer, research, developer, and enterprise assistant surfaces.",
    "evidence_sources": [
      {
        "source": "Statcounter Global Stats AI Chatbot Market Share Worldwide",
        "period": "June 2026",
        "top_five_used_here": [
          "ChatGPT",
          "Google Gemini",
          "Perplexity",
          "Claude",
          "Microsoft Copilot"
        ]
      },
      {
        "source": "Sensor Tower coverage reported by TechCrunch",
        "period": "May 2026",
        "relevance": "Confirms ChatGPT, Gemini, and Claude as leading assistants while other assistants remain fragmented below the leaders."
      }
    ]
  },
  "entrypoints": {
    "compatibility_manifest": "https://api.sourcestrand.com/assistant-compatibility.json",
    "agent_tools": "https://api.sourcestrand.com/agent-tools.json",
    "full_openapi_3_1": "https://api.sourcestrand.com/openapi.json",
    "microsoft_copilot_openapi_2_0": "https://api.sourcestrand.com/openapi.copilot.json",
    "ai_offer": "https://api.sourcestrand.com/ai-offer.json",
    "x402_resources": "https://api.sourcestrand.com/.well-known/x402/resources.json",
    "route_intent_url_template": "https://api.sourcestrand.com/v1/agent/route-intent?query={buyer_question}",
    "payment_intent_url_template": "https://api.sourcestrand.com/v1/payment/intent?resource_url={urlencoded_paid_resource_url}"
  },
  "readiness_checklist": {
    "public_https_json_endpoints": true,
    "full_openapi_schema_served_by_gateway": true,
    "copilot_openapi_2_0_subset_available": true,
    "function_call_tool_schemas_available": true,
    "preview_first_without_payment": true,
    "payment_intent_handoff_without_private_keys": true,
    "x402_paid_retry_contract_available": true,
    "local_stdio_mcp_server_available": true,
    "remote_mcp_http_connector_available": false,
    "remote_mcp_note": "Claude and other MCP clients can use this repo's local stdio MCP server today. A public remote MCP server is intentionally not advertised as ready until a dedicated authenticated MCP transport is enabled."
  },
  "universal_agent_flow": [
    "Read assistant_compatibility to choose the correct integration surface.",
    "Call sourcestrand_route_intent when the buyer question is not already mapped to a specific endpoint.",
    "Call the suggested free preview endpoint and inspect data_lineage, limitations, source_hash, freshness_policy, and agent_cache.",
    "Only create a payment intent after preview confirms fit and the buyer authorizes payment.",
    "If the assistant cannot sign x402 itself, return approval_url to the human buyer and wait for consent.",
    "Never send wallet private keys to SourceStrand; x402 signing belongs in the buyer wallet or authorized agent client."
  ],
  "assistant_profiles": [
    {
      "assistant_id": "chatgpt",
      "display_name": "ChatGPT / Custom GPT Actions",
      "ready_now": true,
      "best_connection_mode": "OpenAPI Actions",
      "import_schema_url": "https://api.sourcestrand.com/openapi.json",
      "fallback_tool_manifest_url": "https://api.sourcestrand.com/agent-tools.json",
      "setup_notes": [
        "Use /openapi.json as the GPT Action schema.",
        "Tell the GPT to call route-intent before choosing a paid resource.",
        "Tell the GPT to use /v1/payment/intent and return approval_url when payment authority is missing."
      ],
      "must_not": [
        "Do not call a paid endpoint repeatedly after receiving 402 without creating a payment intent.",
        "Do not ask the user for a wallet private key."
      ]
    },
    {
      "assistant_id": "google_gemini",
      "display_name": "Google Gemini",
      "ready_now": true,
      "best_connection_mode": "Function calling with JSON Schema tools",
      "tool_declarations_source": "function_call_tools",
      "setup_notes": [
        "Convert function_call_tools into Gemini function declarations.",
        "Use route-intent and preview calls as read-only tools.",
        "Use payment intent as a handoff tool; x402 retry happens in an authorized client."
      ]
    },
    {
      "assistant_id": "perplexity",
      "display_name": "Perplexity",
      "ready_now": true,
      "best_connection_mode": "Agent API function calling plus web-readable manifests",
      "tool_declarations_source": "function_call_tools",
      "setup_notes": [
        "Expose function_call_tools to the Perplexity Agent API tool loop.",
        "Let Perplexity use web grounding on /ai-offer.json, /agent-tools.json, and product JSON pages when citations are needed.",
        "Keep payment intent as a human-approval or authorized-wallet handoff."
      ]
    },
    {
      "assistant_id": "claude",
      "display_name": "Claude",
      "ready_now": true,
      "best_connection_mode": "Claude tool use, local stdio MCP, or future remote MCP",
      "tool_declarations_source": "function_call_tools",
      "local_mcp": {
        "command": "npm run mcp",
        "transport": "stdio",
        "status": "available_in_repo"
      },
      "remote_mcp": {
        "status": "not_enabled",
        "reason": "A public remote MCP transport should be authenticated and separately tested before advertising it to Claude custom connectors."
      },
      "setup_notes": [
        "For Claude API, convert function_call_tools into client tools.",
        "For Claude Desktop local use, configure this repo's stdio MCP server.",
        "For Claude Web custom connectors, wait for a dedicated remote MCP endpoint instead of treating the REST gateway as MCP."
      ]
    },
    {
      "assistant_id": "microsoft_copilot",
      "display_name": "Microsoft Copilot / Copilot Studio",
      "ready_now": true,
      "best_connection_mode": "Power Platform custom connector from OpenAPI 2.0",
      "import_schema_url": "https://api.sourcestrand.com/openapi.copilot.json",
      "fallback_full_openapi_url": "https://api.sourcestrand.com/openapi.json",
      "setup_notes": [
        "Use /openapi.copilot.json for Copilot Studio or Power Platform custom connector import.",
        "Keep connector actions focused on free previews and payment-intent handoff.",
        "Use a separate x402-capable client for paid retry after buyer approval."
      ]
    }
  ],
  "function_call_tools": [
    {
      "name": "sourcestrand_route_intent",
      "description": "Route a natural-language buyer question to the safest SourceStrand free preview and matching paid endpoint template. Call this first when the user asks for Taiwan suppliers, semiconductor companies, trade context, compliance context, or crypto asset context but has not chosen an endpoint.",
      "method": "GET",
      "url_template": "https://api.sourcestrand.com/v1/agent/route-intent?query={query}",
      "safe_to_call_without_payment": true,
      "parameters": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "maxLength": 240,
            "description": "The user's buyer question, for example 'Taiwan semiconductor supplier packaging' or 'HS 8542 Taiwan export demand'."
          }
        },
        "required": [
          "query"
        ]
      }
    },
    {
      "name": "sourcestrand_preview_taiwan_data_pack",
      "description": "Fetch a free preview of a record-backed Taiwan buyer pack. Use this before payment to inspect sample records, source lineage, freshness, limitations, agent_cache, and paid_unlock metadata.",
      "method": "GET",
      "url_template": "https://api.sourcestrand.com/v1/preview/tw-data-packs/{pack}",
      "safe_to_call_without_payment": true,
      "parameters": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "pack": {
            "type": "string",
            "enum": [
              "supplier-discovery",
              "trade-import-export",
              "regulated-supplier-compliance",
              "export-control-screening",
              "factory-operational-risk",
              "public-company-signals",
              "compliance-risk"
            ],
            "description": "Taiwan data pack slug selected from route_intent or from the buyer's task."
          },
          "buyer_hint": {
            "type": "string",
            "description": "Optional stable attribution handle for the assistant, partner, or campaign."
          }
        },
        "required": [
          "pack"
        ]
      }
    },
    {
      "name": "sourcestrand_preview_company_dossier",
      "description": "Preview how SourceStrand can stitch Taiwan company brief, procurement, semiconductor, entity graph, trade, compliance, and factory context after resolving a business_id or company name.",
      "method": "GET",
      "url_template": "https://api.sourcestrand.com/v1/preview/tw-company/dossier?query={query}",
      "safe_to_call_without_payment": true,
      "parameters": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "maxLength": 160,
            "description": "Taiwan business_id, company name, or alias."
          }
        },
        "required": [
          "query"
        ]
      }
    },
    {
      "name": "sourcestrand_preview_data_pack_changes",
      "description": "Preview repeat-refresh and change-feed fields for a Taiwan data pack. Use this when an assistant wants to monitor updates before recommending a paid pack or watchlist workflow.",
      "method": "GET",
      "url_template": "https://api.sourcestrand.com/v1/preview/changes/tw-data-packs?pack={pack}&since={since}",
      "safe_to_call_without_payment": true,
      "parameters": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "pack": {
            "type": "string",
            "enum": [
              "supplier-discovery",
              "trade-import-export",
              "regulated-supplier-compliance",
              "export-control-screening",
              "factory-operational-risk",
              "public-company-signals",
              "compliance-risk"
            ]
          },
          "since": {
            "type": "string",
            "description": "Optional ISO datetime. Use previous_successful_fetch when no timestamp is available."
          }
        }
      }
    },
    {
      "name": "sourcestrand_preview_watchlist",
      "description": "Turn a company, sector, or buyer topic into suggested watch keys and repeat-refresh follow-ups across SourceStrand Taiwan data products.",
      "method": "GET",
      "url_template": "https://api.sourcestrand.com/v1/preview/watchlist/tw-data-products?query={query}",
      "safe_to_call_without_payment": true,
      "parameters": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "maxLength": 160,
            "description": "Company, sector, data-pack topic, or buyer monitoring goal."
          }
        },
        "required": [
          "query"
        ]
      }
    },
    {
      "name": "sourcestrand_payment_intent",
      "description": "Create a payment intent for a selected x402 paid resource. Use only after a free preview confirms fit. If the assistant does not have explicit buyer payment authority, return approval_url to the human buyer instead of paying automatically.",
      "method": "GET",
      "url_template": "https://api.sourcestrand.com/v1/payment/intent?resource_url={urlencoded_paid_resource_url}",
      "safe_to_call_without_payment": true,
      "parameters": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "resource_url": {
            "type": "string",
            "description": "Full SourceStrand paid resource URL selected from route_intent or preview paid_unlock metadata."
          }
        },
        "required": [
          "resource_url"
        ]
      }
    }
  ],
  "payment_safety": {
    "preview_required_before_payment": true,
    "payment_protocol": "x402",
    "default_network": "eip155:8453",
    "representative_prices": {
      "crypto_asset_signal": "$0.01",
      "procurement_supplier_lead_pack": "$0.01",
      "taiwan_data_pack": "$0.03"
    },
    "never_collect_private_keys": true,
    "buyer_hint_header": "x-buyer-hint"
  }
}