#Quickstart
The minimum Telepact API ecosystem is established by a server defining a Telepact API schema, and serving it using one of the Telepact libraries.
Specify your API:
$ cat ./api/math.telepact.yaml- ///: Divide two integers, `x` and `y`.
fn.divide:
x: "integer"
y: "integer"
->:
- Ok_:
result: "number"
- ErrorCannotDivideByZero: {}Serve it with one of the Telepact libraries over a transport of your choice. For more concrete HTTP and WebSocket patterns, see the Transport Guide.
$ cat ./server.pyfrom telepact import FunctionRouter, TelepactSchema, Server, Message
from starlette.applications import Starlette
from starlette.responses import Response
from starlette.routing import Route
import uvicorn
async def divide(function_name, request_message):
arguments = request_message.body[function_name]
x = arguments['x']
y = arguments['y']
if y == 0:
return Message({}, {'ErrorCannotDivideByZero': {}})
result = x / y
return Message({}, {'Ok_': {'result': result}})
options = Server.Options()
options.auth_required = False
api = TelepactSchema.from_directory('./api')
function_router = FunctionRouter({'fn.divide': divide})
server = Server(api, function_router, options)
async def http_handler(request):
request_bytes = await request.body()
response = await server.process(request_bytes)
response_bytes = response.bytes
media_type = 'application/octet-stream' if '@bin_' in response.headers else 'application/json'
return Response(content=response_bytes, media_type=media_type)
routes = [
Route('/api/telepact', endpoint=http_handler, methods=['POST']),
]
app = Starlette(routes=routes)
uvicorn.run(app, host='0.0.0.0', port=8000)$ uv add uvicorn starlette telepact
$ uv run python ./server.pyThen tell your clients about your transport, and they can consume your API with minimal tooling:
$ cat ./client.jslet header = {};
let body = {
"fn.divide": {
x: 6,
y: 3,
}
};
let request = [header, body];
let response = await fetch(
"http://localhost:8000/api/telepact",
{
method: "POST",
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(request),
},
);
console.log(`Response: ${JSON.stringify(await response.json())}`);$ node ./client.js
Response: [{},{"Ok_":{"result":2}}]#Next steps
Transport Guide for browser + Node HTTP and WebSocket patterns
Client Paths for choosing between plain JSON, runtime libraries, and generated code
Auth Guide when the API needs caller identity
Tooling Workflow for
fetch,compare,mock, andcodegenOperating Boundary Guide for Telepact-specific compatibility and observability boundaries
Demos for runnable end-to-end examples
Docs home for the rest of the documentation map