API Reference

Integration API

API reference for bulk upsert endpoints used in B2B integrations with Dime.Sheets.

Integration API

The Integration public API provides bulk upsert endpoints for synchronizing data from external systems (ERPs, HR systems, project management tools). Records are matched by externalId -- existing records are updated, new records are created.

Upsert projects

POST /api/v1/integration/projects

Upserts projects by externalId. Each project in the array is matched against existing records; if a match is found the record is updated, otherwise a new project is created.

Request body

[
  {
    "externalId": "bc-job-1001",
    "name": "ERP Migration",
    "description": "Migrate from legacy ERP to Business Central",
    "clientId": 1,
    "startDate": "2026-04-01T00:00:00Z",
    "budget": 75000
  }
]

Response

{
  "total": 1,
  "succeeded": 1,
  "results": [
    { "externalId": "bc-job-1001", "success": true, "error": null }
  ]
}

Upsert tasks

POST /api/v1/integration/tasks

Upserts tasks by externalId. Tasks are linked to projects via projectExternalId.

Request body

[
  {
    "externalId": "bc-task-2001",
    "projectExternalId": "bc-job-1001",
    "name": "Data migration",
    "description": "Migrate historical data",
    "estimatedHours": 80.0,
    "isBillable": true
  }
]

TaskUpsertRequest model

FieldTypeRequiredDescription
externalIdstringYesExternal identifier for matching
projectExternalIdstringYesExternal ID of the parent project
namestring?YesTask name
descriptionstring?YesTask description
estimatedHoursnumber?YesEstimated hours
isBillableboolean?YesWhether the task is billable

Upsert employees

POST /api/v1/integration/employees

Upserts employee records matched by email. Links the DimeSheets user to an external employee number and ID for downstream sync.

Request body

[
  {
    "email": "[email protected]",
    "employeeNo": "EMP-042",
    "employeeExternalId": "bc-emp-042"
  }
]

EmployeeUpsertRequest model

FieldTypeRequiredDescription
emailstringYesEmail address to match against existing users
employeeNostringYesExternal employee number
employeeExternalIdstring?YesExternal employee identifier

BatchUpsertResponse model

All integration endpoints return the same response shape:

FieldTypeDescription
totalintTotal items in the request
succeededintNumber of successful upserts
resultsUpsertResult[]Per-item results

UpsertResult

FieldTypeDescription
externalIdstring?External ID of the item
successbooleanWhether the upsert succeeded
errorstring?Error message if the upsert failed