Guru Money API (v1)

Download OpenAPI specification:

Public-facing API documentation for Guru Money.

Authentication uses a bearer token:

  • session access token from POST /api/v1/auth/telegram/bootstrap
  • personal access token issued through the Telegram bot /mcp flow

Health

API health check

Responses

Response samples

Content type
application/json
{
  • "ok": true,
  • "service": "string"
}

Auth

Bootstrap Telegram authentication

Request Body schema: application/json
required
telegramId
required
integer
username
string or null
firstName
string or null
lastName
string or null

Responses

Request samples

Content type
application/json
{
  • "telegramId": 0,
  • "username": "string",
  • "firstName": "string",
  • "lastName": "string"
}

Response samples

Content type
application/json
{
  • "accessToken": "string",
  • "expiresAt": "2019-08-24T14:15:22Z",
  • "session": {
    }
}

Revoke current session

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "ok": true
}

Session

Get current user session

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "user": {
    },
  • "auth": {
    },
  • "workspaces": [
    ]
}

Workspaces

List user workspaces

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get workspace details

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "name": "string",
  • "type": "personal",
  • "role": "owner",
  • "baseCurrency": "string",
  • "isArchived": true,
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "membersCount": 0
}

List workspace members

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Accounts

List accounts

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
query Parameters
include_archived
boolean

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create manual account

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
Request Body schema: application/json
required
name
required
string
type
required
string
currency
required
string
currentBalance
number or null
availableBalance
number or null

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "type": "string",
  • "currency": "string",
  • "currentBalance": 0,
  • "availableBalance": 0
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "workspaceId": 0,
  • "userId": 0,
  • "name": "string",
  • "type": "string",
  • "currency": "string",
  • "currentBalance": 0,
  • "availableBalance": 0,
  • "bankConnectionId": 0,
  • "lastSyncedAt": "2019-08-24T14:15:22Z",
  • "isArchived": true,
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Get account details

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
accountId
required
integer

Responses

Response samples

