File API

Upload a file. Returns metadata only, never the bytes. Uploading identical bytes under the same name returns the existing version instead of creating a new one.

Changed on
post/rest/api/v1/projects/{projectId}/files

Request

Path parameters

projectIdstring uuid required

Query parameters

typestring required

Request body multipart/form-data

filestring binary required

Response

Created

deletedstring date-time

Set once the version has been deleted; the record survives for the audit trail, the bytes do not.

extensionstring

Lowercase extension without the dot.

fileNamestring

Sanitised original upload name.

fileType'EA_MT5' | 'EA_MT4' | 'INDICATOR_MT5' | 'INDICATOR_MT4' | 'LIBRARY_MT5' | 'LIBRARY_MT4' | 'PRESET' | 'DATA' | 'DLL'

Type of the file, which decides how it is validated and where it may be deployed.

idstring uuid

Identity of this version.

namestring

Sanitised stem. Together with fileType it identifies the file across versions.

projectIdstring uuid

Owning project.

reviewedboolean

True when staff reviewed the source of this exact version and built it. Only meaningful for EA and DLL files, and the only thing that can enable DLL imports.

reviewedAtstring date-time

When the review happened, null if never reviewed.

sha256string

SHA-256 of the content.

sizeBytesinteger

Size in bytes. Zero once the version has been deleted.

uploadedAtstring date-time

When this version was uploaded.

versioninteger

Version number, monotonic per name and type. A consumer always pins one; there is no implicit latest.

Example response

{
  "extension": "ex5",
  "fileName": "MyTrendEA.ex5",
  "fileType": "EA_MT5",
  "name": "MyTrendEA",
  "referencedBy": [
    {
      "accountAlias": "FTMO 100k",
      "label": "MyTrendEA on EURUSD M15"
    }
  ],
  "sha256": "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
  "sizeBytes": 412160,
  "version": 3
}

Changes