ReferenceWhat you can callMaterial (files)uploadPOST /mcp/material/upload

POST /mcp/material/upload

Raw file bytes in, storageId out. Send the file’s path in X-Selda-Path. That path is how Selda maps a file to a company. Then hand the ids to material.import.

EndpointPOST /mcp/material/upload
Scopepipeline
Sandbox keyallowed
Extra entitlementnone
MCP toolsselda_upload_material
Convex functionconvex/mcpApi.ts (httpAction)

A free sandbox key may call it.

Arguments

This endpoint takes the raw bytes of one file as the request body, not a JSON args object.

HeaderRequiredWhat it is
AuthorizationyesBearer sk_live_... or Bearer sk_test_...
X-Selda-PathyesThe file’s path inside your folder. That path is how Selda maps a file to a company.

Example request

curl -X POST https://api.selda.ai/mcp/material/upload \
  -H "Authorization: Bearer sk_live_..." \
  -H "X-Selda-Path: boreo/filterit/analysis.pdf" \
  -H "Content-Type: application/pdf" \
  --data-binary @analysis.pdf

Example response

{
  "value": { "storageId": "<storageId>", "path": "boreo/filterit/analysis.pdf", "sizeBytes": 20481 },
  "request_id": "req_..."
}

Generated from convex/lib/mcpRegistry.ts. Nothing in this reference sends: launchRun is in no registry and never will be, so a script can prepare a campaign completely and a person still presses send in the app.