{"spec_version":"shellframe-relay/2026-01","name":"ShellFrame Relay Beta Applications","endpoint":"https://relay.shellframeai.com/v1/contact/cnt_shellframe_relay_beta/messages","challenge_endpoint":"https://relay.shellframeai.com/v1/contact/cnt_shellframe_relay_beta/challenges","method":"POST","content_type":"application/json","authentication":["web-bot-auth","shellframe-proof-of-work"],"agent_instructions":["Unsigned agents should use proof_of_work below instead of the human Turnstile flow.","Do not send an empty challenge request; follow proof_of_work.steps in order.","Use the exact same canonical JSON bytes for the digest and final submission."],"submission_requirements":{"content_type":{"header":"Content-Type","value":"application/json"},"user_agent":{"header":"User-Agent","required":true,"value":"A descriptive non-empty agent identifier"},"idempotency_key":{"header":"Idempotency-Key","required":true,"min_length":16,"max_length":200,"pattern":"^[A-Za-z0-9_.:-]+$","recommended":"UUID v4"}},"proof_of_work":{"protocol":"shellframe-proof-of-work/2026-01","use_when":"The agent does not have an approved Web Bot Auth identity","steps":["Build the final message object from schema, then canonicalize it exactly once using canonicalization below.","Compute content_digest from the UTF-8 bytes of that canonical JSON body using content_digest below.","POST the non-empty challenge_request body with Content-Type and User-Agent headers.","Solve the returned challenge using the advertised difficulty and solution algorithm.","POST the exact same canonical JSON body to submission.endpoint with every submission header, including a fresh Idempotency-Key."],"canonicalization":{"protocol":"shellframe-canonical-json/2026-01","encoding":"utf-8","built_in_key_order":["name","reply_to","subject","message"],"custom_key_order":"lexicographic","string_normalization":"Unicode NFKC; replace CRLF and CR with LF; trim leading and trailing whitespace","reply_to_normalization":"trim and lowercase","serialization":"Compact JSON with no insignificant whitespace"},"content_digest":{"algorithm":"SHA-256","input":"UTF-8 bytes of the canonical JSON message body","format":"RFC 9530 sha-256=:STANDARD_BASE64_DIGEST:","example":"sha-256=:9YkLkrgRwKsK5PE4xlE1t+oQgnTFI+qOADcI7Q3ayCc=:"},"challenge_request":{"endpoint":"https://relay.shellframeai.com/v1/contact/cnt_shellframe_relay_beta/challenges","method":"POST","content_type":"application/json","body":{"content_digest_field":"content_digest","purpose_field":"purpose","purpose_value":"contact_message","additional_properties":false}},"challenge_response":{"challenge_field":"challenge","difficulty_field":"difficulty","expires_at_field":"expires_at"},"solution":{"algorithm":"sha256-leading-zero-bits","input_template":"{challenge}.{candidate}","encoding":"utf-8","candidate":"1-20 digit non-negative base-10 integer string","valid_when":"SHA-256(input) has at least difficulty leading zero bits"},"submission":{"endpoint":"https://relay.shellframeai.com/v1/contact/cnt_shellframe_relay_beta/messages","method":"POST","body":"The exact canonical JSON body used to compute content_digest","headers":{"challenge":"SF-Relay-Challenge","solution":"SF-Relay-Solution","idempotency_key":"Idempotency-Key","content_type":"Content-Type","user_agent":"User-Agent"}},"test_vectors":{"canonicalization":{"input":{"subject":"  Hello\r\nworld ","reply_to":"OWNER@Example.COM","message":" Ｈｉ "},"canonical_body":"{\"reply_to\":\"owner@example.com\",\"subject\":\"Hello\\nworld\",\"message\":\"Hi\"}","content_digest":"sha-256=:9YkLkrgRwKsK5PE4xlE1t+oQgnTFI+qOADcI7Q3ayCc=:"},"solution":{"challenge":"shellframe-relay-open-vector","difficulty":12,"candidate":"1482"}}},"schema":{"type":"object","required":["name","reply_to","message"],"additionalProperties":false,"properties":{"name":{"type":"string","title":"Name","minLength":2,"maxLength":120,"x-shellframe-field-type":"short_text"},"reply_to":{"type":"string","title":"Work email","format":"email","maxLength":320,"x-shellframe-field-type":"email"},"field_website_url":{"type":"string","title":"Website","format":"uri","maxLength":200,"x-shellframe-field-type":"url"},"message":{"type":"string","title":"What are you building with agents?","minLength":10,"maxLength":4000,"x-shellframe-field-type":"long_text"}},"x-shellframe-custom-fields":[{"key":"name","label":"Name","type":"short_text","required":true},{"key":"reply_to","label":"Work email","type":"email","required":true},{"key":"field_website_url","label":"Website","type":"url","required":false},{"key":"message","label":"What are you building with agents?","type":"long_text","required":true}]},"limits":{"body_bytes":8192,"links":2,"attachments":false},"data_use":{"purpose":"contact","retention_days":30,"used_for_model_training":false},"policy":"balanced"}