HTTP JSON API

Build API calls against your workspace.

Push deals, notes, and custom fields from forms, marketing tools, or your own services. Every request is a POST with a workspace Bearer token.

Base: https://www.tigrasales.com/api Auth: Bearer token Content-Type: application/json
01 · Authentication

Workspace API tokens

Tokens are issued per workspace (by a super admin in the admin panel). The token is bound to that workspace — you must call routes under the same workspace slug.

Required headers
Authorization Bearer YOUR_API_TOKEN
Accept application/json
Content-Type application/json

curl skeleton

curl -X POST "https://www.tigrasales.com/api/workspaces/{workspace_slug}/deals" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{ ... }'
  • Token must match the {workspace_slug} in the URL.
  • Invalid, expired, or cross-workspace tokens return 401.
  • Unknown workspace slugs also return 401 (not 404) for safety.
02 · Conventions

Request & response shape

All methods are POST

There are no GET list endpoints yet. Create or upsert resources with POST only.

JSON body

Send application/json. You may wrap fields in a top-level data object if you prefer.

Success envelope

Successful responses return the resource under data (Laravel API Resource).

Workspace scope

Every path includes /workspaces/{slug}/. IDs (pipeline, stage, deal) must belong to that workspace.

Optional data wrapper
{
  "title": "New website",
  "owner_email": "rep@company.com"
}
{
  "data": {
    "title": "New website",
    "owner_email": "rep@company.com"
  }
}
03 · Endpoints

Available routes

Method Path Purpose
POST /workspaces/{slug}/deals Create a deal (+ optional person, org, note)
POST /workspaces/{slug}/deals/{deal}/notes Add a note to an existing deal
POST /workspaces/{slug}/custom-fields/upsert Create or update a custom field by key
POST https://www.tigrasales.com/api/workspaces/{workspace_slug}/deals

Create a deal

Creates a deal in the workspace. Optionally creates a linked person and organization in the same request, and attaches an initial note.

Body fields

Field Type Required Notes
title string yes Max 255 chars
owner_email email no Active workspace member email. If omitted or no match, the deal is assigned to the workspace’s first active user. A failed explicit email also attaches a failure note.
pipeline_id integer no Defaults to the workspace’s first pipeline (by order).
stage_id integer no Must belong to the pipeline. Defaults to the pipeline’s first stage.
value number no ≥ 0. Default 0.
currency string no ISO 4217, 3 uppercase letters. Default USD.
expected_close_date date no Any parseable date string.
origin string no Source system name (e.g. website).
origin_id string no External ID in the source system.
gcl string no Google click / campaign id if you track it.
acv / arr / mrr number no Optional revenue metrics, ≥ 0.
custom_fields object no* Keys must be existing non-archived workspace custom field keys. Required fields must be present. Types: text, number, date, boolean, select (option value).
note string no Creates a note on the new deal when provided.
person object no Creates a new person. See nested fields below.
organization object no Creates a new organization. Linked to the person when both are sent.

Person object

Field Type Required Notes
person.name string yes* Required when person is present
person.job_title string no
person.birthday date no
person.notes string no
person.phones[] array no label: work | mobile | home | other; value; optional primary bool
person.emails[] array no label: work | home | other; value email; optional primary

Organization object

Field Type Required Notes
organization.name string yes* Required when organization is present
organization.website string no Invalid URLs are dropped and a failure note is added on the deal
organization.address string no
organization.linkedin string no
organization.industry string no
organization.employee_count integer no ≥ 0

Example request

curl -X POST "https://www.tigrasales.com/api/workspaces/acme/deals" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Website redesign",
    "owner_email": "rep@acme.com",
    "value": 12000,
    "currency": "EUR",
    "expected_close_date": "2026-09-30",
    "origin": "website_form",
    "origin_id": "lead-4821",
    "custom_fields": {
      "type_of_job": "website",
      "budget": 15000
    },
    "note": "Inbound from pricing page",
    "person": {
      "name": "Maria Kallas",
      "job_title": "Marketing Lead",
      "emails": [
        { "label": "work", "value": "maria@example.com", "primary": true }
      ],
      "phones": [
        { "label": "mobile", "value": "+30 690 000 0000", "primary": true }
      ]
    },
    "organization": {
      "name": "Example Ltd",
      "website": "https://example.com",
      "industry": "Retail"
    }
  }'

Success response 201 Created

{
  "data": {
    "id": 42,
    "workspace_id": 1,
    "title": "Website redesign",
    "value": "12000.00",
    "currency": "EUR",
    "expected_close_date": "2026-09-30",
    "origin": "website_form",
    "origin_id": "lead-4821",
    "custom_fields": { "type_of_job": "website", "budget": 15000 },
    "owner": { "id": 3, "name": "…", "email": "rep@acme.com" },
    "person": { "id": 10, "name": "Maria Kallas", "…" },
    "organization": { "id": 7, "name": "Example Ltd", "…" },
    "pipeline": { "id": 1, "name": "Sales" },
    "stage": { "id": 1, "name": "Lead in", "pipeline_id": 1 },
    "created_at": "2026-07-21T10:00:00.000000Z",
    "updated_at": "2026-07-21T10:00:00.000000Z"
  }
}
POST https://www.tigrasales.com/api/workspaces/{workspace_slug}/deals/{deal_id}/notes

Add a note to a deal

Attaches a free-text note to an existing deal. The deal must belong to the same workspace as the token.

Field Type Required Notes
content string yes Non-empty note body
curl -X POST "https://www.tigrasales.com/api/workspaces/acme/deals/42/notes" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{ "content": "Followed up by phone — decision next week." }'

Success response 201 Created

{
  "data": {
    "id": 91,
    "workspace_id": 1,
    "deal_id": 42,
    "content": "Followed up by phone — decision next week.",
    "created_at": "2026-07-21T11:00:00.000000Z",
    "updated_at": "2026-07-21T11:00:00.000000Z"
  }
}
POST https://www.tigrasales.com/api/workspaces/{workspace_slug}/custom-fields/upsert

Upsert a custom field

Creates a custom field when key is new, or updates the existing field when the key already exists in the workspace. Type cannot change on update. Options already used on deals cannot be removed.

Field Type Required Notes
name string yes Display label
key string yes Stable machine key: ^[a-z][a-z0-9_]*$, unique per workspace
type enum yes text | number | date | select | boolean. Immutable on update.
width enum no full (default) or half
required boolean no Default false. When true, deal create must include the field.
allow_new_options boolean no Select fields only
options array select* Required when creating a select field. Items: { "label", "value" }. Values must be unique.
curl -X POST "https://www.tigrasales.com/api/workspaces/acme/custom-fields/upsert" \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Type of job",
    "key": "type_of_job",
    "type": "select",
    "required": true,
    "width": "full",
    "options": [
      { "label": "Website", "value": "website" },
      { "label": "SEO", "value": "seo" }
    ]
  }'

201 on create, 200 on update. Response data includes id, key, type, options, required, width, timestamps.

04 · Errors

Status codes & validation

Status When
200 / 201 Success (update / create)
401 Missing/invalid token, wrong workspace, or unknown workspace slug
422 Validation failed — check errors object

401 body

{
  "message": "Unauthenticated."
}

422 body

{
  "message": "The title field is required.",
  "errors": {
    "title": ["The title field is required."]
  }
}

Need a token?

Workspace API tokens are managed by super admins in the admin panel. Sign in to the app, then ask your admin to issue a named token for your integration.