{
  "openapi": "3.0.1",
  "info": {
    "title": "Softools Public API",
    "description": "Stable public integration API.",
    "version": "v1"
  },
  "servers": [
    {
      "url": "https://api-gateway.softools.net"
    }
  ],
  "paths": {
    "/Api/Apps/{AppIdentifier}/Data/{RecordID}/Unarchive": {
      "post": {
        "tags": [
          "AppData"
        ],
        "summary": "Restores an archived record.",
        "operationId": "616591f814c477d54af9b9e2",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "recordId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              },
              "text/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Apps/{AppIdentifier}/Data/Csv": {
      "patch": {
        "tags": [
          "AppData"
        ],
        "summary": "Starts an import using CSV content from the request body.",
        "operationId": "patch-data-via-csv-file-content",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "text/csv": {
              "schema": {
                "type": "string"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Softools.Platform.Application.Workspace.Apps.BeginImportJobResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Softools.Platform.Application.Workspace.Apps.BeginImportJobResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Softools.Platform.Application.Workspace.Apps.BeginImportJobResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "description": "Rate limit exceeded",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying. Matches the seconds in the message.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "statusCode",
                    "message"
                  ],
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "statusCode": 429,
                  "message": "Rate limit is exceeded. Try again in 60 seconds."
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Apps/{AppIdentifier}/Data/{RecordID}": {
      "delete": {
        "tags": [
          "AppData"
        ],
        "summary": "Archives a record without permanently deleting it.",
        "operationId": "61658e95d303871c02417fe8",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "recordId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              },
              "text/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      },
      "patch": {
        "tags": [
          "AppDataPatchPost"
        ],
        "summary": "Applies a delta update to one record, so callers only need to send changed fields.",
        "operationId": "patch-an-individual-record",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "description": "The app identifier from its Workspace URL.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "recordId",
            "in": "path",
            "description": "The record identifier.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "A JSON object whose keys are field identifiers and values are their replacements.",
          "content": {
            "application/json-patch+json": {
              "schema": { }
            },
            "application/json": {
              "schema": { },
              "example": {
                "TextFieldExample": "text",
                "RangeFieldExample": 5,
                "MultiStateHarveyBallFieldExample": "75%",
                "MultiStateRAGFieldExample": "Amber",
                "BitFieldExample": false,
                "NumberFieldExample": 0,
                "SingleSelectionExample": "Item 1",
                "ListFieldExample": {
                  "changes": {
                    "575fbf3cc99d15b138a08324": {
                      "TextField2Example": "Item 3"
                    }
                  },
                  "added": [
                    {
                      "Activity": "Item1",
                      "DateField2Example": {
                        "$date": 1466208000000
                      }
                    }
                  ],
                  "removed": [
                    "575fbf3cc99d15b138a08323"
                  ]
                }
              }
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              },
              "text/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "description": "Rate limit exceeded",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying. Matches the seconds in the message.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "statusCode",
                    "message"
                  ],
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "statusCode": 429,
                  "message": "Rate limit is exceeded. Try again in 60 seconds."
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "AppDataRecord"
        ],
        "summary": "Gets one unarchived record by its identifier.",
        "operationId": "5f200b21a0abdb773393013b",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "description": "The app identifier.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "recordId",
            "in": "path",
            "description": "The record identifier.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              },
              "text/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "description": "Rate limit exceeded",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying. Matches the seconds in the message.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "statusCode",
                    "message"
                  ],
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "statusCode": 429,
                  "message": "Rate limit is exceeded. Try again in 60 seconds."
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Apps/{AppIdentifier}/Data/{RecordID}/Archived": {
      "delete": {
        "tags": [
          "AppData"
        ],
        "summary": "Permanently deletes an archived record.",
        "operationId": "61658fed32f4ab47233e3759",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "recordId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Softools.Platform.Types.Workspace.Apps.Records.RecordResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Softools.Platform.Types.Workspace.Apps.Records.RecordResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Softools.Platform.Types.Workspace.Apps.Records.RecordResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Apps/Documents": {
      "post": {
        "tags": [
          "AppDataDocument"
        ],
        "summary": "Confirms metadata for a document uploaded using a public upload URL.",
        "operationId": "69c148f31b9b048f47a03ef3",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Confirm_Document_Request"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Confirm_Document_Request"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Confirm_Document_Request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Confirm_Document_Request"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              },
              "text/json": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Apps/Documents/UploadUrl": {
      "get": {
        "tags": [
          "AppDataDocument"
        ],
        "summary": "Gets a SAS URL for uploading a document directly to storage.\r\nUploading direct to storage will reduce the risk of DDOS RAM starvation.\r\nWe can set the DOTNET core max upload file size to 30mbs not 200+",
        "operationId": "69c147a76029ed93e6138f9c",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Document_Upload_Request"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Document_Upload_Request"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Document_Upload_Request"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Image/{id}": {
      "get": {
        "tags": [
          "AppDataImageDownload"
        ],
        "summary": "Returns a download link for a full size image. The link is a read-only storage URL that expires after 60 minutes\r\nand does not need API credentials. Access is scoped to the authenticated tenant.",
        "operationId": "69c4f783e1cf67c72c377ed5",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "The image ID from an image field.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Image_Download_Response"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Image_Download_Response"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Image_Download_Response"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Apps/{AppIdentifier}/Data/{RecordId}/Images": {
      "post": {
        "tags": [
          "AppDataImages"
        ],
        "summary": "Attaches a base64-encoded image to a record.",
        "operationId": "69428d0acc4b3dc7c2e15df2",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "recordId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "$ref": "#/components/schemas/Image_Request"
              }
            },
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Image_Request"
              }
            },
            "text/json": {
              "schema": {
                "$ref": "#/components/schemas/Image_Request"
              }
            },
            "application/*+json": {
              "schema": {
                "$ref": "#/components/schemas/Image_Request"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "415": {
            "description": "Unsupported Media Type",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Apps/{AppIdentifier}/Data": {
      "post": {
        "tags": [
          "AppDataPatchPost"
        ],
        "summary": "Creates record data from field identifiers, including any required default values.",
        "operationId": "post-an-individual-record",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "description": "The app identifier from its Workspace URL.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Record data whose keys are field identifiers.",
          "content": {
            "application/json-patch+json": {
              "schema": { }
            },
            "application/json": {
              "schema": { },
              "example": [
                {
                  "TextFieldExample": "",
                  "DateFieldExample": null,
                  "RangeFieldExample": "0",
                  "MultiStateHarveyBallFieldExample": "",
                  "MultiStateRAGFieldExample": "",
                  "BitFieldExample": false,
                  "NumberFieldExample": 0,
                  "SingleSelectionExample": "Item A",
                  "ListFieldExample": {
                    "changes": { },
                    "added": [ ],
                    "removed": [ ]
                  }
                },
                {
                  "TextFieldExample": "",
                  "DateFieldExample": null,
                  "RangeFieldExample": "0",
                  "MultiStateHarveyBallFieldExample": "",
                  "MultiStateRAGFieldExample": "",
                  "BitFieldExample": false,
                  "NumberFieldExample ": 0,
                  "SingleSelectionExample": "Item A",
                  "ListFieldExample": {
                    "changes": { },
                    "added": [ ],
                    "removed": [ ]
                  }
                }
              ]
            },
            "text/json": {
              "schema": { }
            },
            "application/*+json": {
              "schema": { }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              },
              "text/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "description": "Rate limit exceeded",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying. Matches the seconds in the message.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "statusCode",
                    "message"
                  ],
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "statusCode": 429,
                  "message": "Rate limit is exceeded. Try again in 60 seconds."
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Heartbeat": {
      "get": {
        "tags": [
          "Heartbeat"
        ],
        "summary": "Confirms that the public API is available.",
        "operationId": "heartbeat",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string"
                }
              },
              "text/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/": {
      "get": {
        "tags": [
          "Heartbeat"
        ],
        "summary": "Confirms that the public API is available.",
        "operationId": "root",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string"
                }
              },
              "text/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/Api/Apps/{AppIdentifier}/View/{ViewReportIdentifier}": {
      "get": {
        "tags": [
          "PublicAppData"
        ],
        "summary": "Get a List of un-archived Records containing only the Fields defined in the target View Report.\r\nOptionally match on Record Hierarchy.\r\nMaximum 250 record results.",
        "operationId": "65ccd95528c4fba1982210d9",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "viewReportIdentifier",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Skips records; 1 starts with the second record.",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Maximum number of records to return, up to 250.",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Field identifier and asc or desc direction.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$filter",
            "in": "query",
            "description": "OData filter expression using field identifiers.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": { }
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": { }
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": { }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "description": "Rate limit exceeded",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying. Matches the seconds in the message.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "statusCode",
                    "message"
                  ],
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "statusCode": 429,
                  "message": "Rate limit is exceeded. Try again in 60 seconds."
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Apps/{AppIdentifier}/View/{ViewReportIdentifier}/Archived": {
      "get": {
        "tags": [
          "PublicAppData"
        ],
        "summary": "Called through the published public API compatibility route.\r\n            \r\nGet a List of archived Records containing only the Fields defined in the target View Report.\r\nOptionally match on Record Hierarchy.\r\nMaximum 250 record results.",
        "operationId": "get-archived-view",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "viewReportIdentifier",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Skips records; 1 starts with the second record.",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Maximum number of records to return, up to 250.",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Field identifier and asc or desc direction.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$filter",
            "in": "query",
            "description": "OData filter expression using field identifiers.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": { }
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": { }
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": { }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "description": "Rate limit exceeded",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying. Matches the seconds in the message.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "statusCode",
                    "message"
                  ],
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "statusCode": 429,
                  "message": "Rate limit is exceeded. Try again in 60 seconds."
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Apps/{AppIdentifier}/View/{ViewReportIdentifier}/Record/{RecordId}": {
      "get": {
        "tags": [
          "PublicAppData"
        ],
        "summary": "Get a specific un-archived Record containing only the Fields defined in the target View Report.",
        "operationId": "6977395a3dc1705f97cfebfa",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "viewReportIdentifier",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "recordId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              },
              "text/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "description": "Rate limit exceeded",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying. Matches the seconds in the message.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "statusCode",
                    "message"
                  ],
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "statusCode": 429,
                  "message": "Rate limit is exceeded. Try again in 60 seconds."
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Apps/{AppIdentifier}/View/{ViewReportIdentifier}/Record/{RecordId}/Archived": {
      "get": {
        "tags": [
          "PublicAppData"
        ],
        "summary": "Called through the published public API compatibility route.\r\n            \r\nGet a specific archived Record containing only the Fields defined in the target View Report.",
        "operationId": "get-archived-view-record",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "viewReportIdentifier",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "recordId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              },
              "text/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": { }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "description": "Rate limit exceeded",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying. Matches the seconds in the message.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "statusCode",
                    "message"
                  ],
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "statusCode": 429,
                  "message": "Rate limit is exceeded. Try again in 60 seconds."
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Apps/{AppIdentifier}/Data/Report/{ReportID}": {
      "get": {
        "tags": [
          "PublicAppData"
        ],
        "summary": "Gets unarchived records from a report, using the report's base filter and fields.\r\nReturns an empty list when the report ID is 0 or no report has that ID.\r\nView Reports are recommended for new integrations.",
        "operationId": "get-list-of-records-for-a-report",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "description": "The app identifier from its Workspace URL.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "reportId",
            "in": "path",
            "description": "The numeric report ID.",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Skips records; 1 starts with the second record.",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Maximum number of records to return, up to 250.",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Field identifier and asc or desc direction.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$filter",
            "in": "query",
            "description": "OData filter expression using field identifiers.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": { }
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": { }
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": { }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "description": "Rate limit exceeded",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying. Matches the seconds in the message.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "statusCode",
                    "message"
                  ],
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "statusCode": 429,
                  "message": "Rate limit is exceeded. Try again in 60 seconds."
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Apps/{AppIdentifier}/Fields": {
      "get": {
        "tags": [
          "PublicApps"
        ],
        "summary": "Gets the stable identifier, type and required-state metadata for an app's fields.",
        "operationId": "get-basic-field-info",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "description": "The app identifier from its Workspace URL.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/basic-fields-response"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/basic-fields-response"
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/basic-fields-response"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Users/UserId": {
      "get": {
        "tags": [
          "PublicUsers"
        ],
        "summary": "Used by public integrations.\r\n            \r\nGet UserId from Email, for authenticated Users Tenant.\r\nNote all Users are included in the lookup, i.e. we include Pending/ Deactivated Users etc.",
        "operationId": "get-user-id-from-email",
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string"
                }
              },
              "text/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Users/Registered": {
      "get": {
        "tags": [
          "PublicUsers"
        ],
        "summary": "Used by public integrations.\r\n            \r\nVerify if the Email has been registered on the system and has a Auth0UserId present.\r\nReturn true if registered, otherwise false.",
        "operationId": "get-user-registration-status",
        "parameters": [
          {
            "name": "email",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "boolean"
                }
              },
              "application/json": {
                "schema": {
                  "type": "boolean"
                }
              },
              "text/json": {
                "schema": {
                  "type": "boolean"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/Microsoft.AspNetCore.Mvc.ProblemDetails"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    },
    "/Api/Apps/{AppIdentifier}/Data/": {
      "get": {
        "tags": [
          "PublicAppData"
        ],
        "summary": "Gets up to 250 unarchived records from an app.",
        "operationId": "get-all-records",
        "parameters": [
          {
            "name": "appIdentifier",
            "in": "path",
            "description": "The app identifier from its Workspace URL.",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$skip",
            "in": "query",
            "description": "Skips records; 1 starts with the second record.",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "$top",
            "in": "query",
            "description": "Maximum number of records to return, up to 250.",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "$orderby",
            "in": "query",
            "description": "Field identifier and asc or desc direction.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "$filter",
            "in": "query",
            "description": "OData filter expression using field identifiers.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": { }
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": { }
                  }
                }
              },
              "text/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "additionalProperties": { }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "429": {
            "description": "Rate limit exceeded",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying. Matches the seconds in the message.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "required": [
                    "statusCode",
                    "message"
                  ],
                  "type": "object",
                  "properties": {
                    "statusCode": {
                      "type": "integer"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                },
                "example": {
                  "statusCode": 429,
                  "message": "Rate limit is exceeded. Try again in 60 seconds."
                }
              }
            }
          }
        },
        "security": [
          {
            "ApiKey": [ ],
            "Tenant": [ ]
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "Confirm_Document_Request": {
        "type": "object",
        "properties": {
          "FileId": {
            "type": "string",
            "nullable": true
          },
          "MimeType": {
            "type": "string",
            "nullable": true
          },
          "Filename": {
            "type": "string",
            "nullable": true
          },
          "AppIdentifier": {
            "type": "string",
            "nullable": true
          },
          "FieldIdentifier": {
            "type": "string",
            "nullable": true
          },
          "RecordId": {
            "type": "string",
            "nullable": true
          },
          "XMsVersionId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Document_Upload_Request": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "nullable": true
          },
          "UploadTokenUrl": {
            "type": "string",
            "format": "uri",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Image_Download_Response": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "nullable": true
          },
          "Url": {
            "type": "string",
            "nullable": true
          },
          "Name": {
            "type": "string",
            "nullable": true
          },
          "ContentType": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Image_Request": {
        "type": "object",
        "properties": {
          "Data": {
            "type": "string",
            "nullable": true
          },
          "Filename": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Microsoft.AspNetCore.Mvc.ProblemDetails": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "nullable": true
          },
          "Title": {
            "type": "string",
            "nullable": true
          },
          "Status": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "Detail": {
            "type": "string",
            "nullable": true
          },
          "Instance": {
            "type": "string",
            "nullable": true
          },
          "Extensions": {
            "type": "object",
            "additionalProperties": {
              "nullable": true
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Softools.Platform.Application.Workspace.Apps.BeginImportJobResult": {
        "type": "object",
        "properties": {
          "ProcessId": {
            "type": "string",
            "format": "uuid"
          },
          "FileName": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Softools.Platform.Types.Core.Enums.FieldType": {
        "enum": [
          0,
          1,
          3,
          4,
          6,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18,
          20,
          21,
          23,
          24,
          25,
          26,
          27,
          28,
          29,
          30,
          31,
          32,
          33,
          34,
          35,
          36,
          37,
          38,
          39,
          40,
          41,
          42,
          43,
          44,
          45,
          46,
          47,
          48,
          49,
          50,
          51,
          52,
          55
        ],
        "type": "integer",
        "format": "int32"
      },
      "Softools.Platform.Types.Core.Enums.SubType": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5
        ],
        "type": "integer",
        "format": "int32"
      },
      "Softools.Platform.Types.ValidationError": {
        "type": "object",
        "properties": {
          "FieldIdentifier": {
            "type": "string",
            "nullable": true
          },
          "FieldLabel": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          },
          "ErrorDetails": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Softools.Platform.Types.Workspace.Apps.Records.RecordResult": {
        "type": "object",
        "properties": {
          "RecordId": {
            "type": "string",
            "nullable": true
          },
          "Errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Softools.Platform.Types.ValidationError"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "basic-fields-response": {
        "type": "object",
        "properties": {
          "Identifier": {
            "type": "string",
            "nullable": true
          },
          "Type": {
            "$ref": "#/components/schemas/Softools.Platform.Types.Core.Enums.FieldType"
          },
          "Required": {
            "type": "boolean"
          },
          "SubType": {
            "$ref": "#/components/schemas/Softools.Platform.Types.Core.Enums.SubType"
          }
        },
        "additionalProperties": false,
        "description": "Stable public field metadata. Changes to this DTO must remain backwards compatible."
      }
    },
    "securitySchemes": {
      "ApiKey": {
        "type": "apiKey",
        "description": "API key from the Softools user profile.",
        "name": "ApiKey",
        "in": "header"
      },
      "Tenant": {
        "type": "apiKey",
        "description": "Softools tenant identifier.",
        "name": "Tenant",
        "in": "header"
      }
    }
  }
}