Skip to content
Log in

Build on tarsiflow with a simple REST API

Read and update clients, leads, projects and tasks, and pull invoices and proposals into your reports. Create a token in your workspace and make your first request in a minute.

  • REST and JSON
  • Personal tokens
  • Read or write access

Getting started

  1. 1. Create a token

    In the app, open your account menu and choose API tokens. Pick read only or read and write access.

  2. 2. Call the API

    Send requests to the base URL below with your token in the Authorization header.

  3. 3. Keep it safe

    A token acts as you inside one workspace. Revoke it any time from the same page.

Base URL

https://tarsiflow.com/api/v1

Authentication

Every request needs a bearer token. Tokens with read access can call every GET endpoint. Tokens with write access can also create and update records.

curl https://tarsiflow.com/api/v1/me \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json"

Conventions

  • Requests and responses are JSON. Send Content-Type: application/json when you post data.
  • Money is always an integer number of cents with a separate three letter currency code, so 125000 with USD is 1,250.00 dollars.
  • Dates use YYYY-MM-DD. Timestamps use ISO 8601 in UTC.
  • Lists are paginated. Use page and per_page (up to 100). Each response includes links and meta with the totals.
  • Updates use PATCH and only change the fields you send.

Errors and limits

StatusMeaning
401Missing, expired or revoked token.
403The token is read only, or you no longer belong to its workspace.
404The record does not exist in this workspace.
422Validation failed. The errors object lists each field and what to fix.
429Too many requests. The limit is 120 requests a minute per token.
{
    "message": "The name field is required.",
    "errors": {
        "name": [
            "The name field is required."
        ]
    }
}

Account

Who the token belongs to, the workspace it works in, its team members and the pipeline stages.

  • GET /me The token owner, workspace and token abilities.
  • GET /members People in the workspace, for assignee and owner ids.
  • GET /lead-stages Pipeline stages, for lead_stage_id.

Clients

Every client in the workspace with its primary contact.

  • GET /clients List clients. Filters: search, status, tag.
  • POST /clients Create a client.
  • GET /clients/{id} Get one client.
  • PATCH /clients/{id} Update a client. Send only the fields you change.

Fields you can send

name
string
Required when creating.
status
string
active, inactive, archived
email, phone, website, address
string
Optional contact details.
currency
string
Three letter code, such as USD. Defaults to the workspace currency.
tags
array
List of short labels.

Example

curl -X POST https://tarsiflow.com/api/v1/clients \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"name":"Brightline Dental","email":"[email protected]","tags":["healthcare"]}'
{
    "data": {
        "id": 42,
        "name": "Brightline Dental",
        "status": "active",
        "email": "[email protected]",
        "currency": "USD",
        "tags": [
            "healthcare"
        ],
        "primary_contact": null
    }
}

Leads

Opportunities on your pipeline. Values are in cents.

  • GET /leads List leads. Filters: stage_id, search.
  • POST /leads Create a lead. It lands in the first open stage unless you pass lead_stage_id.
  • GET /leads/{id} Get one lead.
  • PATCH /leads/{id} Update a lead, including moving it to another stage.

Fields you can send

name
string
Required when creating. The project or person, such as Website redesign.
company, email, phone, source, notes
string
Optional details.
value_cents
integer
Estimated value in cents. 250000 means 2,500.00.
expected_close_date
date
YYYY-MM-DD
lead_stage_id, owner_id
integer
Ids from /lead-stages and /members.

Projects

Client projects. New projects get a first task list automatically.

  • GET /projects List projects. Filters: client_id, status.
  • POST /projects Create a project for a client.
  • GET /projects/{id} Get one project with its task lists.
  • PATCH /projects/{id} Update a project.

Fields you can send

client_id, name
required
The client it belongs to and its name.
status
string
planning, active, on_hold, completed, cancelled
start_date, due_date
date
YYYY-MM-DD
budget_cents
integer
Budget in cents.

Tasks

Tasks inside projects, or on their own. Assigning a task notifies the person.

  • GET /tasks List tasks. Filters: project_id, assignee_id, status, due_before.
  • POST /tasks Create a task.
  • GET /tasks/{id} Get one task.
  • PATCH /tasks/{id} Update a task. Setting status to done records the completion time.

Fields you can send

title
string
Required when creating.
project_id, task_list_id
integer
Optional. Without a list, the task goes into the project's first list.
assignee_id
integer
An id from /members.
status
string
todo, in_progress, review, done
priority
string
low, medium, high
due_date
date
YYYY-MM-DD

Example

curl -X PATCH https://tarsiflow.com/api/v1/tasks/318 \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{"status":"done"}'
{
    "data": {
        "id": 318,
        "title": "Homepage wireframes",
        "status": "done",
        "priority": "high",
        "completed_at": "2026-10-26T14:05:11+00:00"
    }
}

Invoices

Read only. Includes line items and payments on the single invoice endpoint.

  • GET /invoices List invoices. Filters: status, client_id.
  • GET /invoices/{id} Get one invoice with items, payments and the balance due.

Proposals

Read only. Includes line items on the single proposal endpoint.

  • GET /proposals List proposals. Filters: status, client_id.
  • GET /proposals/{id} Get one proposal with its line items.

Your privacy, your choice

We use essential cookies to run this site and keep you signed in. With your permission we would also like to use optional cookies to understand how the site is used. Read our cookie policy.