{"id":614404,"name":"Loyal Spark","description":"Onchain loyalty on Base (chain 8453). Pay $0.01 USDC at POST /x402-gateway/register-agent for a full lsk_ key on the Free plan (200 calls/month, 1,000 mint tokens/month, all 5 scopes), or use SIWE (POST /agent-register-siwe) with a Shopify store plan or paid Pro/Enterprise plan. Then GET /workflow/program-status and follow next_actions.","card_url":"https://loyalspark.online/.well-known/agent-card.json","endpoint":"https://api.loyalspark.online/agent-api","protocol_version":"mcp+rest","first_seen":"2026-11-13T11:50:24.129333+00:00","last_verified":"2026-11-13T11:50:24.129333+00:00","card":{"api":{"note":"GET /info and GET /get_platform_info are aliases of GET /platform and are not extra product routes. Compact OpenAPI: https://loyalspark.online/openapi-lite.json","base_url":"https://api.loyalspark.online/agent-api","endpoints":[{"path":"/platform","scope":"none (public)","method":"GET","description":"Public platform and onboarding JSON. No API key. Aliases: GET /info, GET /get_platform_info, and GET /agent-api?action=platform."},{"path":"/me","scope":"authenticated","method":"GET","description":"Get agent profile, permissions, plan, and wallet info"},{"path":"/workflow/generate-program-defaults","scope":"read or mint or create_program","method":"POST","description":"Return field_catalog, workflow.next_actions, and non-binding examples for program name, symbol, economics, and starter rewards. Does not fill values for the agent."},{"path":"/workflow/program-status","scope":"read","method":"GET","description":"Return machine-readable merchant workflow state, next actions, and prerequisites for the most recent or specified program."},{"path":"/programs","scope":"read","method":"GET","description":"List all active loyalty programs"},{"path":"/programs","scope":"mint or create_program","method":"POST","description":"Start a program deploy workflow. External agents must pass name and symbol. Returns workflow metadata for next steps."},{"path":"/register-program","scope":"mint or create_program","method":"POST","description":"Register a deployed token as a loyalty program in the database. B20 becomes active immediately; legacy ERC-20 needs activation flow next."},{"path":"/update-program-config","scope":"mint or create_program","method":"POST","description":"Update default cashback_rate and/or points_per_dollar for a program you own"},{"path":"/activate-program","scope":"mint or create_program","method":"POST","description":"Activation step for legacy ERC-20 programs. For B20 programs this is a no-op because they are active by construction."},{"path":"/program-status","scope":"mint or create_program","method":"POST","description":"Update program status in database after on-chain activation/pause"},{"path":"/rewards","scope":"read","method":"GET","description":"List rewards for a loyalty program"},{"path":"/rewards","scope":"manage_rewards","method":"POST","description":"Create a new reward redeemable with loyalty tokens"},{"path":"/mint","scope":"mint","method":"POST","description":"Prepare a fee-first mint: returns calls[] (protocol fee first, then recipient) plus fee_obligation_id. Submit onchain then confirm. Prefer recipient_address; recipient is a legacy alias."},{"path":"/mint/confirm","scope":"mint","method":"POST","description":"Verify the protocol-fee mint on Base and settle the pending fee obligation. Required after /mint or /earn when fee_amount > 0."},{"path":"/mints","scope":"read or mint","method":"GET","description":"List mint intents for this key. Query status=pending|completed and optional token_address. No per-call charge with an lsk_ key. Not on x402 or MPP."},{"path":"/fee-obligations","scope":"read or mint","method":"GET","description":"This key's fee obligations. status=unpaid means pending. A settled row can still need POST /mint/confirm. No per-call charge with an lsk_ key. Not on x402 or MPP."},{"path":"/earn","scope":"mint","method":"POST","description":"Auto-calculate and mint tokens from purchase amount using program's cashback rate. POS-friendly alternative to /mint."},{"path":"/transfer","scope":"mint","method":"POST","description":"Transfer loyalty tokens between wallets. Returns calldata with Builder Code for onchain execution."},{"path":"/balance","scope":"read","method":"GET","description":"Check token balance for a wallet"},{"path":"/customers","scope":"read","method":"GET","description":"List customers with token balances and activity"},{"path":"/analytics","scope":"read","method":"GET","description":"Get program analytics and performance metrics"},{"path":"/vouchers","scope":"read","method":"GET","description":"List vouchers with optional filters (token_address, status, limit)"},{"path":"/vouchers/status","scope":"none (public)","method":"GET","description":"Check voucher status by code or ID. No API key required."},{"path":"/redeem-reward","scope":"read","method":"POST","description":"Redeem a reward: verify on-chain token transfer tx and create a voucher"},{"path":"/vouchers/use","scope":"manage_rewards","method":"POST","description":"Mark a voucher as used (redeemed by customer). Merchant-only."},{"path":"/tx-receipt","scope":"authenticated","method":"GET","description":"Extract token_address from a deploy transaction hash (requires API key; not public)"},{"path":"/offers","scope":"read or trade","method":"GET","description":"List active P2P escrow offers for token trading"},{"path":"/offers","scope":"trade","method":"POST","description":"Create a new P2P escrow offer. Returns escrow contract calldata for atomic swap."},{"path":"/accept-offer","scope":"trade","method":"POST","description":"Accept a P2P offer. Returns escrow contract calldata for fillOffer."},{"path":"/cancel-offer","scope":"trade","method":"POST","description":"Cancel your own P2P offer. Returns escrow contract calldata for cancelOffer."},{"path":"/merchant-profile","scope":"read","method":"GET","description":"Get merchant business profile (business_name, category, branding) for the agent's bound wallet."},{"path":"/merchant-profile","scope":"mint or create_program","method":"POST","description":"Upsert merchant business profile (business_name, category, logo_url, description, website, location)."},{"path":"/merchant-profile","scope":"mint or create_program","method":"PUT","description":"Update the merchant business profile for the agent's bound wallet."},{"path":"/store/codes","scope":"read","method":"GET","description":"List Shopify discount codes for this merchant's store. Optional query token_address. API key only: not on the x402 or MPP gateway."},{"path":"/store/codes","scope":"manage_rewards","method":"POST","description":"Mark a Shopify discount code used, or cancel it and return the loyalty points. API key only: not on the x402 or MPP gateway."},{"path":"/store/channel","scope":"read","method":"GET","description":"How this store's customers spend points: online (checkout code), offline (voucher at the register), or both. API key only."},{"path":"/store/channel","scope":"manage_rewards or mint","method":"POST","description":"Set how customers spend points. API key only: not on the x402 or MPP gateway."}],"route_count":40,"public_routes":["GET /vouchers/status","GET /platform"],"route_count_basis":"OpenAPI 3.1 authenticated operations under /agent-api (38) plus public GET /vouchers/status and GET /platform. Source: https://loyalspark.online/openapi.json","authenticated_routes":38},"url":"https://api.loyalspark.online/agent-api","name":"Loyal Spark","skills":[{"id":"merchant-loyalty","name":"Merchant loyalty","tags":["loyalty","base","mint"],"description":"Deploy a loyalty program, mint tokens, and redeem vouchers on Base."},{"id":"agent-plans","name":"Agent plan payment","tags":["pricing","plans","usdc","subscription"],"examples":["MCP tools/call get_payment_info","POST https://api.loyalspark.online/verify-agent-plan-payment {\"action\":\"get_payment_info\",\"product\":\"agent\"}","POST https://api.loyalspark.online/verify-agent-plan-payment {\"action\":\"verify_payment\",\"product\":\"agent\",\"plan_slug\":\"pro\",\"transaction_hash\":\"0x…\"}"],"description":"Discover Pro ($49/mo or $499.80/yr) and Enterprise ($129/mo or $1,238.40/yr) plan prices via MCP get_payment_info or POST https://api.loyalspark.online/verify-agent-plan-payment (actions get_payment_info, verify_payment). Pay USDC on Base from your registered wallet, then verify with x-api-key lsk_. Free plan keys still come from POST /x402-gateway/register-agent ($0.01)."}],"pricing":{"plans":[{"name":"Free (via $0.01 x402 register-agent)","note":"POST /x402-gateway/register-agent","price_usd":"0.01 one-time key registration"},{"name":"Pro","annual_price_usdc":499.8,"price_usdc_monthly":49,"annual_discount_percent":15},{"name":"Enterprise","annual_price_usdc":1238.4,"price_usdc_monthly":129,"annual_discount_percent":20}],"currency":"USDC on Base","how_to_pay":{"auth":"x-api-key: lsk_...","rest":"POST https://api.loyalspark.online/verify-agent-plan-payment","actions":["get_payment_info","verify_payment"],"mcp_tool":"get_payment_info"}},"version":"1.0.0","provider":{"url":"https://loyalspark.online","organization":"Loyal Spark"},"interfaces":{"a2a":{"note":"Loyal Spark does not implement A2A message/send. Prefer MCP or REST.","implemented":false},"mcp":{"url":"https://api.loyalspark.online/loyalty-mcp","auth":"x-api-key: lsk_","card":"https://loyalspark.online/.well-known/mcp.json","note":"Only MCP transport. Not an A2A message/send endpoint.","transport":"streamable-http"},"rest":{"baseUrl":"https://api.loyalspark.online/agent-api","openapi":"https://loyalspark.online/openapi.json","openapi_lite":"https://loyalspark.online/openapi-lite.json"},"siwe":{"uri":"https://loyalspark.online","body":{"name":"agent name","scopes":["read","create_program","mint","manage_rewards","trade"],"message":"EIP-4361 string","signature":"0x..."},"docs":"https://loyalspark.online/.well-known/skills/00-getting-started.md","note":"Unpaid SIWE registration when the wallet already has a Shopify store plan, a paid Pro/Enterprise plan, or rotates its existing Free agent by name. Otherwise returns HTTP 402 error_code payment_required — pay $0.01 at POST /x402-gateway/register-agent for a full Free plan lsk_ key (200 calls/mo, 1,000 tokens/mo, all 5 scopes).","first":true,"domain":"loyalspark.online","chainId":8453,"version":"1","nonceUrl":"https://api.loyalspark.online/siwe-nonce","statement":"Register Loyal Spark merchant agent","registerUrl":"https://api.loyalspark.online/agent-register-siwe"}},"description":"Onchain loyalty on Base (chain 8453). Pay $0.01 USDC at POST /x402-gateway/register-agent for a full lsk_ key on the Free plan (200 calls/month, 1,000 mint tokens/month, all 5 scopes), or use SIWE (POST /agent-register-siwe) with a Shopify store plan or paid Pro/Enterprise plan. Then GET /workflow/program-status and follow next_actions.","capabilities":{"streaming":false,"pushNotifications":false,"stateTransitionHistory":false},"protocolNote":"This card documents Loyal Spark MCP + REST surfaces only. It is not an A2A Agent Card for message/send; A2A is not implemented. Use interfaces.mcp for Streamable HTTP MCP and interfaces.rest for OpenAPI REST.","authentication":{"schemes":["apiKey"],"credentials":"header x-api-key: lsk_... or Authorization: Bearer lsk_..."},"protocolVersion":"mcp+rest","documentationUrl":"https://loyalspark.online/for-agents","defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["application/json","text/plain"],"preferredTransport":"HTTP+JSON","recipient_registration":{"body":{"name":"optional label","message":"EIP-4361 string","signature":"0x..."},"note":"No special SIWE statement phrase. Chain ID 8453. Do not send a Supabase apikey header on api.loyalspark.online. Returns rwk_ once. Merchant registration is a different route (agent-register-siwe) and does use the statement 'Register Loyal Spark merchant agent'.","nonce_url":"https://api.loyalspark.online/siwe-nonce","register_url":"https://api.loyalspark.online/recipient-api/register","rest_base_url":"https://api.loyalspark.online/recipient-api"}},"status":"verified","publisher_domain":"loyalspark.online","signature_status":"unsigned","signature_detail":"No card signature supplied","signature_key_url":null,"signature_checked_at":"2026-11-13T11:50:24.129333+00:00","domain_claimed_at":null,"domain_proof_checked_at":null,"source_name":"Publisher Agent Card","source_url":"https://loyalspark.online/.well-known/agent-card.json","last_check":{"checked_at":"2026-11-13T11:50:24.129333+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"also_published_at":[],"history_urls":["https://loyalspark.online/.well-known/agent-card.json"],"skills":[{"skill_id":"agent-plans","name":"Agent plan payment","description":"Discover Pro ($49/mo or $499.80/yr) and Enterprise ($129/mo or $1,238.40/yr) plan prices via MCP get_payment_info or POST https://api.loyalspark.online/verify-agent-plan-payment (actions get_payment_info, verify_payment). Pay USDC on Base from your registered wallet, then verify with x-api-key lsk_. Free plan keys still come from POST /x402-gateway/register-agent ($0.01).","tags":["pricing","plans","usdc","subscription"],"quality_warning":false},{"skill_id":"merchant-loyalty","name":"Merchant loyalty","description":"Deploy a loyalty program, mint tokens, and redeem vouchers on Base.","tags":["loyalty","base","mint"],"quality_warning":false}],"quality_flags":[],"check_history":{"checks":1,"passed":1},"recent_checks":[{"card_url":"https://loyalspark.online/.well-known/agent-card.json","checked_at":"2026-11-13T11:50:24.129333+00:00","success":true,"http_status":200,"detail":"Agent Card validated"}],"endpoint_tls_check":{"checked_at":"2026-11-13T11:50:24.129333+00:00","success":true,"detail":"Valid TLS connection to advertised endpoint host; no A2A request sent"},"protocol_check":{"checked_at":"2026-11-13T11:50:24.129333+00:00","endpoint":"https://api.loyalspark.online/agent-api","protocol_binding":"HTTP+JSON","protocol_version":"mcp+rest","state":"skipped","http_status":null,"detail":"No supported interface probe completed within the bounded check","request_diagnostics":null},"declared_primary_endpoint":"https://api.loyalspark.online/agent-api","selected_connection_interface":{"url":"https://api.loyalspark.online/agent-api","protocolBinding":"HTTP+JSON","protocolVersion":"mcp+rest"},"protocol_interface_checks":[{"endpoint":"https://api.loyalspark.online/agent-api","protocol_binding":"HTTP+JSON","protocol_version":"mcp+rest","selected":true,"state":"skipped","checked_at":"2026-11-13T11:50:24.129333+00:00","http_status":null,"detail":"No supported interface probe completed within the bounded check","binding_recorded":true}],"connection_selection_note":"The selected connection uses an address advertised in the publisher card. Read-only observations do not establish task quality or safety.","x402_price_check":null,"events":[],"relationships":[],"verification":{"agent_card_url":"https://loyalspark.online/.well-known/agent-card.json","last_successful_card_check":"2026-11-13T11:50:24.129333+00:00","latest_card_check":{"checked_at":"2026-11-13T11:50:24.129333+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"signature_status":"unsigned","signature_checked_at":"2026-11-13T11:50:24.129333+00:00","task_endpoint_tested":false,"task_execution_tested":false,"endpoint_tls_checked_at":"2026-11-13T11:50:24.129333+00:00","endpoint_tls_reachable":true,"protocol_check_state":"skipped","protocol_checked_at":"2026-11-13T11:50:24.129333+00:00","provider_identity_verified":false,"domain_claimed_at":null,"domain_proof_checked_at":null},"synthetic_capability_tests":{"agent_id":614404,"status":"not_tested","reason_code":"not_yet_tested","consent_status":"not_confirmed","latest_observation_status":null,"last_checked_at":null,"fixture_version":"1","reference_demonstration":false,"scope":"A publisher-authorized synthetic test of a dedicated free test endpoint. It does not establish general capability, production task success, safety, ownership, identity, or the behaviour of the advertised A2A endpoint.","methodology_url":"https://localmark.ai/capability-tests","history":[]},"repair_links":{"agent_repair_url":"https://localmark.ai/agents/614404/repair","publisher_report_url":"https://localmark.ai/publishers/loyalspark.online/repair","diagnostics_json_url":"https://localmark.ai/publishers/loyalspark.online/repair/diagnostics.json","diagnostics_csv_url":"https://localmark.ai/publishers/loyalspark.online/repair/diagnostics.csv"},"_localmark":{"contribution":{"optional":true,"directory_access":"free","operator_authorization_required":true,"affects_rankings":false,"message":"LocalMark is free. Optional contributions help fund ongoing checks.","support_url":"https://localmark.ai/support","metadata_url":"https://localmark.ai/api/v1/support/contributions"}}}