{"name":"RubyHash Agent API","description":"Machine-callable Ruby hash tools from rubyhash.dev. Diff Ruby hashes from failing Minitest/RSpec output, convert Ruby hash literals to sorted JSON, and batch-diff for CI. Deterministic parser, no LLM, no data retained. Single calls are free within a daily fair-use quota; heavy use and /batch pay per call via x402.","x402Version":2,"operator":"https://rubyhash.dev","network":"eip155:8453","payTo":"0xA82399dAC7705f260DB6c16aE2876f086F5D5112","resources":[{"type":"http","resource":"https://dcwupdtclrmraxmqblou.supabase.co/functions/v1/rubyhash-api/diff","x402Version":2,"method":"POST","accepts":[{"scheme":"exact","network":"eip155:8453","amount":"5000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0xA82399dAC7705f260DB6c16aE2876f086F5D5112","resource":"https://dcwupdtclrmraxmqblou.supabase.co/functions/v1/rubyhash-api/diff","maxTimeoutSeconds":300,"extra":{"name":"USD Coin","version":"2"}}],"lastUpdated":"2026-07-10T19:36:14.813Z","metadata":{"description":"Diff two Ruby hash literals and return changed/added/removed keys with before/after values and explicit type changes (nil to String, Integer to Float, symbol vs string keys). Body: {\"expected\": \"...\", \"actual\": \"...\"} or {\"raw\": \"<failing test output>\"}. Bodies over 200,000 characters are rejected.","mimeType":"application/json","freeTier":"First ~100 requests per IP per day are free (fair use), after that the same call is payable via x402. No account either way."}},{"type":"http","resource":"https://dcwupdtclrmraxmqblou.supabase.co/functions/v1/rubyhash-api/convert","x402Version":2,"method":"POST","accepts":[{"scheme":"exact","network":"eip155:8453","amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0xA82399dAC7705f260DB6c16aE2876f086F5D5112","resource":"https://dcwupdtclrmraxmqblou.supabase.co/functions/v1/rubyhash-api/convert","maxTimeoutSeconds":300,"extra":{"name":"USD Coin","version":"2"}}],"lastUpdated":"2026-07-10T19:36:14.813Z","metadata":{"description":"Parse a Ruby hash or array literal (hashrockets, symbols, shorthand, nesting) and return JSON with sorted keys. Body: {\"hash\": \"...\", \"sort_keys\": true}.","mimeType":"application/json","freeTier":"First ~100 requests per IP per day are free (fair use), after that the same call is payable via x402. No account either way."}},{"type":"http","resource":"https://dcwupdtclrmraxmqblou.supabase.co/functions/v1/rubyhash-api/batch","x402Version":2,"method":"POST","accepts":[{"scheme":"exact","network":"eip155:8453","amount":"20000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","payTo":"0xA82399dAC7705f260DB6c16aE2876f086F5D5112","resource":"https://dcwupdtclrmraxmqblou.supabase.co/functions/v1/rubyhash-api/batch","maxTimeoutSeconds":300,"extra":{"name":"USD Coin","version":"2"}}],"lastUpdated":"2026-07-10T19:36:14.813Z","metadata":{"description":"Batch diff up to 100 Ruby hash pairs in one call, built for CI and agent pipelines. Body: {\"pairs\": [{\"expected\": \"...\", \"actual\": \"...\"} or {\"raw\": \"...\"}], \"include_json\": false}. Returns a results array in order.","mimeType":"application/json"}}],"docs":"https://rubyhash.dev/agents","openapi":"https://dcwupdtclrmraxmqblou.supabase.co/functions/v1/rubyhash-api/openapi.json"}