openapi: 3.0.0 info: title: AI Hub Audit Files API version: '0.1' description: The AI Hub REST API. See https://docs.instabase.com/api-sdk/ for more details. termsOfService: https://www.instabase.com/terms-of-service/ contact: name: Instabase Support url: https://help.instabase.com/ license: name: MIT url: https://github.com/instabase/aihub-python/blob/master/LICENSE servers: - url: https://aihub.instabase.com/api security: - bearerAuth: [] tags: - name: Files paths: /v2/files/{path}: get: operationId: readFile x-fern-audiences: - public tags: - Files summary: Read file description: 'Read contents from a file. This acts on files in the AI Hub filesystem, not your local filesystem. Ensure the path is accessible within the context defined by the `IB-Context` header. ' parameters: - in: path name: path required: true schema: type: string description: Full path to the file. - in: query name: expect-node-type required: true schema: type: string enum: - file - folder description: Type of node at the target path. - $ref: '#/components/parameters/ib_context' - in: header name: Range schema: type: string required: false description: 'The portion of the file to read. A single HTTP byte range, with inclusive bounds and a non-negative start value. If not provided, return the entire file. Example: `bytes=0-4` ' - in: header name: IB-Retry-Config schema: type: string required: false description: 'Configures retry logic if no file is found at the target path. Uses a constant backoff algorithm. Don''t retry if this header isn''t provided. Example: `{retries:3,backoff-seconds:5}` ' responses: '200': description: Indicates that the response contains the entire file contents. content: application/octet-stream: schema: type: string format: binary headers: Content-Type: schema: type: string default: application/octet-stream Content-Length: schema: type: integer format: int64 '206': description: Indicates that only a portion of the file has been returned, as requested with the Range header. content: application/octet-stream: schema: type: string format: binary headers: Content-Type: schema: type: string default: application/octet-stream Content-Length: schema: type: integer format: int64 Content-Range: schema: type: string description: An HTTP content range header. Contains a range representing the returned portion of the file. default: content: application/json: schema: $ref: '#/components/schemas/error' description: Error response. x-fern-examples: - code-samples: - sdk: curl code: "curl \"${API_ROOT}/v2/files/?expect-node-type=file\" \\\n -H \"Authorization: Bearer ${API_TOKEN}\" \\\n -H \"IB-Context: ${IB_CONTEXT}\"\n" - sdk: python name: Simple request with SDK code: "from aihub import AIHub\n\nclient = AIHub(\n api_root=\"https://aihub.instabase.com/api\",\n api_key=\"abcdefghijklmnopqrst1234567890\",\n ib_context=\"john.doe_acme.com\"\n)\n\norganization_id = \"acme_org\"\nworkspace = \"MyWorkspace\"\ndrive = \"My Google Drive\"\nfolder = \"My Drive/AI Hub files\"\nfile_name = \"hello.txt\"\nfile_path = f\"{organization_id}/{workspace}/fs/{drive}/{folder}/{file_name}\"\n\n# returns a byte literal, such as `b\"foo\"`\nfile_contents = client.files.read(path=file_path, expect_node_type=\"file\")\nprint(f\"Contents: {file_contents.decode('utf-8')}\")\n" - sdk: python name: Simple request without SDK code: "import requests\n\norganization_id = \"acme_org\"\nworkspace = \"MyWorkspace\"\ndrive = \"My Google Drive\"\nfolder = \"My Drive/AI Hub files\"\nfile_name = \"hello.txt\"\nfile_path = f\"{organization_id}/{workspace}/fs/{drive}/{folder}/{file_name}\"\n\nurl = f\"https://aihub.instabase.com/api/v2/files/{file_path}\"\n\nheaders = {\n \"Authorization\": \"Bearer abcdefghijklmnopqrst1234567890\",\n \"IB-Context\": \"john.doe_acme.com\"\n}\n\n# create query parameters\nparams = {\"expect-node-type\": \"file\"}\n\n# make the GET request\nresponse = requests.get(url, headers=headers, params=params)\n\n# handle the response\nif response.status_code == 200:\n print(f\"Contents: {response.content.decode('utf-8')}\")\nelse:\n print(f\"Error: {response.status_code} - {response.text}\")\n" - sdk: python name: Complex request with SDK code: "from aihub import AIHub\n\nclient = AIHub(\n api_root=\"https://aihub.instabase.com/api\",\n api_key=\"abcdefghijklmnopqrst1234567890\",\n ib_context=\"john.doe_acme.com\"\n)\n\norganization_id = \"acme_org\"\nworkspace = \"MyWorkspace\"\ndrive = \"My Google Drive\"\nfolder = \"My Drive/AI Hub files\"\nfile_name = \"hello.txt\"\nfile_path = f\"{organization_id}/{workspace}/fs/{drive}/{folder}/{file_name}\"\n\nretry_config = '{\"retries\": 3, \"backoff-seconds\": 5}'\n\n# returns a byte literal, such as `b\"foo\"`\nfile_contents = client.files.read(\n path=file_path,\n expect_node_type=\"file\",\n range=\"bytes=10-20\",\n ib_retry_config=retry_config\n)\nprint(f\"Contents: {file_contents.decode('utf-8')}\")\n" - sdk: python name: Complex request without SDK code: "import requests\n\norganization_id = \"acme_org\"\nworkspace = \"MyWorkspace\"\ndrive = \"My Google Drive\"\nfolder = \"My Drive/AI Hub files\"\nfile_name = \"hello.txt\"\nfile_path = f\"{organization_id}/{workspace}/fs/{drive}/{folder}/{file_name}\"\n\nbyte_range = \"bytes=10-20\"\nretry_config = '{\"retries\": 3, \"backoff-seconds\": 5}'\n\n# create query parameters\nparams = {\"expect-node-type\": \"file\"}\n\nurl = f\"https://aihub.instabase.com/api/v2/files/{file_path}\"\n\nheaders = {\n \"Authorization\": \"Bearer abcdefghijklmnopqrst1234567890\",\n \"IB-Context\": \"john.doe_acme.com\",\n \"Range\": byte_range,\n \"IB-Retry-Config\": retry_config\n}\n\n# make the GET request\nresponse = requests.get(url, headers=headers, params=params)\n\n# handle the response\n# 200 means whole content is returned\n# 206 means partial content is returned, due to \"Range\" parameter\nif response.status_code in [200, 206]:\n print(f\"Contents: {response.content.decode('utf-8')}\")\nelse:\n print(f\"Error: {response.status_code} - {response.text}\")\n" put: operationId: writeFile x-fern-audiences: - public tags: - Files summary: Create or overwrite file description: 'Create a non-empty file or overwrite an existing file. If the parent folder of the `path` parameter doesn''t exist, the file system creates it before creating the file. This acts on files in the AI Hub filesystem, not your local filesystem. Ensure the path is accessible within the context defined by the `IB-Context` header. Not all filesystem types support this operation. | Filesystem | Supported | |----------------------|-----------| | Instabase | ✓ | | Amazon S3 | ✓ | | Azure Blob Storage | ✓ | | Google Cloud Storage | ✓ | | Google Drive | - | ' parameters: - in: path name: path required: true schema: type: string description: Full path to the file. - $ref: '#/components/parameters/ib_context' requestBody: required: true content: application/octet-stream: schema: description: The raw contents of the file to write. type: string format: binary responses: '201': description: The request succeeded and a new file was created at the target location. AI Hub returns this status code only when the request includes an `If-None-Match` header with a value of `*`. headers: Location: schema: type: string description: Contains a URL leading to the created file. '204': description: The request succeeded. '412': description: The request failed because a file exists at the target location that matches the `If-None-Match` header. default: content: application/json: schema: $ref: '#/components/schemas/error' description: Error response. x-fern-examples: - code-samples: - sdk: curl code: "curl -X PUT \"${API_ROOT}/v2/files/\" \\\n -H \"Authorization: Bearer ${API_TOKEN}\" \\\n -H \"IB-Context: ${IB_CONTEXT}\" \\\n -H \"Content-Type: application/octet-stream\" \\\n --data-binary \"@\"\n" - sdk: python name: with SDK code: "from aihub import AIHub\n\nclient = AIHub(\n api_root=\"https://aihub.instabase.com/api\",\n api_key=\"abcdefghijklmnopqrst1234567890\",\n ib_context=\"john.doe_acme.com\"\n)\n\norganization_id = \"acme_org\"\nworkspace = \"MyWorkspace\"\ndrive = \"MyDrive\"\nfolder = \"MyFolder\"\nfile_name = \"hello.txt\"\nfile_path = f\"{organization_id}/{workspace}/fs/{drive}/{folder}/{file_name}\"\nfile_contents = bytes(\"Hello world\", \"utf-8\")\n\n# returns None\nclient.files.write(path=file_path, data=file_contents)\n" - sdk: python name: without SDK code: "import requests\n\norganization_id = \"acme_org\"\nworkspace = \"MyWorkspace\"\ndrive = \"MyDrive\"\nfolder = \"MyFolder\"\nfile_name = \"hello.txt\"\nfile_path = f\"{organization_id}/{workspace}/fs/{drive}/{folder}/{file_name}\"\nfile_contents = bytes(\"Hello world\", \"utf-8\")\n\nurl = f\"https://aihub.instabase.com/api/v2/files/{file_path}\"\n\nheaders = {\n \"Authorization\": \"Bearer abcdefghijklmnopqrst1234567890\",\n \"IB-Context\": \"john.doe_acme.com\",\n \"Content-Type\": \"application/octet-stream\"\n}\n\n# make the PUT request\nresponse = requests.put(url, headers=headers, data=file_contents)\n\n# handle the response\nif response.status_code in [201, 204]:\n print(\"File written successfully\")\nelse:\n print(f\"Error: {response.status_code} - {response.text}\")\n" head: operationId: getFileMetadata x-fern-audiences: - public tags: - Files summary: Read file or folder metadata description: 'Read metadata of a file or folder at the target path. This API operation reports whether the object at the target path is a file or folder. If a file, it also reports the file size and last modification time. This acts on files and folders in the AI Hub filesystem, not your local filesystem. Ensure the path is accessible within the context defined by the `IB-Context` header. ' parameters: - in: path name: path required: true schema: type: string description: Full path to the file or folder. - $ref: '#/components/parameters/ib_context' - in: header name: IB-Retry-Config schema: type: string required: false description: 'Configures retry logic if no file or folder is found at the target path. Uses a constant backoff algorithm. Don''t retry if this header isn''t provided. Example: `{''retries'': 3, ''backoff-seconds'': 5}` ' responses: '200': description: Successfully retrieved metadata. headers: Content-Type: schema: type: string description: Returns `application/json` if it is a folder and `application/octet-stream` if it is a file. Content-Length: schema: type: integer format: int64 description: Optional. Only present if the target path is a file. The length of the file, in bytes. last-modified: schema: type: string format: date-time description: Optional. Only present if the target path is a file. The date and time the file was last modified. '404': description: No file or folder was found at the target path. default: content: application/json: schema: $ref: '#/components/schemas/error' description: Error response. x-fern-examples: - code-samples: - sdk: curl code: "curl -I \"${API_ROOT}/v2/files/\" \\\n -H \"Authorization: Bearer ${API_TOKEN}\" \\\n -H \"IB-Context: ${IB_CONTEXT}\"\n" - sdk: python name: with SDK code: "from aihub import AIHub\n\nclient = AIHub(\n api_root=\"https://aihub.instabase.com/api\",\n api_key=\"abcdefghijklmnopqrst1234567890\",\n ib_context=\"john.doe_acme.com\"\n)\n\norganization_id = \"acme_org\"\nworkspace = \"MyWorkspace\"\ndrive = \"Instabase Drive\"\nfolder = \"MyFolder\"\nnode = \"hello.txt\"\nnode_path = f\"{organization_id}/{workspace}/fs/{drive}/{folder}/{node}\"\n\n# returns an object with status code and headers\nresponse = client.files.get_file_metadata(path=node_path)\n\nis_file = (response.headers[\"Content-Type\"] == \"application/octet-stream\")\nis_folder = (response.headers[\"Content-Type\"] == \"application/json\")\n\nif is_file:\n file_length = response.headers[\"Content-Length\"]\n last_modified = response.headers[\"last-modified\"]\n print(f\"Node is a file with length {file_length} and modification date {last_modified}\")\nelse:\n print(\"Node is a folder\")\n" - sdk: python name: without SDK code: "import requests\n\norganization_id = \"acme_org\"\nworkspace = \"MyWorkspace\"\ndrive = \"Instabase Drive\"\nfolder = \"MyFolder\"\nfile_name = \"hello.txt\"\nnode_path = f\"{organization_id}/{workspace}/fs/{drive}/{folder}/{file_name}\"\n\nurl = f\"https://aihub.instabase.com/api/v2/files/{node_path}\"\n\nheaders = {\n \"Authorization\": \"Bearer abcdefghijklmnopqrst1234567890\",\n \"IB-Context\": \"john.doe_acme.com\"\n}\n\n# make the HEAD request\nresponse = requests.head(url, headers=headers)\n\n# handle the response\nif response.status_code == 200:\n is_file = (response.headers[\"Content-Type\"] == \"application/octet-stream\")\n is_folder = (response.headers[\"Content-Type\"] == \"application/json\")\n\n if is_file:\n file_length = response.headers[\"Content-Length\"]\n last_modified = response.headers[\"last-modified\"]\n print(f\"Node is a file with length {file_length} and modification date {last_modified}\")\n else:\n print(\"Node is a folder\")\nelse:\n print(f\"Error: {response.status_code} - {response.text}\")\n" delete: operationId: deleteFileOrFolder x-fern-audiences: - public tags: - Files summary: Delete file or folder description: 'Delete a single file or folder. This operation is also available via the SDK method `client.files.delete()`. This acts on files in the AI Hub filesystem, not your local filesystem. Ensure the path is accessible within the context defined by the `IB-Context` header. Not all filesystem types support this operation. | Filesystem | Supported | |----------------------|-----------| | Instabase | ✓ | | Amazon S3 | ✓ | | Azure Blob Storage | ✓ | | Google Cloud Storage | ✓ | | Google Drive | - | ' parameters: - in: path name: path required: true schema: type: string description: Full path to the file or folder. - $ref: '#/components/parameters/ib_context' responses: '202': description: Indicates that the deletion request has been accepted.
The operation returns this status code regardless of whether the file or folder exists. headers: Location: schema: type: string description: A URL where the status of the deletion job can be checked. default: content: application/json: schema: $ref: '#/components/schemas/error' description: Error response. x-fern-examples: - code-samples: - sdk: curl code: "curl -X DELETE \"${API_ROOT}/v2/files/\" \\\n -H \"Authorization: Bearer ${API_TOKEN}\" \\\n -H \"IB-Context: ${IB_CONTEXT}\"\n" - sdk: python name: Delete file with SDK code: "from aihub import AIHub\n\nclient = AIHub(\n api_root=\"https://aihub.instabase.com/api\",\n api_key=\"abcdefghijklmnopqrst1234567890\",\n ib_context=\"john.doe_acme.com\"\n)\n\norganization_id = \"acme_org\"\nworkspace = \"MyWorkspace\"\ndrive = \"Instabase Drive\"\nfolder = \"my-folder\"\nfile_name = \"hello.txt\"\nfile_path = f\"{organization_id}/{workspace}/fs/{drive}/{folder}/{file_name}\"\n\n# returns None\nclient.files.delete(path=file_path)\n" - sdk: python name: Delete file without SDK code: "import requests\n\norganization_id = \"acme_org\"\nworkspace = \"MyWorkspace\"\ndrive = \"Instabase Drive\"\nfolder = \"my-folder\"\nfile_name = \"hello.txt\"\nfile_path = f\"{organization_id}/{workspace}/fs/{drive}/{folder}/{file_name}\"\n\nurl = f\"https://aihub.instabase.com/api/v2/files/{file_path}\"\n\nheaders = {\n \"Authorization\": \"Bearer abcdefghijklmnopqrst1234567890\",\n \"IB-Context\": \"john.doe_acme.com\"\n}\n\n# make the DELETE request\nresponse = requests.delete(url, headers=headers)\n\n# handle the response\nif response.status_code == 202:\n print(\"File deletion request accepted\")\nelse:\n print(f\"Error: {response.status_code} - {response.text}\")\n" - sdk: python name: Delete folder with SDK code: "from aihub import AIHub\n\nclient = AIHub(\n api_root=\"https://aihub.instabase.com/api\",\n api_key=\"abcdefghijklmnopqrst1234567890\",\n ib_context=\"john.doe_acme.com\"\n)\n\norganization_id = \"acme_org\"\nworkspace = \"MyWorkspace\"\ndrive = \"Instabase Drive\"\nfolder = \"MyFolder\"\nfolder_path = f\"{organization_id}/{workspace}/fs/{drive}/{folder}\"\n\n# returns None\nclient.files.delete(path=folder_path)\n" - sdk: python name: Delete folder without SDK code: "import requests\n\norganization_id = \"acme_org\"\nworkspace = \"MyWorkspace\"\ndrive = \"Instabase Drive\"\nfolder = \"MyFolder\"\nfolder_path = f\"{organization_id}/{workspace}/fs/{drive}/{folder}\"\n\nurl = f\"https://aihub.instabase.com/api/v2/files/{folder_path}\"\n\nheaders = {\n \"Authorization\": \"Bearer abcdefghijklmnopqrst1234567890\",\n \"IB-Context\": \"john.doe_acme.com\"\n}\n\n# make the DELETE request\nresponse = requests.delete(url, headers=headers)\n\n# handle the response\nif response.status_code == 202:\n print(\"Folder deletion request accepted\")\nelse:\n print(f\"Error: {response.status_code} - {response.text}\")\n" components: parameters: ib_context: in: header name: IB-Context schema: type: string required: false description: Specify whether to use your community account or organization account to complete the request. To use your community account, define as your user ID. To use your organization account, define as your organization ID. If unspecified, defaults to community account context. See [Authorization and context identification](/api-sdk/authorization#ib-context-header) for details. schemas: error: type: object properties: message: type: string securitySchemes: bearerAuth: bearerFormat: auth-scheme description: Bearer HTTP authentication. scheme: bearer type: http