Back to Help Center
    Developers

    Using the Teamo API

    The Teamo API lets you read and write your organization's data directly from your own code, scripts, or integrations: the same records, activities, and modules you see in the app, available over REST.

    This guide walks you through connecting to the API for the first time and explains the key decisions you'll make along the way.

    Before You Begin

    Before calling the API, ask yourself:

    What am I trying to do?

    Examples:

    • Pulling records into another system
    • Keeping two systems in sync
    • Building a custom integration or internal tool
    • Automating record creation from an external event

    Each of these uses the same API. The only thing that changes is which endpoints you call.

    Step 1: Create an API Token

    Go to My Profile → API Tokens and create a token.

    A token always acts as the person who created it, not as a workspace-wide key. This means:

    • Your role, module access, and view access apply to every request
    • Columns hidden from you stay hidden from the API
    • Every change you make through the API is attributed to you in the audit log and change history, exactly as if you'd made it in the app

    You can also scope a token when you create it (for example, read-only, or limited to a single module) so an integration only ever gets as much access as it needs.

    Step 2: Authenticate Your Requests

    Every request needs your token in the Authorization header:

    Authorization: Bearer tmo_your_token_here

    All endpoints live under https://api.teamo360.com/api/v1.

    Step 3: Explore the Structure

    Before reading or writing data, it helps to discover the shape of the workspace you're working in:

    • List Units: the top-level groupings in a workspace
    • List Modules: the tables that live inside a Unit
    • Get a Module's Schema: every column, its type, select options, and linked-record targets

    Examples:

    • A "Clients" module might have columns like Name, Status, Owner, and a linked-record column to a "Projects" module
    • An "Events" module might have Activity Groups like Schedule, Contractors, and Budget & Expenses

    Step 4: Read Data

    Once you know the shape of a module, you can:

    • List records, with filtering, sorting, and pagination, including filtering on computed columns like lookups and rollups
    • Get a single record by ID
    • Search across all records in your workspace by text
    • List activities and activity details for a record or module
    • Read change history, filterable by field, useful for questions like "how long did each deal spend in Negotiation"

    Step 5: Write Data

    Writes follow the same structure as reads:

    • Create and update records, individually or in batch
    • Upsert: update a record if a match exists, otherwise create it
    • Archive, delete, or restore records, activities, or details

    An optional typecast mode lets you send human-friendly values instead of internal IDs: a select option's label, a user's email, or a linked record's human-readable ID. Teamo resolves them for you.

    Step 6: Set Up Webhooks (Optional)

    If you'd rather be notified than poll for changes, subscribe to webhook events: record created, updated, archived, and more. Payloads are signed so you can verify they really came from Teamo.

    Example: Syncing New Leads Into Teamo

    Unit: Commercial
    Module: Leads
    Action: Upsert a record keyed on email address
    Result: A new lead is created if it doesn't already exist, or updated if it does, attributed to the token owner, triggering the same automations a manual entry would.

    Best Practices

    Use typecast instead of hardcoding internal IDs

    Internal IDs can change as a workspace evolves. Sending human values (like a status label or a user's email) is more resilient, and Teamo will tell you exactly what's ambiguous if there's more than one match.

    Use idempotency keys for anything that retries

    If your integration retries failed requests, send an idempotency key so a retry never creates a duplicate record.

    Prefer webhooks over polling

    Polling for changes wastes requests and adds latency. A webhook, or the changed since endpoint for a periodic sync, is almost always a better fit.

    Scope tokens to what the integration actually needs

    A read-only or single-module token limits the blast radius if a key ever leaks, without slowing down normal use.

    Teamo Tip: If you're not sure a field will resolve the way you expect, call get_module_schema first. It's the fastest way to confirm column IDs, option values, and linked-record targets before you write anything.

    Full Reference

    Interactive API docs (Swagger UI) are always kept current at api.teamo360.com/api/v1/docs. Check there for the full endpoint list and any changes, since it reflects the live API directly. The full OpenAPI spec is available at api.teamo360.com/api/v1/openapi.json if you want to import it into Postman or generate a client SDK.

    Next Steps

    Now that you've made your first API call, continue with: