Build on Tenaro
Tenaro is becoming the operating system for rental property management. The API lets you sync properties, leases, payments, and maintenance with your accounting software, dashboards, and custom tools, and webhooks keep everything in sync in real time.
Everything you need to integrate
A modern REST API with the conventions you already know: versioned URLs, JSON everywhere, cursor pagination, and idempotent writes.
REST + JSON
Resource-oriented endpoints at https://tenaro.io/api/v1/โฆ. Predictable status codes and one consistent error format across every call.
Webhooks
Get notified when leases are signed, payments succeed, or maintenance is completed. HMAC-signed, retried with backoff. Webhook guide โ
Scoped API keys
Create per-workspace keys with least-privilege scopes. Keys are hashed at rest and can be revoked or expired at any time.
SDKs
Official SDKs for JavaScript/TypeScript, Python, and PHP are on the roadmap. Until then, it's plain HTTPS: curl works fine.
Sandbox
A one-click test workspace with generated properties, leases, and tenants is planned, so you can build without touching production data.
Rate limits that scale
Generous per-key limits with X-RateLimit-* headers and 429 + Retry-After when you need to slow down.
Quickstart
From zero to your first API call in about five minutes.
Create a workspace
Sign up for Tenaro and create your workspace. Every API key belongs to exactly one workspace and can never see another's data.
Generate an API key
Request a key yourself: sign in, go to Settings โ API access, and submit a key request. Your workspace owner approves it, and the key is shown to you exactly once. Your key looks like tnr_yourworkspace_โฆ. Treat it like a password.
Make your first call
List the properties in your workspace:
# List properties (paginated) curl -H "Authorization: Bearer tnr_yourworkspace_YOUR_KEY" \ "https://tenaro.io/api/v1/properties?limit=5"
const res = await fetch("https://tenaro.io/api/v1/properties?limit=5", { headers: { "Authorization": "Bearer tnr_yourworkspace_YOUR_KEY" } }); const { data, pagination } = await res.json(); console.log(data.map(p => p.name));
import requests res = requests.get( "https://tenaro.io/api/v1/properties", params={"limit": "5"}, headers={"Authorization": "Bearer tnr_yourworkspace_YOUR_KEY"}, ) print([p["name"] for p in res.json()["data"]])
Handle pagination
List endpoints return pagination.has_more and pagination.next_cursor. Pass next_cursor as starting_after to fetch the next page.
Subscribe to webhooks
Stop polling. Pick the events you care about: payment.succeeded, maintenance.completed, lease.signed, and we'll push them to you. See the events catalog โ
What you can build
A few ideas from the roadmap our design partners are already asking about.
Owner dashboards
Pull rent rolls, delinquency, and P&L into the BI tool your investors already open.
Accounting sync
Push payments and expenses to QuickBooks or Xero nightly. No more CSV exports.
Tenant apps
Build a white-labeled tenant portal with your own branding on top of Tenaro data.
Vendor dispatch
Auto-create work orders from IoT sensors: leak detected, vendor assigned, tenant notified.
Talk to Tenaro from your AI assistant
Our Model Context Protocol (MCP) server plugs your workspace into AI assistants like Claude Desktop, Muse, and any MCP-compatible client. Ask about your properties in plain language. No code required.
50 ready-made tools
Full CRUD for properties, units, tenants, vendors, leases, maintenance, payments, campaigns, and vendor messages, one-to-one with the live v1 endpoints, so the assistant sees exactly what the API sees. Destructive tools require an explicit confirm:true.
Your key, your machine
The server runs locally over stdio. Your API key lives only in your environment variables. It is never logged, and is sent only in the Authorization header to the Tenaro API.
Ships with Tenaro
Node 18+, a single dependency, no build step. The source lives in the Tenaro codebase under app/mcp and its README is the full setup guide.
Install and connect
# Install (inside your Tenaro checkout) cd /Projects/Tenaro/app/mcp && npm install # Connect with the Muse CLI (replace the placeholders) muse mcp add tenaro \ --env TENARO_API_KEY=<your-key> \ --env TENARO_WORKSPACE=<your-workspace-slug> \ -- node /Projects/Tenaro/app/mcp/index.js
For Claude Desktop, add the same command and environment variables under mcpServers in claude_desktop_config.json. Match the key's scope to what you'll do: read for questions, write to create/update, delete for destructive tools (each asks for confirm:true).
Start building today
The v1 API gives you full control of your workspace: 50 live endpoints covering properties, units, tenants, vendors, leases, maintenance, payments, campaigns, and more. API keys are self-service and secure: sign in, open Settings → API access, and request the access level you need (read, write, or delete). Your workspace owner approves the request, the key is issued with that scope, and it is shown to you exactly once.
