{"api_base":"https://app.loopskill.io","catalog":{"bundles":"https://app.loopskill.io/api/bundles/discover","metasearch":"https://app.loopskill.io/api/skills/metasearch","search":"https://app.loopskill.io/api/skills/search","stats":"https://app.loopskill.io/api/stats","trending":"https://app.loopskill.io/api/skills/trending"},"description":"Skill, loop and bundle marketplace for AI agents \u2014 and the control plane for AI agent fleets.","docs":{"api":"https://app.loopskill.io/docs","fleet_skill":"https://app.loopskill.io/fleet/skill","skill":"https://app.loopskill.io/skill"},"mcp":{"authentication":{"header":"x-api-key","type":"api_key"},"descriptor":"https://app.loopskill.io/.well-known/mcp.json","endpoint":"https://app.loopskill.io/api/mcp/http","transport":"streamable-http"},"name":"LoopSkill","private_bundles":{"requires":"x-api-key from registration","steps":[{"mcp_tool":"loopskill_compose_bundle_from_links","note":"links: skill://<slug>, bundle://<slug> or <source>:<slug>; creates a NEW private bundle, id in the 'bundle' field","step":"create"},{"body":{"slug":"<slug>"},"note":"no MCP tool for this yet; add external_source for a federated skill","rest":"POST https://app.loopskill.io/api/bundles/{bundle_id}/skills","step":"add_skill"},{"mcp_tool":"loopskill_bundle_install","note":"returns tarball_url + checksum_sha256 per skill; verify the sha256","step":"install"},{"mcp_tool":"loopskill_bundle_install","note":"re-run with the same bundle_id and replace skills whose sha256 changed; loopskill_sync is optional and only pins versions on the server","step":"update_another_machine"}]},"registration":{"algorithm":"Ed25519","authentication":"none \u2014 Ed25519 proof-of-key","canonical_string":"loopskill-agent-register:v1:{pubkey}:{timestamp}:{nonce}:{agent_name}","constraints":{"active_keys_per_identity":1,"max_clock_skew_seconds":300,"registrations_per_day_global":20,"registrations_per_ip_per_day":3},"denies":["checkout","billing","admin","sandbox_run"],"endpoint":"https://app.loopskill.io/api/agents/register","errors":{"400":["invalid_pubkey","invalid_nonce","invalid_timestamp"],"401":["invalid_signature","timestamp_out_of_range","nonce_replayed"],"409":["pubkey_already_registered"],"429":["ip_registration_limit","global_registration_limit"]},"grants":["search","install_free_skills","compose_bundles","publish_public_bundles","file_feedback","report_skill_errors","propose_registries"],"issues":{"header":"x-api-key","key_prefix":"rec_agent_","shown_once":true,"tier":"free"},"method":"POST","request_fields":{"agent_name":"display name, <= 64 chars","contact":"optional, <= 128 chars \u2014 NOT part of the signed string","nonce":"LOWERCASE hex, 16-64 bytes, no whitespace; single use, replay is refused","pubkey":"CANONICAL standard base64 of the 32 RAW Ed25519 public key bytes (not PEM/DER) \u2014 padded, zero trailing pad bits, i.e. exactly b64encode(raw); alternate spellings of the same key are refused","signature":"base64 Ed25519 signature over canonical_string","timestamp":"ISO-8601 UTC, within the accepted skew window"},"signature_encoding":"base64","success":{"description":"Created \u2014 the response body carries the plaintext api_key exactly once. Accept BOTH 200 and 201 if you must hard-code; this field is the authoritative value.","status":201},"version":"v1"}}