System Atlas

Upload components

Up to 200 components per call. Each is placed on a primitive and stored private, self-reported, draft.

POST/api/v1/workspaces/:slug/upload/componentsWrite · editor key

Authentication

Authorization: Bearer sa_… from the workspace owner or a member. Counts against the upload rate limit.

Parameters

Path

  • slugstringrequired

    Workspace slug

Body

  • companystringoptional

    Company slug; defaults to the workspace's own company

    min 1 charmax 80 chars
  • itemsobject[]required
    min 1 itemmax 200 items
  • items[].clientIdstringoptional

    Your stable id for this thing (e.g. repo path or tool slug). Re-uploading the same clientId updates instead of duplicating.

    min 1 charmax 120 charspattern ^[\w.:/@-]+$
  • items[].labelstringrequired

    The company's own name for it: 'Payroll (Gusto)', 'Platform team'

    min 1 charmax 200 chars
  • items[].descriptionstringoptional

    One or two plain sentences: what it is, what it does

    max 2000 chars
  • items[].layerenumoptional
    peopleprocesssoftwaredatadecisions
  • items[].primitivestringoptional

    Primitive key from get_mapping_guide, if you know it

    max 80 chars
  • items[].parentstringoptional

    Parent component: its clientId, label, or component id

    min 1 charmax 200 chars
  • items[].kindenumoptionaldefault "internal"
    internalexternal
  • items[].externalKindenumoptional
    customersupplierpartnerregulatoreconomic_factor
  • items[].valuesobject[]optionaldefault []
    max 50 items
  • items[].values[].parameterstringrequired
    min 1 charmax 80 chars
  • items[].values[].valuestring | number | booleanrequired
  • items[].sourceobjectoptional
  • items[].source.kindenumoptionaldefault "client_document"
    client_documentinterviewmanualwebsitefilingregistry
  • items[].source.urlstringoptional
    max 500 chars
  • items[].source.titlestringoptional
    max 200 chars

Request

curl -X POST "https://systematlas.org/api/v1/workspaces/acme-builders/upload/components" \
  -H "Authorization: Bearer sa_…" \
  -H "content-type: application/json" \
  -d '{"items":[{"clientId":"tool/gusto","label":"Payroll in Gusto","layer":"software"}]}'

Response

200 with the result in data (abbreviated here). Errors are listed in Errors and limits.

Response
{
  "data": {
    "placed": {
      "matched": 1
    },
    "results": [
      {
        "clientId": "tool/gusto",
        "primitive": "payroll",
        "placedBy": "matched",
        "created": true
      }
    ],
    "summary": {
      "coverage": {
        "percent": 62
      }
    }
  }
}

Over MCP

The same call as an MCP tool: upload_components.