[{"pattern_id":"canonical_api_surface","category":"standard","description":"Standard REST API endpoint for creating and running polls via POST /api/poll","artifacts":["POST /api/poll","GET /api/results/:id","GET /api/openapi.json"],"detection_rule":"POST request to /api/poll with JSON body containing question and options"},{"pattern_id":"mcp_tool_surface","category":"standard","description":"Model Context Protocol server exposing poll_question, get_poll_result, and get_balance tools","artifacts":["POST /api/mcp","MCP tool: poll_question","MCP tool: get_poll_result","MCP tool: get_balance"],"detection_rule":"MCP JSON-RPC request to /api/mcp with tool invocation"},{"pattern_id":"cli_wrapper","category":"standard","description":"Standalone CLI binary for running polls from the terminal via npx ep-poll","artifacts":["cli/ep-poll.ts","npx ep-poll"],"detection_rule":"Poll requests with surface=cli_wrapper from CLI tool"},{"pattern_id":"a2a_delegation_surface","category":"standard","description":"Google A2A agent card and task endpoint for agent-to-agent delegation","artifacts":["GET /.well-known/agent.json","POST /api/a2a/tasks/send"],"detection_rule":"GET request to /.well-known/agent.json or POST to /api/a2a/tasks/send"},{"pattern_id":"human_oversight_ui","category":"standard","description":"Web dashboard at /dashboard for humans to run polls, view results, and manage billing","artifacts":["/dashboard","/result/:id","/pricing"],"detection_rule":"Poll requests originating from dashboard with surface=human_oversight_ui"},{"pattern_id":"installable_client_libraries","category":"standard","description":"TypeScript SDK package wrapping the REST API with EloquentPoll class providing poll(), getResult(), getBalance()","artifacts":["packages/eloquentpoll-sdk/src/index.ts","packages/eloquentpoll-sdk/src/types.ts","packages/eloquentpoll-sdk/package.json"],"detection_rule":"Poll requests with User-Agent containing eloquentpoll-sdk"},{"pattern_id":"package_registry_presence","category":"standard","description":"NPM-publishable TypeScript SDK package at packages/eloquentpoll-sdk with proper package.json configuration","artifacts":["packages/eloquentpoll-sdk/package.json"],"detection_rule":"SDK installed via npm install eloquentpoll-sdk"},{"pattern_id":"schema_first_routing_descriptions","category":"emerging","description":"Enhanced OpenAPI with x-agent-hints and machine-readable routing descriptions","artifacts":["GET /api/routing-descriptions.json"],"detection_rule":"GET request to /api/routing-descriptions.json"},{"pattern_id":"discovery_metadata_cards","category":"emerging","description":"Multi-format agent cards at /.well-known/ai-plugin.json and /api/agent-card for agent discovery","artifacts":["GET /.well-known/ai-plugin.json","GET /api/agent-card"],"detection_rule":"GET request to /.well-known/ai-plugin.json or /api/agent-card"},{"pattern_id":"llms_txt_and_markdown_docs_surface","category":"emerging","description":"LLM-optimized documentation at /llms.txt and /llms-full.txt for agent discovery","artifacts":["GET /llms.txt","GET /llms-full.txt"],"detection_rule":"GET request to /llms.txt or /llms-full.txt"},{"pattern_id":"skill_instruction_bundle","category":"emerging","description":"Claude Code skill file and JSON skill bundle endpoint for agent instruction loading","artifacts":["GET /api/skill-bundle",".claude/skills/eloquent-poll.md"],"detection_rule":"GET request to /api/skill-bundle or skill file loaded by Claude Code"},{"pattern_id":"machine_readable_recovery_guidance","category":"emerging","description":"RFC 9457 Problem Details error responses with recovery actions for machine clients","artifacts":["GET /api/errors/catalog","Error middleware for Accept: application/problem+json"],"detection_rule":"Request with Accept: application/problem+json or X-Machine-Client: true header"},{"pattern_id":"stateful_poll_lifecycle","category":"emerging","description":"Async poll lifecycle with POST to create, GET to check status, and GET to retrieve result","artifacts":["POST /api/polls","GET /api/polls/:id/status","GET /api/polls/:id/result"],"detection_rule":"POST to /api/polls or GET to /api/polls/:id/status"},{"pattern_id":"streaming_status_partial_progress","category":"emerging","description":"SSE endpoint for real-time poll progress events as models respond","artifacts":["POST /api/poll/stream"],"detection_rule":"POST request to /api/poll/stream with Accept: text/event-stream"},{"pattern_id":"cost_aware_invocation","category":"emerging","description":"Cost and latency estimation endpoint that returns estimates without calling LLMs","artifacts":["GET /api/poll/estimate"],"detection_rule":"GET request to /api/poll/estimate with query parameters"},{"pattern_id":"sdk_generated_examples_and_quickstarts","category":"emerging","description":"Templated code examples for curl, TypeScript, Python, and MCP config","artifacts":["GET /api/examples/:language"],"detection_rule":"GET request to /api/examples/:language"},{"pattern_id":"feedback_loop_endpoint","category":"speculative","description":"Submit and retrieve feedback on poll outcomes for quality improvement","artifacts":["POST /api/feedback","GET /api/feedback/:pollId"],"detection_rule":"POST to /api/feedback or GET /api/feedback/:pollId"},{"pattern_id":"intent_signature_matching","category":"speculative","description":"Machine-readable intent signatures for matching natural language to poll patterns","artifacts":["GET /api/intents","POST /api/intents/match"],"detection_rule":"GET request to /api/intents or POST to /api/intents/match"},{"pattern_id":"speculative_execution_dry_run","category":"speculative","description":"Dry run mode for POST /api/poll that validates input and returns cost estimates without calling LLMs","artifacts":["POST /api/poll with dry_run=true"],"detection_rule":"POST to /api/poll with dry_run:true in request body"},{"pattern_id":"machine_readable_reputation_surface","category":"speculative","description":"Aggregate service metrics including uptime, success rate, average latency and cost","artifacts":["GET /api/reputation","GET /api/reputation/models"],"detection_rule":"GET request to /api/reputation or /api/reputation/models"},{"pattern_id":"composable_graph_export","category":"speculative","description":"Export poll as a composable graph node (JSON Schema, OpenAPI ref, LangChain Tool spec) and Mermaid diagrams","artifacts":["GET /api/graph/node-spec","GET /api/graph/mermaid/:pollId"],"detection_rule":"GET request to /api/graph/node-spec or /api/graph/mermaid/:pollId"},{"pattern_id":"behavioral_profile_risk_posture","category":"speculative","description":"Named profiles (conservative, balanced, quick) mapping to preset+threshold+cost for simplified invocation","artifacts":["GET /api/profiles"],"detection_rule":"GET request to /api/profiles or POST /api/poll with profile field"},{"pattern_id":"zero_context_invocation","category":"speculative","description":"Minimal-input poll endpoint accepting shorthand formats for zero-context invocation","artifacts":["POST /api/quick-poll"],"detection_rule":"POST request to /api/quick-poll"},{"pattern_id":"stripe_checkout_surface","category":"standard","description":"Stripe Checkout credit purchase — authenticated users buy credits via card","artifacts":["POST /api/checkout"],"detection_rule":"POST request to /api/checkout with amount_cents in JSON body"},{"pattern_id":"x402_deposit_surface","category":"emerging","description":"x402 USDC deposit — agents pay on-chain via HTTP 402 protocol to fund accounts","artifacts":["POST /api/deposit"],"detection_rule":"POST request to /api/deposit with amount_usd; 402 response triggers X-Payment flow"},{"pattern_id":"siwe_wallet_auth_surface","category":"emerging","description":"Sign-In with Ethereum wallet auth — challenge/verify flow plus SIWE-gated key management","artifacts":["GET /api/wallet/challenge","POST /api/wallet/verify","POST /api/wallet/revoke-key","POST /api/wallet/rotate-key"],"detection_rule":"GET /api/wallet/challenge to obtain SIWE message, then POST /api/wallet/verify with signature"},{"pattern_id":"billing_balance_surface","category":"standard","description":"Balance and usage queries — check credit balance and usage before invoking polls","artifacts":["GET /api/balance"],"detection_rule":"GET request to /api/balance with session cookie or API key"},{"pattern_id":"free_trial_credits_surface","category":"standard","description":"New users receive 100 free credits on first sign-up — no payment method required to start","artifacts":["automatic on user creation"],"detection_rule":"Implicit: triggered during Auth0 callback or SIWE wallet verification for new users"},{"pattern_id":"prepaid_api_key_surface","category":"speculative","description":"Pre-funded API keys for zero-friction agent onboarding — agents start with a key that already has credits","artifacts":["planned"],"detection_rule":"Not yet implemented: will allow issuing API keys with pre-loaded credit balances"}]