Content type
application/json
{
  • "id": 0,
  • "workspaceId": 0,
  • "userId": 0,
  • "name": "string",
  • "type": "string",
  • "currency": "string",
  • "currentBalance": 0,
  • "availableBalance": 0,
  • "bankConnectionId": 0,
  • "lastSyncedAt": "2019-08-24T14:15:22Z",
  • "isArchived": true,
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Update manual account

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
accountId
required
integer
Request Body schema: application/json
required
name
string
type
string
currency
string
currentBalance
number or null
availableBalance
number or null
isArchived
boolean

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "type": "string",
  • "currency": "string",
  • "currentBalance": 0,
  • "availableBalance": 0,
  • "isArchived": true
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "workspaceId": 0,
  • "userId": 0,
  • "name": "string",
  • "type": "string",
  • "currency": "string",
  • "currentBalance": 0,
  • "availableBalance": 0,
  • "bankConnectionId": 0,
  • "lastSyncedAt": "2019-08-24T14:15:22Z",
  • "isArchived": true,
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Categories

List categories

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
query Parameters
type
string
Enum: "expense" "income"
updated_after
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create category

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
Request Body schema: application/json
required
name
required
string
slug
string
type
required
string
Enum: "expense" "income"
scopeType
required
string
Enum: "user" "workspace"
iconCodePoint
integer or null
color
integer or null

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "slug": "string",
  • "type": "expense",
  • "scopeType": "user",
  • "iconCodePoint": 0,
  • "color": 0
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "slug": "string",
  • "type": "expense",
  • "scopeType": "global",
  • "workspaceId": 0,
  • "userId": 0,
  • "isSystem": true,
  • "iconCodePoint": 0,
  • "color": 0,
  • "sortOrder": 0,
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Transactions

List transactions

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
query Parameters
account_id
integer
category_id
string
date_from
string <date>
date_to
string <date>
status
string
Enum: "pending" "posted" "cancelled"
source_type
string
Enum: "manual" "bank_sync" "import" "api"
limit
integer
updated_after
string <date-time>

Responses

Response samples

Content type
application/json
{
  • "items": [
    ],
  • "nextCursor": "string"
}

Create expense transaction

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
Request Body schema: application/json
required
accountId
integer or null
categoryId
string or null
amount
required
number
currency
required
string
description
string or null
merchantName
string or null
transactionDate
string or null <date>
occurredAt
string or null <date-time>
clientMutationId
string or null

Responses

Request samples

Content type
application/json
{
  • "accountId": 0,
  • "categoryId": "string",
  • "amount": 0,
  • "currency": "string",
  • "description": "string",
  • "merchantName": "string",
  • "transactionDate": "2019-08-24",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "clientMutationId": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "workspaceId": 0,
  • "accountId": 0,
  • "accountName": "string",
  • "categoryId": "string",
  • "categoryName": "string",
  • "amount": 0,
  • "currency": "string",
  • "sourceType": "manual",
  • "externalId": "string",
  • "status": "pending",
  • "merchantName": "string",
  • "description": "string",
  • "transactionDate": "2019-08-24",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "clientMutationId": "string"
}

Create income transaction

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
Request Body schema: application/json
required
accountId
integer or null
categoryId
string or null
amount
required
number
currency
required
string
description
string or null
merchantName
string or null
transactionDate
string or null <date>
occurredAt
string or null <date-time>
clientMutationId
string or null

Responses

Request samples

Content type
application/json
{
  • "accountId": 0,
  • "categoryId": "string",
  • "amount": 0,
  • "currency": "string",
  • "description": "string",
  • "merchantName": "string",
  • "transactionDate": "2019-08-24",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "clientMutationId": "string"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "workspaceId": 0,
  • "accountId": 0,
  • "accountName": "string",
  • "categoryId": "string",
  • "categoryName": "string",
  • "amount": 0,
  • "currency": "string",
  • "sourceType": "manual",
  • "externalId": "string",
  • "status": "pending",
  • "merchantName": "string",
  • "description": "string",
  • "transactionDate": "2019-08-24",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "clientMutationId": "string"
}

Update transaction

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
transactionId
required
integer
Request Body schema: application/json
required
accountId
integer or null
categoryId
string or null
description
string or null
merchantName
string or null
transactionDate
string or null <date>
occurredAt
string or null <date-time>
status
string
Enum: "pending" "posted" "cancelled"

Responses

Request samples

Content type
application/json
{
  • "accountId": 0,
  • "categoryId": "string",
  • "description": "string",
  • "merchantName": "string",
  • "transactionDate": "2019-08-24",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "status": "pending"
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "workspaceId": 0,
  • "accountId": 0,
  • "accountName": "string",
  • "categoryId": "string",
  • "categoryName": "string",
  • "amount": 0,
  • "currency": "string",
  • "sourceType": "manual",
  • "externalId": "string",
  • "status": "pending",
  • "merchantName": "string",
  • "description": "string",
  • "transactionDate": "2019-08-24",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "updatedAt": "2019-08-24T14:15:22Z",
  • "clientMutationId": "string"
}

Delete transaction

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
transactionId
required
integer

Responses

Response samples

Content type
application/json
{
  • "ok": true
}

Limits

List limits

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
query Parameters
period_type
string
Default: "monthly"
Enum: "daily" "weekly" "monthly" "yearly"
updated_after
string <date-time>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create or update category limit

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
categoryId
required
string
Request Body schema: application/json
required
limitAmount
number
periodType
string
Enum: "daily" "weekly" "monthly" "yearly"
startDate
string or null <date>
endDate
string or null <date>
isActive
boolean

Responses

Request samples

Content type
application/json
{
  • "limitAmount": 0,
  • "periodType": "daily",
  • "startDate": "2019-08-24",
  • "endDate": "2019-08-24",
  • "isActive": true
}

Response samples

Content type
application/json
{
  • "id": 0,
  • "workspaceId": 0,
  • "categoryId": "string",
  • "categoryName": "string",
  • "limitAmount": 0,
  • "periodType": "daily",
  • "startDate": "2019-08-24",
  • "endDate": "2019-08-24",
  • "isActive": true,
  • "spent": 0,
  • "remaining": 0,
  • "percentage": 0,
  • "updatedAt": "2019-08-24T14:15:22Z"
}

Analytics

Summary analytics for a workspace

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
query Parameters
date_from
string <date>
date_to
string <date>

Responses

Response samples

Content type
application/json
{
  • "income": 0,
  • "expense": 0,
  • "balanceDelta": 0,
  • "transactionsCount": 0
}

Category analytics

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
query Parameters
date_from
string <date>
date_to
string <date>

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Spending by users and categories

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
query Parameters
period_type
string
Default: "monthly"
Enum: "daily" "weekly" "monthly" "yearly"

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Spending for a specific Telegram user

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
query Parameters
telegram_id
integer
period_type
string
Default: "monthly"
Enum: "daily" "weekly" "monthly" "yearly"

Responses

Response samples

Content type
application/json
{
  • "user_id": 0,
  • "first_name": "string",
  • "last_name": "string",
  • "total_spent": 0,
  • "total_transactions": 0,
  • "by_category": [
    ]
}

Sync

Incremental sync snapshot

Authorizations:
bearerAuth
path Parameters
workspaceId
required
integer
query Parameters
updated_after
string <date-time>

Responses

Response samples

Content type
application/json
{
  • "watermark": "string",
  • "fullSync": true,
  • "accounts": {
    },
  • "categories": {
    },
  • "transactions": {
    },
  • "limits": {
    }
}