{"record_format":1,"spec":"0.3","name":"PUDL","description":"Pooled User Data Layer: pool everything you and your agents need in one place, with explicit access to data and connections.","host_did":"did:key:z6MkkSz12dVkw3sGFrGspxp7CYU4GAVtxSZwiaXZ7q4vLjDJ","api":"https://pudl.ai/v0","llms_txt":"https://pudl.ai/llms.txt","spec_url":"https://pudl.ai/spec","host_profile":"https://pudl.ai/spec/host","quickstart":"https://pudl.ai/quickstart","terms":"https://pudl.ai/terms","abuse":"https://pudl.ai/abuse","source":"https://github.com/jmaxmakes/pudl-protocol","mcp":{"package":"pudl-mcp","command":"npx -y pudl-mcp","remote":"https://pudl.ai/mcp"},"oauth":{"issuer":"https://pudl.ai"},"data_retrieval":{"version":1,"search":"/v0/data","resources":"/v0/data/resources","records":"/v0/data/records","consistency":"current_read"},"pool_organization":{"version":1,"pools":"/v0/pools","profile":"pool-organization/v1"},"agent_pool_rules":{"version":1,"endpoint":"/v0/agent-pool-rules"},"data_changes":{"version":1,"snapshot":"/v0/changes/snapshot","feed":"/v0/changes","page_limit":100,"consistency":"snapshot_inventory_current_authorization","reset":"discard_cached_view_and_restart"},"connection_facade":{"version":1,"discovery":"/v0/connections","invoke":"/v0/connections/call"},"pool_management":{"version":1,"discovery":"/v0/pool-discovery","join":"/v0/pool-joins","actions":["create_pool","join_pool"],"enabled":true,"private_creation_only":true,"guest_approval":"owner","existing_all_pools_grants":"preserved"},"public_publication":{"version":1,"human_review_required":true,"new_pools_enabled":false,"attachments_enabled":false,"directory":"/v0/public-pools"},"scoped_file_uploads":{"version":1,"destination_parameter":"pool","staging_hours":24},"hosted_file_uploads":{"version":1,"resource":"https://pudl.ai/mcp","prepare":"/mcp/file-uploads/prepare","status":"/mcp/file-uploads/status","commit":"/mcp/file-uploads/commit","upload":"/mcp/file-uploads/{hash}","max_files":1,"max_bytes":100000000,"intent_max_bytes":16384},"limits":{"header_bytes":4096,"body_bytes":65536,"request_bytes":262144,"about":20,"links":20,"files":256,"scope":20},"policy":{"public_pools":false,"blocked_media_types":[],"files":{"max_bytes":100000000,"quota_bytes":20000000000,"require_claim":true,"unreferenced_hours":24,"media_types":["*/*"]},"file_storage":{"accounting":"stored bytes including retention, with durable staging and copy reservations; operator safeguards, not paid allowances","host_bytes":20000000000,"host_generations":4096,"account_retained_bytes":20000000000,"organization_bytes":20000000000},"sandbox":{"ttl_days":30,"pool_limit":5},"record_storage":{"accounting":"canonical headers, signatures and bodies including retained bodies; separate from files","host":{"bytes":33554432,"records":10000},"account":{"bytes":33554432,"records":10000},"organization":{"bytes":4194304,"records":1000}},"rate_limits_per_hour":{"unclaimed":{"reads":600,"writes":60},"claimed":{"reads":10000,"writes":1000},"anonymous":{"reads":300,"writes":30},"per_ip":20000,"new_keys_per_ip":100,"curator_removals":100},"sharing":{"min_pool_owners":3,"schemes":["npm","pypi","mcp","pkg","doi","arxiv","domain"]},"retention":{"removed_body_days":14},"custody":{"host_held":["web","remote_mcp"],"web":"One key per person and organization, for web actions that write records (creating a business's pools, changing a pool's settings).","remote_mcp":"One key per AI connection (an OAuth grant of the remote MCP endpoint), claimed by the person who connected it and bound to the organization they picked. Revoking the connection destroys the key.","sealed":"AES-256-GCM under a key derived from a host secret separate from the host key; opened in memory only to sign; never logged, exported or shown."},"curated_pools":[],"connection_execution":{"hosted":"Opt-in encrypted provider-key custody, separate from signed-record keys. Owners approve the exact connection, selected agents and tools; revocation disables access and destroys the held credential.","external":"Provider keys can remain on the user's own client or business gateway.","spending":"Generic tools may charge the owner's provider account. PUDL enforces permissions and request limits, not a generic monetary cap. Provider spending limits apply; managed imports retain their separate per-run caps."}}}