Skip to content

API Overview

Vulcan exposes RESTful APIs through independent microservices. Each capability has its own API with consistent patterns.

Base URLs

EnvironmentBase URL
Productionhttps://api.vulcan.hantverksdata.se
Staginghttps://api.staging.vulcan.hantverksdata.se
Localhttp://localhost:5000

API Capabilities

CapabilityBase PathDescription
Core Setup/api/coresetupUsers, Groups, Settings
Leads/api/leadsCRM, Leads, Customers
Quotation/api/quotationQuotes, Work packages
Contracts/api/contractsContracts, E-signing
Projects/api/projectsProjects, Timelines
Invoicing/api/invoicingInvoices, Payments
Documents/api/documentsDocument storage
AI/api/aiAI services, Embeddings
Planning/api/planningPlanning, Scheduling

Response Format

All API responses follow a consistent envelope format:

json
{
  "data": { /* response payload */ },
  "error": null,
  "meta": {
    "timestamp": "2026-01-12T10:00:00Z",
    "requestId": "abc-123"
  }
}

Success Response

json
{
  "data": {
    "id": 1,
    "email": "user@example.com",
    "createdAt": "2026-01-01T00:00:00Z"
  },
  "error": null,
  "meta": {
    "timestamp": "2026-01-12T10:00:00Z",
    "requestId": "abc-123"
  }
}

Error Response

json
{
  "data": null,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid input",
    "details": [
      { "field": "email", "message": "Email already exists" }
    ]
  },
  "meta": {
    "timestamp": "2026-01-12T10:00:00Z",
    "requestId": "ghi-789"
  }
}

Paginated Response

json
{
  "data": [
    { "id": 1, "name": "Item 1" },
    { "id": 2, "name": "Item 2" }
  ],
  "meta": {
    "total": 100,
    "page": 1,
    "pageSize": 10,
    "timestamp": "2026-01-12T10:00:00Z",
    "requestId": "xyz-789"
  }
}

HTTP Status Codes

CodeMeaning
200Success
201Created
204No Content (successful delete)
400Bad Request (validation error)
401Unauthorized (not authenticated)
403Forbidden (not authorized)
404Not Found
409Conflict (resource already exists)
500Internal Server Error

Common Headers

Request Headers

http
Authorization: Bearer <token>
Content-Type: application/json
Accept: application/json
X-Request-ID: <unique-id>

Response Headers

http
Content-Type: application/json
X-Request-ID: <unique-id>
X-Response-Time: 45ms

Sections

Built with VitePress | v1.1.0