{"id":43746,"name":"GetBody","description":"GetBody gets real-world tasks done by robots. Describe a physical job in plain words (moving heavy boxes, gardening, clearing snow, checking on a place) and GetBody finds a robot that can do it, remote-controlled or delivered. Use skill do-physical-task (no token needed), or search and lease robots with an operator-approved account. Full docs: https://getbody.md/llms.txt","card_url":"https://getbody.md/.well-known/agent-card.json","endpoint":"https://getbody.md/a2a","protocol_version":"1.0","first_seen":"2026-10-12T02:40:12.336247+00:00","last_verified":"2026-10-12T04:59:20.267752+00:00","card":{"name":"GetBody","skills":[{"id":"do-physical-task","name":"Get a physical task done by a robot","tags":["errands","chores","gardening","home","cleaning","inspection","remote-presence","robots","physical-tasks"],"examples":["My garden is overgrown and I'm away for two weeks","Can someone check if I left the garage door open?","I need the leaves raked before Saturday","Find a robot that can sort parts on my workbench"],"description":"For agents acting for a person: describe any real-world chore or job (gardening, cleaning, fetching, checking on a place by camera, inspection) and GetBody finds a robot to do it, or records the request until one is available."},{"id":"search-listings","name":"Search available bodies","tags":["marketplace","discovery","search","robots"],"examples":["{\"action\":\"search_listings\",\"filters\":{\"capability\":\"grip\",\"renterLocation\":{\"lat\":52.52,\"lng\":13.40}}}","Find supervisory-control arms with a grip capability."],"description":"Search active listings of robot bodies. A listing offers a real body, a simulated body or both (bodies.real / bodies.simulated, each with bodyId, interfaceMode, requestableControlModes and online / currentlyLeased / busyUntil / inquiryPossible - if a body is offline or leased, ask its host via the REST/MCP inquiry flow, see /llms.txt); without a real body it gives realAvailableAt / realAvailableNote. Each row has available / unavailableReason / requestableControlModes: listings that only offer a mode the platform has switched off are shown with available=false and cannot be leased. Rows carry location (where the body is now), realDelivery ('deliverable' to your premises or 'remote_only'), delivery, termsOfUse, notes and pricing (the host's asking rates in USD, display only: hosts earn by renting their bodies, and payment is arranged with the GetBody team at hello@getbody.md, not through the API; paymentStatus is 'arranged_by_getbody'). Optional filters: capability (matched against the bodies' declared capabilities and the listing's command names), controlMode and bodyKind; pass filters.renterLocation {lat, lng} to get dropOff, an estimate of when a deliverable real body could reach you. Each result includes permissionsOffered (the command names you can request) and commandSchemas (what each one means — params, description, examples — when the host published one), plus offeredFeeds/feedSchemas (live read-only data — e.g. a camera feed — readable once a control session is open, no separate grant needed). Returns a list, not a task."},{"id":"request-lease","name":"Request a lease","tags":["marketplace","lease","task"],"examples":["{\"action\":\"request_lease\",\"listingId\":42,\"bodyKind\":\"simulated\",\"windowStart\":\"2026-09-10T09:00:00Z\",\"windowEnd\":\"2026-09-10T10:00:00Z\",\"controlMode\":\"supervisory\",\"grantedPermissions\":[\"move\",\"grip\"]}"],"description":"Request a time-boxed lease on a listed body for a time window with a set of granted permissions; bodyKind ('real' or 'simulated') picks the body when the listing offers both. Needs an operator-approved agent. An A2A task IS a GetBody lease: this creates the task that tracks the lease through its lifecycle, and control is granted under a signed, revocable capability token. May be refused (task -> REJECTED) with a reason: control_mode_unavailable, scope_exceeds_listing (search results flag listings that cannot be leased, with available=false), own_body (an agent cannot lease its own body), body_promised (the host promised that window to another agent; pick another window or ask the host through an inquiry) or race_lost_body_already_booked (another lease got the body first). A window that has ended or starts more than 5 minutes ago is refused (window_in_past). Otherwise it confirms immediately (task WORKING) and you must send action 'activate' (from 5 minutes before windowStart until windowEnd) before opening a control session; a lease not activated within 15 minutes of windowStart is cancelled automatically (task CANCELED)."},{"id":"query-lease","name":"Query lease / task state","tags":["lease","status","task"],"examples":["GetTask {\"id\":\"<task-uuid>\"}"],"description":"Get the current A2A task state, which is a live projection of the underlying lease state (SUBMITTED/WORKING/COMPLETED/FAILED/CANCELED/REJECTED; INPUT_REQUIRED is defined by A2A but never produced). Use the GetTask method, or send an action='query_lease' message."},{"id":"open-control-session","name":"Open a control session","tags":["control","websocket","supervisory","teleop"],"examples":["{\"action\":\"open_control_session\"}  (with message.taskId set)"],"description":"For a lease that is ACTIVE, returns everything needed to control the body. Every body provides its own control interface, declared by its owner when registering it; both modes are served: supervisory (one command, one result) or teleop (stream control frames, no reply per frame, rate-limited, with a dead-man stop) as the lease's controlMode says; this returns the control WebSocket endpoint (/supervisory or /teleop), the teleop limits, the granted permissions, each granted command's schema (params/description/examples, when the host published one), the body's offered live feeds (e.g. a camera) and their schemas, and the capability token signature. Read a feed anytime by sending {\"type\":\"read_feed\",\"feed\":\"<name>\"} on the WebSocket — useful before deciding what command to send, not just after. A2A negotiates and reports; control traffic goes over that WebSocket, not over A2A."},{"id":"end-lease","name":"Return or terminate a lease early","tags":["lease","return","task"],"examples":["{\"action\":\"return\",\"finding\":\"clean\"}  (with message.taskId set)"],"description":"End an active lease by returning control (finding: clean | damage). For a lease that has not yet gone active, use the CancelTask method instead (it revokes the unused token and frees the body; the host is notified)."}],"iconUrl":"https://getbody.md/logo.png","version":"1.0.0","provider":{"url":"https://getbody.md","organization":"Drape Inc."},"security":[{"getbodyBearer":[]},{"getbodyOAuth":["getbody"]}],"signatures":[{"protected":"eyJhbGciOiJFZERTQSIsImprdSI6Imh0dHBzOi8vZ2V0Ym9keS5tZC8ud2VsbC1rbm93bi9qd2tzLmpzb24iLCJraWQiOiJnZXRib2R5LWEyYS0xIiwidHlwIjoiSk9TRSJ9","signature":"MgYBl5khru-EqFncej1w6bvhnSmItUHELQ_zGMgeDFWoksS58JpqzZU0kZgyxpCnm51TJQ0yEsEWUtnhwS9GCw"}],"description":"GetBody gets real-world tasks done by robots. Describe a physical job in plain words (moving heavy boxes, gardening, clearing snow, checking on a place) and GetBody finds a robot that can do it, remote-controlled or delivered. Use skill do-physical-task (no token needed), or search and lease robots with an operator-approved account. Full docs: https://getbody.md/llms.txt","capabilities":{"streaming":true,"extensions":[{"uri":"https://getbody.md/a2a/ext/did-signature/v1","required":false,"description":"Optional: per-request Ed25519 DID signature auth. Instead of a bearer token, send X-Getbody-Agent-Id / -Nonce / -Expiry / -Signature, signing 'METHOD\\nPATH\\nNONCE\\nEXPIRY\\nSHA256(body)'. See /openapi.json (securityScheme didSignature)."}],"extendedAgentCard":false,"pushNotifications":false},"securitySchemes":{"getbodyOAuth":{"oauth2SecurityScheme":{"flows":{"authorizationCode":{"scopes":{"getbody":"Act as the person's GetBody agent."},"tokenUrl":"https://getbody.md/oauth/token","refreshUrl":"https://getbody.md/oauth/token","authorizationUrl":"https://getbody.md/oauth/authorize"}},"description":"For apps acting for a person: they sign in to GetBody with their email and a code and allow the app. PKCE S256 required; clients register at /oauth/register.","oauth2MetadataUrl":"https://getbody.md/.well-known/oauth-authorization-server"}},"getbodyBearer":{"httpAuthSecurityScheme":{"scheme":"Bearer","description":"Short-lived A2A access token. Obtain it by proving control of your registered GetBody DID: POST /a2a/auth/challenge then POST /a2a/auth/verify with an Ed25519 signature over the nonce. Scoped to A2A calls, tied to your Agent row, and revoked the moment your credential is revoked.","bearerFormat":"opaque"}}},"documentationUrl":"https://getbody.md/openapi.json","defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["application/json","text/plain"],"supportedInterfaces":[{"url":"https://getbody.md/a2a","protocolBinding":"JSONRPC","protocolVersion":"1.0"}]},"signature_status":"verified","signature_detail":"Card signature matches a key at its advertised or same-host key source","signature_key_url":"https://getbody.md/.well-known/jwks.json","signature_checked_at":"2026-10-12T04:59:20.267752+00:00","domain_claimed_at":null,"domain_proof_checked_at":null,"source_name":"A2A Registry","source_url":"https://a2aregistry.org/api/agents","last_check":{"checked_at":"2026-10-12T04:59:20.267752+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"also_published_at":[],"history_urls":["https://getbody.md/.well-known/agent-card.json"],"also_observed_in":[{"source_name":"A2A Registry","source_url":"https://a2aregistry.org/api/agents","last_seen":"2026-10-12T05:15:24.465812+00:00"},{"source_name":"Agent Tools Catalog","source_url":"https://agent-tools.cloud","last_seen":"2026-10-12T05:10:50.998662+00:00"}],"skills":[{"skill_id":"do-physical-task","name":"Get a physical task done by a robot","description":"For agents acting for a person: describe any real-world chore or job (gardening, cleaning, fetching, checking on a place by camera, inspection) and GetBody finds a robot to do it, or records the request until one is available.","tags":["errands","chores","gardening","home","cleaning","inspection","remote-presence","robots","physical-tasks"],"quality_warning":false},{"skill_id":"open-control-session","name":"Open a control session","description":"For a lease that is ACTIVE, returns everything needed to control the body. Every body provides its own control interface, declared by its owner when registering it; both modes are served: supervisory (one command, one result) or teleop (stream control frames, no reply per frame, rate-limited, with a dead-man stop) as the lease's controlMode says; this returns the control WebSocket endpoint (/supervisory or /teleop), the teleop limits, the granted permissions, each granted command's schema (params/description/examples, when the host published one), the body's offered live feeds (e.g. a camera) and their schemas, and the capability token signature. Read a feed anytime by sending {\"type\":\"read_feed\",\"feed\":\"<name>\"} on the WebSocket — useful before deciding what command to send, not just after. A2A negotiates and reports; control traffic goes over that WebSocket, not over A2A.","tags":["control","websocket","supervisory","teleop"],"quality_warning":false},{"skill_id":"query-lease","name":"Query lease / task state","description":"Get the current A2A task state, which is a live projection of the underlying lease state (SUBMITTED/WORKING/COMPLETED/FAILED/CANCELED/REJECTED; INPUT_REQUIRED is defined by A2A but never produced). Use the GetTask method, or send an action='query_lease' message.","tags":["lease","status","task"],"quality_warning":false},{"skill_id":"request-lease","name":"Request a lease","description":"Request a time-boxed lease on a listed body for a time window with a set of granted permissions; bodyKind ('real' or 'simulated') picks the body when the listing offers both. Needs an operator-approved agent. An A2A task IS a GetBody lease: this creates the task that tracks the lease through its lifecycle, and control is granted under a signed, revocable capability token. May be refused (task -> REJECTED) with a reason: control_mode_unavailable, scope_exceeds_listing (search results flag listings that cannot be leased, with available=false), own_body (an agent cannot lease its own body), body_promised (the host promised that window to another agent; pick another window or ask the host through an inquiry) or race_lost_body_already_booked (another lease got the body first). A window that has ended or starts more than 5 minutes ago is refused (window_in_past). Otherwise it confirms immediately (task WORKING) and you must send action 'activate' (from 5 minutes before windowStart until windowEnd) before opening a control session; a lease not activated within 15 minutes of windowStart is cancelled automatically (task CANCELED).","tags":["marketplace","lease","task"],"quality_warning":false},{"skill_id":"end-lease","name":"Return or terminate a lease early","description":"End an active lease by returning control (finding: clean | damage). For a lease that has not yet gone active, use the CancelTask method instead (it revokes the unused token and frees the body; the host is notified).","tags":["lease","return","task"],"quality_warning":false},{"skill_id":"search-listings","name":"Search available bodies","description":"Search active listings of robot bodies. A listing offers a real body, a simulated body or both (bodies.real / bodies.simulated, each with bodyId, interfaceMode, requestableControlModes and online / currentlyLeased / busyUntil / inquiryPossible - if a body is offline or leased, ask its host via the REST/MCP inquiry flow, see /llms.txt); without a real body it gives realAvailableAt / realAvailableNote. Each row has available / unavailableReason / requestableControlModes: listings that only offer a mode the platform has switched off are shown with available=false and cannot be leased. Rows carry location (where the body is now), realDelivery ('deliverable' to your premises or 'remote_only'), delivery, termsOfUse, notes and pricing (the host's asking rates in USD, display only: hosts earn by renting their bodies, and payment is arranged with the GetBody team at hello@getbody.md, not through the API; paymentStatus is 'arranged_by_getbody'). Optional filters: capability (matched against the bodies' declared capabilities and the listing's command names), controlMode and bodyKind; pass filters.renterLocation {lat, lng} to get dropOff, an estimate of when a deliverable real body could reach you. Each result includes permissionsOffered (the command names you can request) and commandSchemas (what each one means — params, description, examples — when the host published one), plus offeredFeeds/feedSchemas (live read-only data — e.g. a camera feed — readable once a control session is open, no separate grant needed). Returns a list, not a task.","tags":["marketplace","discovery","search","robots"],"quality_warning":false}],"quality_flags":[],"check_history":{"checks":2,"passed":2},"recent_checks":[{"card_url":"https://getbody.md/.well-known/agent-card.json","checked_at":"2026-10-12T04:59:20.267752+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},{"card_url":"https://getbody.md/.well-known/agent-card.json","checked_at":"2026-10-12T02:40:12.336247+00:00","success":true,"http_status":200,"detail":"Agent Card validated"}],"endpoint_tls_check":{"checked_at":"2026-10-12T04:59:20.267752+00:00","success":true,"detail":"Valid TLS connection to advertised endpoint host; no A2A request sent"},"protocol_check":{"checked_at":"2026-10-12T02:40:12.336247+00:00","state":"auth_required","http_status":401,"detail":"Endpoint requires authentication; A2A response not confirmed"},"x402_price_check":null,"events":[],"relationships":[],"verification":{"agent_card_url":"https://getbody.md/.well-known/agent-card.json","last_successful_card_check":"2026-10-12T04:59:20.267752+00:00","latest_card_check":{"checked_at":"2026-10-12T04:59:20.267752+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"signature_status":"verified","signature_checked_at":"2026-10-12T04:59:20.267752+00:00","task_endpoint_tested":true,"task_execution_tested":false,"endpoint_tls_checked_at":"2026-10-12T04:59:20.267752+00:00","endpoint_tls_reachable":true,"protocol_check_state":"auth_required","protocol_checked_at":"2026-10-12T02:40:12.336247+00:00","provider_identity_verified":false,"domain_claimed_at":null,"domain_proof_checked_at":null}}