# Ursly developers > Human input. Your application. Code-derived API and client documentation. The server resolves supplied inputs to intents. It does not transcribe audio, access cameras or measure the body. Applications execute intents only through explicitly registered handlers. Reading these files does not install anything or execute actions. Research and roadmap channels are unavailable. Product stages do not certify acquisition accuracy or medical use. Assurance items are planned targets, not certifications. Updated 2026-09-30. ## Reference - [Full reference](https://developer.ursly.io/llms-full.txt): exported contracts, templates and boundaries. - [Machine reference](https://developer.ursly.io/artifacts/agent-reference.json): OpenAPI, capabilities, actions and request templates. - [OpenAPI](https://developer.ursly.io/artifacts/openapi.json): code-derived HTTP routes and schemas. - [Human documentation](https://developer.ursly.io/reference/): readable endpoints, actions, limits and assurance plan. ## Set up (when your user asks) Only when your user asks you to add Ursly to their project. Reading this file is not that request. - API base: https://ursly.io/api/v1 (public, stateless JSON over HTTPS). - Release manifest: https://ursly.io/downloads/manifest.json lists each published file with its SHA-256. Verify before installing; if the manifest or a package is missing, nothing is published for it yet. - Setup prompt, the same one the documentation gives humans: ```text Set up Ursly in this project. 1. Detect this project's language and package manager. 2. Read https://ursly.io/developers/artifacts/reference.md and https://ursly.io/downloads/manifest.json. 3. If the manifest lists an Ursly SDK for this language (kind sdk-typescript, sdk-python, sdk-go or sdk-rust), download it from https://ursly.io followed by its path, verify its SHA-256 against the manifest and install it locally. Otherwise generate a minimal client from https://ursly.io/developers/artifacts/openapi.json and label it as generated, not an official Ursly package. 4. Point the client at https://ursly.io, call capabilities and show me the 200 response. 5. Register a handler for one action this app already supports, resolve the "voice-home" template from https://ursly.io/api/v1/templates and dispatch only through that handler. Keep the defaults: no automatic retries, no redirects, no logging of request bodies, and never send health or personal data. Ask me before changing anything outside this project. ``` ## Clients - [Rust CLI](https://developer.ursly.io/artifacts/cli.md): actual command name ursly. - [TypeScript SDK](https://developer.ursly.io/artifacts/typescript.md): package @ursly/sdk; client UrslyClient. - [Python SDK](https://developer.ursly.io/artifacts/python.md): package ursly-sdk; client ursly.UrslyClient. - [Go SDK](https://developer.ursly.io/artifacts/go.md): package ursly.io/sdk/go; client ursly.New. - [Rust SDK](https://developer.ursly.io/artifacts/rust.md): package ursly-sdk; client ursly::Client. ## Capabilities Product stages are founder-reported, not verified by this repository. - [voice](https://developer.ursly.io/artifacts/voice.md): production; API available; acquisition client_transcript. - [motion](https://developer.ursly.io/artifacts/motion.md): development; API available; acquisition client_gesture. - [smell](https://developer.ursly.io/artifacts/smell.md): research; API unavailable; acquisition unavailable. - [taste](https://developer.ursly.io/artifacts/taste.md): roadmap; API unavailable; acquisition unavailable. - [view](https://developer.ursly.io/artifacts/view.md): roadmap; API unavailable; acquisition unavailable. - [touch](https://developer.ursly.io/artifacts/touch.md): roadmap; API unavailable; acquisition unavailable. ## Actual request templates ### Voice opens home ```json { "input": { "confidence": null, "sense": "voice", "transcript": "open home" }, "rules": [ { "action": { "target": "/", "type": "navigation.open" }, "enabled": true, "id": "home", "match": "open home", "minConfidence": null } ] } ``` ### Swipe focuses movement ```json { "input": { "confidence": null, "gesture": "swipe_left", "sense": "motion" }, "rules": [ { "action": { "target": "move", "type": "scene.focus" }, "enabled": true, "id": "movement", "match": "swipe_left", "minConfidence": null } ] } ``` ## Catalogs ```json { "brand": "Ursly", "documentation": "https://developer.ursly.io", "updated": "2026-09-30", "execution": "client_handler_required", "acquisition": "Supplied transcripts and normalized gestures only; the resolver does not transcribe audio, access cameras or measure the body.", "openapi": { "components": { "schemas": { "Accepted": { "properties": { "status": { "type": "string" } }, "required": [ "status" ], "type": "object" }, "Action": { "oneOf": [ { "additionalProperties": false, "properties": { "target": { "type": "string" }, "type": { "enum": [ "navigation.open" ], "type": "string" } }, "required": [ "target", "type" ], "type": "object" }, { "additionalProperties": false, "properties": { "text": { "type": "string" }, "type": { "enum": [ "text.insert" ], "type": "string" } }, "required": [ "text", "type" ], "type": "object" }, { "additionalProperties": false, "properties": { "target": { "type": "string" }, "type": { "enum": [ "media.play" ], "type": "string" } }, "required": [ "target", "type" ], "type": "object" }, { "additionalProperties": false, "properties": { "target": { "type": "string" }, "type": { "enum": [ "media.pause" ], "type": "string" } }, "required": [ "target", "type" ], "type": "object" }, { "additionalProperties": false, "properties": { "target": { "type": "string" }, "type": { "enum": [ "scene.focus" ], "type": "string" } }, "required": [ "target", "type" ], "type": "object" }, { "additionalProperties": false, "properties": { "parameters": { "additionalProperties": { "type": "string" }, "propertyNames": { "type": "string" }, "type": "object" }, "target": { "type": "string" }, "type": { "enum": [ "workflow.trigger" ], "type": "string" } }, "required": [ "target", "type" ], "type": "object" } ] }, "ActionDefinition": { "properties": { "execution": { "type": "string" }, "payload": { "type": "string" }, "type": { "type": "string" } }, "required": [ "type", "payload", "execution" ], "type": "object" }, "Actions": { "properties": { "actions": { "items": { "$ref": "#/components/schemas/ActionDefinition" }, "type": "array" }, "version": { "type": "string" } }, "required": [ "version", "actions" ], "type": "object" }, "ApiError": { "properties": { "error": { "$ref": "#/components/schemas/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Capabilities": { "properties": { "capabilities": { "items": { "$ref": "#/components/schemas/Capability" }, "type": "array" }, "version": { "type": "string" } }, "required": [ "version", "capabilities" ], "type": "object" }, "Capability": { "properties": { "acquisition": { "type": "string" }, "apiAvailable": { "type": "boolean" }, "note": { "type": "string" }, "productStage": { "type": "string" }, "sense": { "type": "string" } }, "required": [ "sense", "productStage", "apiAvailable", "acquisition", "note" ], "type": "object" }, "ContactApiError": { "properties": { "error": { "type": "string" } }, "required": [ "error" ], "type": "object" }, "ErrorDetail": { "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "Input": { "oneOf": [ { "additionalProperties": false, "properties": { "confidence": { "format": "double", "maximum": 1, "minimum": 0, "type": [ "number", "null" ] }, "sense": { "enum": [ "voice" ], "type": "string" }, "transcript": { "type": "string" } }, "required": [ "transcript", "sense" ], "type": "object" }, { "additionalProperties": false, "properties": { "confidence": { "format": "double", "maximum": 1, "minimum": 0, "type": [ "number", "null" ] }, "gesture": { "type": "string" }, "sense": { "enum": [ "motion" ], "type": "string" } }, "required": [ "gesture", "sense" ], "type": "object" }, { "additionalProperties": false, "properties": { "sense": { "enum": [ "smell" ], "type": "string" } }, "required": [ "sense" ], "type": "object" }, { "additionalProperties": false, "properties": { "sense": { "enum": [ "taste" ], "type": "string" } }, "required": [ "sense" ], "type": "object" }, { "additionalProperties": false, "properties": { "sense": { "enum": [ "view" ], "type": "string" } }, "required": [ "sense" ], "type": "object" }, { "additionalProperties": false, "properties": { "sense": { "enum": [ "touch" ], "type": "string" } }, "required": [ "sense" ], "type": "object" } ] }, "InquiryRequest": { "additionalProperties": false, "properties": { "capitalRange": { "type": [ "string", "null" ] }, "consent": { "type": "boolean" }, "email": { "type": "string" }, "kind": { "description": "Contact intent: investor, partner, or career.", "type": "string" }, "language": { "type": "string" }, "message": { "type": "string" }, "name": { "type": "string" }, "organization": { "type": "string" } }, "required": [ "name", "email", "kind", "language", "consent" ], "type": "object" }, "Intent": { "properties": { "action": { "$ref": "#/components/schemas/Action" }, "ruleId": { "type": "string" } }, "required": [ "ruleId", "action" ], "type": "object" }, "ResolveRequest": { "additionalProperties": false, "properties": { "input": { "$ref": "#/components/schemas/Input" }, "rules": { "items": { "$ref": "#/components/schemas/Rule" }, "maxItems": 32, "type": "array" } }, "required": [ "input", "rules" ], "type": "object" }, "ResolveResponse": { "properties": { "execution": { "type": "string" }, "intents": { "items": { "$ref": "#/components/schemas/Intent" }, "type": "array" }, "status": { "type": "string" } }, "required": [ "status", "intents", "execution" ], "type": "object" }, "Rule": { "additionalProperties": false, "properties": { "action": { "$ref": "#/components/schemas/Action" }, "enabled": { "type": "boolean" }, "id": { "type": "string" }, "match": { "type": "string" }, "minConfidence": { "format": "double", "maximum": 1, "minimum": 0, "type": [ "number", "null" ] } }, "required": [ "id", "match", "action" ], "type": "object" }, "SignupRequest": { "additionalProperties": false, "properties": { "consent": { "type": "boolean" }, "email": { "type": "string" }, "language": { "type": "string" } }, "required": [ "email", "language", "consent" ], "type": "object" }, "Template": { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "request": { "$ref": "#/components/schemas/ResolveRequest" } }, "required": [ "id", "name", "request" ], "type": "object" }, "Templates": { "properties": { "templates": { "items": { "$ref": "#/components/schemas/Template" }, "type": "array" }, "version": { "type": "string" } }, "required": [ "version", "templates" ], "type": "object" }, "ValidationResponse": { "properties": { "valid": { "type": "boolean" } }, "required": [ "valid" ], "type": "object" } } }, "info": { "title": "Ursly API", "version": "0.1.0" }, "openapi": "3.1.0", "paths": { "/api/health": { "get": { "operationId": "health", "responses": { "200": { "description": "D1 available" }, "503": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" } }, "tags": [] } }, "/api/inquiries": { "post": { "operationId": "contact", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InquiryRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Accepted" } } }, "description": "" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "403": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "413": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "415": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "503": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" } }, "tags": [] } }, "/api/newsletter": { "post": { "operationId": "newsletter", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SignupRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Accepted" } } }, "description": "" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "403": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "413": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "415": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "503": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" } }, "tags": [] } }, "/api/openapi.json": { "get": { "operationId": "openapi", "responses": { "200": { "description": "OpenAPI derived from the registered handlers" } }, "tags": [] } }, "/api/v1/actions": { "get": { "operationId": "get_actions", "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Actions" } } }, "description": "" } }, "tags": [] } }, "/api/v1/capabilities": { "get": { "operationId": "get_capabilities", "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Capabilities" } } }, "description": "" } }, "tags": [] } }, "/api/v1/resolve": { "post": { "operationId": "post_resolve", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResolveRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResolveResponse" } } }, "description": "" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "413": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "415": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "503": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" } }, "tags": [] } }, "/api/v1/templates": { "get": { "operationId": "get_templates", "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Templates" } } }, "description": "" } }, "tags": [] } }, "/api/v1/validate": { "post": { "operationId": "post_validate", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResolveRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationResponse" } } }, "description": "" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "413": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "415": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "503": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" } }, "tags": [] } } } }, "capabilities": { "capabilities": [ { "acquisition": "client_transcript", "apiAvailable": true, "note": "Product stage supplied by founder; this API resolves supplied transcripts, not audio.", "productStage": "production", "sense": "voice" }, { "acquisition": "client_gesture", "apiAvailable": true, "note": "Product stage supplied by founder; this API resolves supplied gesture identifiers, not camera frames.", "productStage": "development", "sense": "motion" }, { "acquisition": "unavailable", "apiAvailable": false, "note": "Active university R&D reported by founder; no sensing API available.", "productStage": "research", "sense": "smell" }, { "acquisition": "unavailable", "apiAvailable": false, "note": "No sensing API available.", "productStage": "roadmap", "sense": "taste" }, { "acquisition": "unavailable", "apiAvailable": false, "note": "No sensing API available.", "productStage": "roadmap", "sense": "view" }, { "acquisition": "unavailable", "apiAvailable": false, "note": "No sensing API available.", "productStage": "roadmap", "sense": "touch" } ], "version": "v1" }, "actions": { "actions": [ { "execution": "client_handler_required", "payload": "target: application-relative path", "type": "navigation.open" }, { "execution": "client_handler_required", "payload": "text: plain text", "type": "text.insert" }, { "execution": "client_handler_required", "payload": "target: registered media identifier", "type": "media.play" }, { "execution": "client_handler_required", "payload": "target: registered media identifier", "type": "media.pause" }, { "execution": "client_handler_required", "payload": "target: registered scene identifier", "type": "scene.focus" }, { "execution": "client_handler_required", "payload": "target: registered workflow identifier; parameters: string map", "type": "workflow.trigger" } ], "version": "v1" }, "templates": { "templates": [ { "id": "voice-home", "name": "Voice opens home", "request": { "input": { "confidence": null, "sense": "voice", "transcript": "open home" }, "rules": [ { "action": { "target": "/", "type": "navigation.open" }, "enabled": true, "id": "home", "match": "open home", "minConfidence": null } ] } }, { "id": "motion-focus", "name": "Swipe focuses movement", "request": { "input": { "confidence": null, "gesture": "swipe_left", "sense": "motion" }, "rules": [ { "action": { "target": "move", "type": "scene.focus" }, "enabled": true, "id": "movement", "match": "swipe_left", "minConfidence": null } ] } } ], "version": "v1" }, "clients": [ { "id": "cli", "manual": "https://developer.ursly.io/artifacts/cli.md" }, { "id": "typescript", "manual": "https://developer.ursly.io/artifacts/typescript.md" }, { "id": "python", "manual": "https://developer.ursly.io/artifacts/python.md" }, { "id": "go", "manual": "https://developer.ursly.io/artifacts/go.md" }, { "id": "rust", "manual": "https://developer.ursly.io/artifacts/rust.md" } ] } ``` # Ursly developer API Generated from Rust handlers and schemas. Updated 2026-09-30. The resolver accepts supplied voice transcripts or normalized gesture identifiers and returns intents. Acquisition and execution belong to explicit client adapters. ## GET /api/health health Responses: 200, 503 ## POST /api/inquiries contact Responses: 202, 400, 403, 413, 415, 429, 503 ## POST /api/newsletter newsletter Responses: 202, 400, 403, 413, 415, 429, 503 ## GET /api/openapi.json openapi Responses: 200 ## GET /api/v1/actions get_actions Responses: 200 ## GET /api/v1/capabilities get_capabilities Responses: 200 ## POST /api/v1/resolve post_resolve Responses: 200, 400, 413, 415, 422, 429, 503 ## GET /api/v1/templates get_templates Responses: 200 ## POST /api/v1/validate post_validate Responses: 200, 400, 413, 415, 422, 429, 503 ## Full schema ```json { "components": { "schemas": { "Accepted": { "properties": { "status": { "type": "string" } }, "required": [ "status" ], "type": "object" }, "Action": { "oneOf": [ { "additionalProperties": false, "properties": { "target": { "type": "string" }, "type": { "enum": [ "navigation.open" ], "type": "string" } }, "required": [ "target", "type" ], "type": "object" }, { "additionalProperties": false, "properties": { "text": { "type": "string" }, "type": { "enum": [ "text.insert" ], "type": "string" } }, "required": [ "text", "type" ], "type": "object" }, { "additionalProperties": false, "properties": { "target": { "type": "string" }, "type": { "enum": [ "media.play" ], "type": "string" } }, "required": [ "target", "type" ], "type": "object" }, { "additionalProperties": false, "properties": { "target": { "type": "string" }, "type": { "enum": [ "media.pause" ], "type": "string" } }, "required": [ "target", "type" ], "type": "object" }, { "additionalProperties": false, "properties": { "target": { "type": "string" }, "type": { "enum": [ "scene.focus" ], "type": "string" } }, "required": [ "target", "type" ], "type": "object" }, { "additionalProperties": false, "properties": { "parameters": { "additionalProperties": { "type": "string" }, "propertyNames": { "type": "string" }, "type": "object" }, "target": { "type": "string" }, "type": { "enum": [ "workflow.trigger" ], "type": "string" } }, "required": [ "target", "type" ], "type": "object" } ] }, "ActionDefinition": { "properties": { "execution": { "type": "string" }, "payload": { "type": "string" }, "type": { "type": "string" } }, "required": [ "type", "payload", "execution" ], "type": "object" }, "Actions": { "properties": { "actions": { "items": { "$ref": "#/components/schemas/ActionDefinition" }, "type": "array" }, "version": { "type": "string" } }, "required": [ "version", "actions" ], "type": "object" }, "ApiError": { "properties": { "error": { "$ref": "#/components/schemas/ErrorDetail" } }, "required": [ "error" ], "type": "object" }, "Capabilities": { "properties": { "capabilities": { "items": { "$ref": "#/components/schemas/Capability" }, "type": "array" }, "version": { "type": "string" } }, "required": [ "version", "capabilities" ], "type": "object" }, "Capability": { "properties": { "acquisition": { "type": "string" }, "apiAvailable": { "type": "boolean" }, "note": { "type": "string" }, "productStage": { "type": "string" }, "sense": { "type": "string" } }, "required": [ "sense", "productStage", "apiAvailable", "acquisition", "note" ], "type": "object" }, "ContactApiError": { "properties": { "error": { "type": "string" } }, "required": [ "error" ], "type": "object" }, "ErrorDetail": { "properties": { "code": { "type": "string" }, "message": { "type": "string" } }, "required": [ "code", "message" ], "type": "object" }, "Input": { "oneOf": [ { "additionalProperties": false, "properties": { "confidence": { "format": "double", "maximum": 1, "minimum": 0, "type": [ "number", "null" ] }, "sense": { "enum": [ "voice" ], "type": "string" }, "transcript": { "type": "string" } }, "required": [ "transcript", "sense" ], "type": "object" }, { "additionalProperties": false, "properties": { "confidence": { "format": "double", "maximum": 1, "minimum": 0, "type": [ "number", "null" ] }, "gesture": { "type": "string" }, "sense": { "enum": [ "motion" ], "type": "string" } }, "required": [ "gesture", "sense" ], "type": "object" }, { "additionalProperties": false, "properties": { "sense": { "enum": [ "smell" ], "type": "string" } }, "required": [ "sense" ], "type": "object" }, { "additionalProperties": false, "properties": { "sense": { "enum": [ "taste" ], "type": "string" } }, "required": [ "sense" ], "type": "object" }, { "additionalProperties": false, "properties": { "sense": { "enum": [ "view" ], "type": "string" } }, "required": [ "sense" ], "type": "object" }, { "additionalProperties": false, "properties": { "sense": { "enum": [ "touch" ], "type": "string" } }, "required": [ "sense" ], "type": "object" } ] }, "InquiryRequest": { "additionalProperties": false, "properties": { "capitalRange": { "type": [ "string", "null" ] }, "consent": { "type": "boolean" }, "email": { "type": "string" }, "kind": { "description": "Contact intent: investor, partner, or career.", "type": "string" }, "language": { "type": "string" }, "message": { "type": "string" }, "name": { "type": "string" }, "organization": { "type": "string" } }, "required": [ "name", "email", "kind", "language", "consent" ], "type": "object" }, "Intent": { "properties": { "action": { "$ref": "#/components/schemas/Action" }, "ruleId": { "type": "string" } }, "required": [ "ruleId", "action" ], "type": "object" }, "ResolveRequest": { "additionalProperties": false, "properties": { "input": { "$ref": "#/components/schemas/Input" }, "rules": { "items": { "$ref": "#/components/schemas/Rule" }, "maxItems": 32, "type": "array" } }, "required": [ "input", "rules" ], "type": "object" }, "ResolveResponse": { "properties": { "execution": { "type": "string" }, "intents": { "items": { "$ref": "#/components/schemas/Intent" }, "type": "array" }, "status": { "type": "string" } }, "required": [ "status", "intents", "execution" ], "type": "object" }, "Rule": { "additionalProperties": false, "properties": { "action": { "$ref": "#/components/schemas/Action" }, "enabled": { "type": "boolean" }, "id": { "type": "string" }, "match": { "type": "string" }, "minConfidence": { "format": "double", "maximum": 1, "minimum": 0, "type": [ "number", "null" ] } }, "required": [ "id", "match", "action" ], "type": "object" }, "SignupRequest": { "additionalProperties": false, "properties": { "consent": { "type": "boolean" }, "email": { "type": "string" }, "language": { "type": "string" } }, "required": [ "email", "language", "consent" ], "type": "object" }, "Template": { "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "request": { "$ref": "#/components/schemas/ResolveRequest" } }, "required": [ "id", "name", "request" ], "type": "object" }, "Templates": { "properties": { "templates": { "items": { "$ref": "#/components/schemas/Template" }, "type": "array" }, "version": { "type": "string" } }, "required": [ "version", "templates" ], "type": "object" }, "ValidationResponse": { "properties": { "valid": { "type": "boolean" } }, "required": [ "valid" ], "type": "object" } } }, "info": { "title": "Ursly API", "version": "0.1.0" }, "openapi": "3.1.0", "paths": { "/api/health": { "get": { "operationId": "health", "responses": { "200": { "description": "D1 available" }, "503": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" } }, "tags": [] } }, "/api/inquiries": { "post": { "operationId": "contact", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/InquiryRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Accepted" } } }, "description": "" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "403": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "413": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "415": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "503": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" } }, "tags": [] } }, "/api/newsletter": { "post": { "operationId": "newsletter", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SignupRequest" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Accepted" } } }, "description": "" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "403": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "413": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "415": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" }, "503": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ContactApiError" } } }, "description": "" } }, "tags": [] } }, "/api/openapi.json": { "get": { "operationId": "openapi", "responses": { "200": { "description": "OpenAPI derived from the registered handlers" } }, "tags": [] } }, "/api/v1/actions": { "get": { "operationId": "get_actions", "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Actions" } } }, "description": "" } }, "tags": [] } }, "/api/v1/capabilities": { "get": { "operationId": "get_capabilities", "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Capabilities" } } }, "description": "" } }, "tags": [] } }, "/api/v1/resolve": { "post": { "operationId": "post_resolve", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResolveRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResolveResponse" } } }, "description": "" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "413": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "415": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "503": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" } }, "tags": [] } }, "/api/v1/templates": { "get": { "operationId": "get_templates", "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Templates" } } }, "description": "" } }, "tags": [] } }, "/api/v1/validate": { "post": { "operationId": "post_validate", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ResolveRequest" } } }, "required": true }, "responses": { "200": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationResponse" } } }, "description": "" }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "413": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "415": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" }, "503": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "" } }, "tags": [] } } } } ```