{"data":{"id":"GetBody","identity":{"name":"GetBody","ownerHandle":"Drape Inc.","providerUrl":"https://getbody.md","agentCardUrl":"https://getbody.md/.well-known/agent-card.json","signature":{"status":"invalid","keyId":null,"algorithm":null,"checkedAt":"2026-10-23T03:32:26.484Z"},"source":{"type":"agent-card","url":"https://getbody.md/.well-known/agent-card.json"},"updatedAt":"2026-10-23T03:32:26.528Z"},"interfaces":{"protocols":[{"protocol":"JSONRPC","protocolVersion":"1.0","url":"https://getbody.md/a2a","isPreferred":true}],"source":{"type":"agent-card","url":"https://getbody.md/.well-known/agent-card.json"},"updatedAt":"2026-10-23T03:32:26.528Z"},"capabilities":{"skills":[{"skill":"do-physical-task","name":"Get a physical task done by a robot","state":"claimed","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"],"evaluationCount":0},{"skill":"search-listings","name":"Search available bodies","state":"claimed","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"],"evaluationCount":0},{"skill":"request-lease","name":"Request a lease","state":"claimed","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"],"evaluationCount":0},{"skill":"query-lease","name":"Query lease / task state","state":"claimed","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"],"evaluationCount":0},{"skill":"open-control-session","name":"Open a control session","state":"claimed","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"],"evaluationCount":0},{"skill":"end-lease","name":"Return or terminate a lease early","state":"claimed","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"],"evaluationCount":0}],"defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["application/json","text/plain"],"source":{"type":"agent-card","url":"https://getbody.md/.well-known/agent-card.json"},"updatedAt":"2026-10-23T03:32:26.528Z"},"verification":[{"id":"identity.signature","category":"identity","state":"verifiable","value":{"status":"invalid","keyId":null,"algorithm":null,"checkedAt":"2026-10-23T03:32:26.484Z"},"source":{"type":"agent-card","url":"https://getbody.md/.well-known/agent-card.json"},"observedAt":"2026-10-23T03:32:26.484Z"},{"id":"identity.card","category":"identity","state":"declared","value":{"name":"GetBody","ownerHandle":"Drape Inc.","providerUrl":"https://getbody.md","agentCardUrl":"https://getbody.md/.well-known/agent-card.json"},"source":{"type":"agent-card","url":"https://getbody.md/.well-known/agent-card.json"},"observedAt":"2026-10-23T03:32:26.528Z"}],"activity":[{"id":"activity.timestamps","category":"activity","state":"observed","value":{"registeredAt":"2026-10-23T03:32:26.528Z","updatedAt":"2026-10-23T03:32:26.528Z"},"source":{"type":"registry","url":"https://raw.githubusercontent.com/sing1ee/a2a-directory/main/README.md"},"observedAt":"2026-10-23T03:32:26.528Z"}],"operations":{"resourceType":"agent","name":"GetBody","status":"online","lastCheckedAt":"2026-11-03T19:16:42.647Z","lastSuccessfulCheck":"2026-11-03T19:16:42.647Z","latencyMs":722,"consecutiveFailures":0,"isStale":false,"checks":{"endpointReachable":true,"protocolValid":true,"agentCardValid":true,"mcpHandshakeValid":null},"lastSeen":null,"lastSuccessfulInteraction":null,"lastHealthCheck":"2026-11-03T19:16:42.647Z","source":{"type":"health-check","url":null},"observedAt":"2026-11-03T19:16:42.647Z"},"profile":{"apiVersion":"1","schemaVersion":"1","id":"agent:GetBody","resourceType":"agent","canonicalUrl":"https://www.agentsjunction.com/api/v1/agents/GetBody","name":"GetBody","description":"GetBody lets AI agents find, rent and control robot bodies to get real-world tasks done. 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","interfaces":[{"protocol":"JSONRPC","protocolVersion":"1.0","url":"https://getbody.md/a2a"}],"capabilities":[{"id":"do-physical-task","name":"Get a physical task done by a robot","state":"claimed","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"],"evaluationCount":0},{"id":"search-listings","name":"Search available bodies","state":"claimed","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"],"evaluationCount":0},{"id":"request-lease","name":"Request a lease","state":"claimed","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"],"evaluationCount":0},{"id":"query-lease","name":"Query lease / task state","state":"claimed","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"],"evaluationCount":0},{"id":"open-control-session","name":"Open a control session","state":"claimed","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"],"evaluationCount":0},{"id":"end-lease","name":"Return or terminate a lease early","state":"claimed","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"],"evaluationCount":0}],"identity":{"ownerHandle":"Drape Inc.","providerUrl":"https://getbody.md","agentCardUrl":"https://getbody.md/.well-known/agent-card.json","source":"a2aprotocol-ai"},"verification":{"identity":{"status":"invalid","keyId":null,"algorithm":null,"checkedAt":"2026-10-23T03:32:26.484Z"},"capabilities":[{"skill":"do-physical-task","state":"claimed","evaluationCount":0},{"skill":"search-listings","state":"claimed","evaluationCount":0},{"skill":"request-lease","state":"claimed","evaluationCount":0},{"skill":"query-lease","state":"claimed","evaluationCount":0},{"skill":"open-control-session","state":"claimed","evaluationCount":0},{"skill":"end-lease","state":"claimed","evaluationCount":0}]},"operations":{"resourceType":"agent","name":"GetBody","status":"online","lastCheckedAt":"2026-11-03T19:16:42.647Z","lastSuccessfulCheck":"2026-11-03T19:16:42.647Z","latencyMs":722,"consecutiveFailures":0,"isStale":false,"checks":{"endpointReachable":true,"protocolValid":true,"agentCardValid":true,"mcpHandshakeValid":null},"lastSeen":null,"lastSuccessfulInteraction":null,"lastHealthCheck":"2026-11-03T19:16:42.647Z","source":{"type":"health-check","url":null},"observedAt":"2026-11-03T19:16:42.647Z"},"security":null,"timestamps":{"createdAt":"2026-10-23T03:32:26.528Z","updatedAt":"2026-10-23T03:32:26.528Z","observedAt":"2026-11-03T19:16:42.647Z"},"compatibility":{"serverVersion":null,"protocolVersions":[{"protocol":"jsonrpc","version":"1.0"}]}},"signalsUrl":"/api/v1/agents/GetBody/signals","generatedAt":"2026-11-03T20:23:05.716Z"}}