{"openapi":"3.1.0","info":{"title":"Salitronic ProductExplorer — agent API","version":"0.1.0","description":"Lets AI assistants explore an electronic product idea for a person: preliminary engineering observations, battery-life plausibility, a regulatory checklist, an editor link for the person, and an email-confirmed contact request to Salitronic. No authentication. Also available as an MCP server at /api/mcp.","contact":{"name":"Salitronic","url":"https://salitronic.com/contact.php"}},"servers":[{"url":"https://explorer.salitronic.com"}],"paths":{"/api/agent/library":{"get":{"operationId":"getBuildingBlocks","summary":"Functions, settings, requirements, markets and an example concept. Call first.","responses":{"200":{"description":"Library","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Input could not be used; the message explains why."},"429":{"description":"Rate limited."}}}},"/api/agent/assess":{"post":{"operationId":"assessProductConcept","summary":"Preliminary assessment of a concept, with a plain summary, open questions, next steps and an editor link.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"concept":{"type":"object","description":"An electronic product concept described by what it must do. See get_building_blocks for functions, settings and requirement ids.","properties":{"name":{"type":"string","description":"Product name."},"description":{"type":"string","description":"One or two sentences on what the product is for."},"functions":{"type":"array","description":"What the product does. Each item: block type id (e.g. \"SENS-001\") or name (e.g. \"Location Tracking\").","items":{"type":"object","properties":{"type":{"type":"string","description":"Block type id or name."},"label":{"type":"string","description":"Optional custom name, e.g. \"Outdoor temperature\"."},"settings":{"type":"object","description":"Setting id → value.","additionalProperties":{"description":"Option value or label, number, \"45 mm\", \"30 days\", \"-20 to 60\", true/false, or \"not sure\". May be {\"value\": ..., \"priority\": \"essential|preferred|optional|undecided\"}."}}},"required":["type"]}},"requirements":{"type":"object","description":"Product-level requirement id → value (size, battery life, environment, volumes, cost).","additionalProperties":{"description":"Option value or label, number, \"45 mm\", \"30 days\", \"-20 to 60\", true/false, or \"not sure\". May be {\"value\": ..., \"priority\": \"essential|preferred|optional|undecided\"}."}},"markets":{"type":"array","items":{"type":"string"},"description":"Where it will be sold: EU, US, UK, CA, AU, ZA."},"behaviours":{"type":"array","description":"Optional: when something happens, what the product does. Strongly affects battery life.","items":{"type":"object","properties":{"when":{"type":"object","description":"{\"every\": \"15 min\"} | {\"inactiveFor\": \"10 min\"} | {\"event\": \"motion_detected\", \"function\": \"<label>\"} | {\"event\": \"startup\"}"},"do":{"type":"array","items":{"type":"object","properties":{"function":{"type":"string","description":"Label of a function in this concept."},"action":{"type":"string","description":"One of that function's actions."}}}},"condition":{"type":"string"}},"required":["when","do"]}},"connections":{"type":"array","description":"Optional. Obvious relationships are created automatically.","items":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}}}}},"required":["functions"]}},"required":["concept"]}}}},"responses":{"200":{"description":"Assessment","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Input could not be used; the message explains why."},"429":{"description":"Rate limited."}}}},"/api/agent/handoff":{"post":{"operationId":"createEditorLink","summary":"Store the concept and return a link that opens it in the ProductExplorer editor (30 days).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"concept":{"type":"object","description":"An electronic product concept described by what it must do. See get_building_blocks for functions, settings and requirement ids.","properties":{"name":{"type":"string","description":"Product name."},"description":{"type":"string","description":"One or two sentences on what the product is for."},"functions":{"type":"array","description":"What the product does. Each item: block type id (e.g. \"SENS-001\") or name (e.g. \"Location Tracking\").","items":{"type":"object","properties":{"type":{"type":"string","description":"Block type id or name."},"label":{"type":"string","description":"Optional custom name, e.g. \"Outdoor temperature\"."},"settings":{"type":"object","description":"Setting id → value.","additionalProperties":{"description":"Option value or label, number, \"45 mm\", \"30 days\", \"-20 to 60\", true/false, or \"not sure\". May be {\"value\": ..., \"priority\": \"essential|preferred|optional|undecided\"}."}}},"required":["type"]}},"requirements":{"type":"object","description":"Product-level requirement id → value (size, battery life, environment, volumes, cost).","additionalProperties":{"description":"Option value or label, number, \"45 mm\", \"30 days\", \"-20 to 60\", true/false, or \"not sure\". May be {\"value\": ..., \"priority\": \"essential|preferred|optional|undecided\"}."}},"markets":{"type":"array","items":{"type":"string"},"description":"Where it will be sold: EU, US, UK, CA, AU, ZA."},"behaviours":{"type":"array","description":"Optional: when something happens, what the product does. Strongly affects battery life.","items":{"type":"object","properties":{"when":{"type":"object","description":"{\"every\": \"15 min\"} | {\"inactiveFor\": \"10 min\"} | {\"event\": \"motion_detected\", \"function\": \"<label>\"} | {\"event\": \"startup\"}"},"do":{"type":"array","items":{"type":"object","properties":{"function":{"type":"string","description":"Label of a function in this concept."},"action":{"type":"string","description":"One of that function's actions."}}}},"condition":{"type":"string"}},"required":["when","do"]}},"connections":{"type":"array","description":"Optional. Obvious relationships are created automatically.","items":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}}}}},"required":["functions"]}},"required":["concept"]}}}},"responses":{"200":{"description":"Editor link","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Input could not be used; the message explains why."},"429":{"description":"Rate limited."}}}},"/api/agent/contact-request":{"post":{"operationId":"requestSalitronicContact","summary":"With the user's explicit consent, ask Salitronic to contact them. Delivered only after the user confirms via email.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"concept":{"type":"object","description":"An electronic product concept described by what it must do. See get_building_blocks for functions, settings and requirement ids.","properties":{"name":{"type":"string","description":"Product name."},"description":{"type":"string","description":"One or two sentences on what the product is for."},"functions":{"type":"array","description":"What the product does. Each item: block type id (e.g. \"SENS-001\") or name (e.g. \"Location Tracking\").","items":{"type":"object","properties":{"type":{"type":"string","description":"Block type id or name."},"label":{"type":"string","description":"Optional custom name, e.g. \"Outdoor temperature\"."},"settings":{"type":"object","description":"Setting id → value.","additionalProperties":{"description":"Option value or label, number, \"45 mm\", \"30 days\", \"-20 to 60\", true/false, or \"not sure\". May be {\"value\": ..., \"priority\": \"essential|preferred|optional|undecided\"}."}}},"required":["type"]}},"requirements":{"type":"object","description":"Product-level requirement id → value (size, battery life, environment, volumes, cost).","additionalProperties":{"description":"Option value or label, number, \"45 mm\", \"30 days\", \"-20 to 60\", true/false, or \"not sure\". May be {\"value\": ..., \"priority\": \"essential|preferred|optional|undecided\"}."}},"markets":{"type":"array","items":{"type":"string"},"description":"Where it will be sold: EU, US, UK, CA, AU, ZA."},"behaviours":{"type":"array","description":"Optional: when something happens, what the product does. Strongly affects battery life.","items":{"type":"object","properties":{"when":{"type":"object","description":"{\"every\": \"15 min\"} | {\"inactiveFor\": \"10 min\"} | {\"event\": \"motion_detected\", \"function\": \"<label>\"} | {\"event\": \"startup\"}"},"do":{"type":"array","items":{"type":"object","properties":{"function":{"type":"string","description":"Label of a function in this concept."},"action":{"type":"string","description":"One of that function's actions."}}}},"condition":{"type":"string"}},"required":["when","do"]}},"connections":{"type":"array","description":"Optional. Obvious relationships are created automatically.","items":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"}}}}},"required":["functions"]},"contact":{"type":"object","properties":{"email":{"type":"string","format":"email"},"name":{"type":"string"},"company":{"type":"string"},"phone":{"type":"string"}},"required":["email"]},"message":{"type":"string"},"userConsent":{"type":"boolean","const":true}},"required":["concept","contact","userConsent"]}}}},"responses":{"200":{"description":"Pending confirmation","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Input could not be used; the message explains why."},"429":{"description":"Rate limited."}}}},"/api/mcp":{"post":{"operationId":"mcp","summary":"Model Context Protocol endpoint (Streamable HTTP, JSON-RPC 2.0, stateless).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"JSON-RPC response"},"202":{"description":"Notification accepted"}}}}}}