> For the complete documentation index, see [llms.txt](https://knowledgebase.fabricdata.com/studio/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://knowledgebase.fabricdata.com/studio/integrations-and-apis/origin-studio-production-api/data-ingress.md).

# Data Ingress

This API provides a way to manage data ingress executions for importing records from external sources like Fabric V1. It supports multiple source adapters (API-based or CSV-based) and handles hierarchical record creation in the correct order. The system supports incremental imports and tracks progress with success/failure counts.

## List data ingress executions

> Returns a list of data ingress executions for the tenant, sorted by creation time in descending order (most recent first). Can be filtered by status.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"DataIngress","description":"This API provides a way to manage data ingress executions for importing records from external sources like Fabric V1. It supports multiple source adapters (API-based or CSV-based) and handles hierarchical record creation in the correct order. The system supports incremental imports and tracks progress with success/failure counts."}],"servers":[{"url":"{protocol}://{domain}/{basePath}","variables":{"protocol":{"enum":["http","https"],"default":"https"},"domain":{"default":"api.studio.fabricdata.com"},"basePath":{"default":"v1"}}}],"security":[{"jwt-apikey-authorizer":[]}],"components":{"securitySchemes":{"jwt-apikey-authorizer":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"DataIngressFindManyResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IDataIngressFindManyResponse","description":"Response for listing data ingress executions","type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":"array","items":{"type":"object","required":["id","type","attributes"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Data ingress execution ID"},"type":{"type":"string","enum":["dataIngress"]},"attributes":{"$ref":"#/components/schemas/DataIngressAttributes"}}}},"meta":{"type":"object","additionalProperties":false,"properties":{"cursor":{"type":"string","description":"Cursor for pagination"}}}}},"DataIngressAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IDataIngressAttributes","description":"Attributes for a data ingress execution","type":"object","additionalProperties":false,"required":["status","sourceAdapterType","totalItems","successCount","failedCount"],"properties":{"status":{"type":"string","enum":["IN_PROGRESS","COMPLETED","FAILED"],"description":"Current status of the ingress execution"},"name":{"type":"string","description":"Optional name for the data ingress execution, useful for identification and tracking purposes"},"sourceAdapterType":{"type":"string","description":"Identifier of the source adapter used (e.g., 'origin-studio-api', 'generic-file')"},"payload":{"type":"object","description":"Adapter-specific configuration payload","additionalProperties":true},"totalItems":{"type":"integer","description":"Total number of items identified for import"},"successCount":{"type":"integer","description":"Number of items successfully imported"},"failedCount":{"type":"integer","description":"Number of items that failed to import"},"executionArn":{"type":"string","description":"Internal execution reference for the workflow processing this data ingress. Provided for diagnostic purposes."},"backgroundJobId":{"type":"string","description":"ID of the background job tracking this data ingress execution. Use it to retrieve the execution's error archive via GET /backgroundJobs/{jobId}/errors."},"output":{"type":"object","description":"Output data including errors and results","additionalProperties":true},"completedAt":{"type":"string","format":"date-time","description":"Timestamp when the execution completed"},"created":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated":{"type":"string","format":"date-time","description":"Last update timestamp"}}},"ErrorResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IErrorResponse","description":"Standard JSON:API error response returned when a request fails. Contains an `errors` array with one or more error objects (status, title, and optional detail).","type":"object","required":["errors"],"additionalProperties":false,"properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}}},"Error":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IError","description":"A single JSON:API error object. `status` is the HTTP status code as a string. `title` is a short, human-readable summary. `detail` provides optional context. `meta` may include structured conflict or authorization details.","type":"object","additionalProperties":false,"required":["status","title"],"properties":{"status":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","description":"A JSON Pointer to the request field that caused the error (e.g. `/data/attributes/title`).","properties":{"pointer":{"type":"string"}}},"meta":{"type":"object","additionalProperties":true,"properties":{"stack":{"type":"string","description":"Error stack trace. Only present in non-production environments."},"conflictItems":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"unauthorizedItems":{"type":"array","items":{"type":"string"}}}}}}}},"paths":{"/data-ingress":{"get":{"summary":"List data ingress executions","description":"Returns a list of data ingress executions for the tenant, sorted by creation time in descending order (most recent first). Can be filtered by status.","operationId":"dataIngressFindMany","tags":["DataIngress"],"parameters":[{"name":"status","in":"query","description":"Filter by execution status","schema":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETED","FAILED"]}},{"name":"page.limit","in":"query","description":"Maximum number of executions to return (default: 20)","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"page.cursor","in":"query","description":"Cursor for pagination","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataIngressFindManyResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Create a new data ingress execution

> Creates a new data ingress execution to import records from an external source. The execution runs asynchronously in the background. The \`sourceAdapterType\` determines how data is fetched. The \`importType\` controls the import strategy: \`api\` paginates through an external API, while \`file\` reads items from an uploaded file. Poll the execution status using the returned ID.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"DataIngress","description":"This API provides a way to manage data ingress executions for importing records from external sources like Fabric V1. It supports multiple source adapters (API-based or CSV-based) and handles hierarchical record creation in the correct order. The system supports incremental imports and tracks progress with success/failure counts."}],"servers":[{"url":"{protocol}://{domain}/{basePath}","variables":{"protocol":{"enum":["http","https"],"default":"https"},"domain":{"default":"api.studio.fabricdata.com"},"basePath":{"default":"v1"}}}],"security":[{"jwt-apikey-authorizer":[]}],"components":{"securitySchemes":{"jwt-apikey-authorizer":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"DataIngressCreateOneRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IDataIngressCreateOneRequest","description":"Request body for creating a new data ingress execution","type":"object","required":["data"],"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/WriteRequestMeta"},"data":{"type":"object","required":["type","attributes"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["dataIngress"]},"attributes":{"type":"object","required":["sourceAdapterType","importType","payload"],"additionalProperties":false,"properties":{"name":{"type":"string","description":"Optional name for the data ingress execution, useful for identification and tracking purposes"},"sourceAdapterType":{"type":"string","description":"Identifier of the source adapter to use (e.g., 'origin-studio-api', 'generic-file')"},"importType":{"type":"string","enum":["file","api"],"description":"Determines the import strategy: 'file' reads items from an S3 file (CSV/JSON/JSONL) using ItemReader, 'api' paginates through an external API in a loop"},"importFileType":{"type":"string","enum":["csv","json","jsonl"],"description":"Specifies the file format when 'importType' is 'file'. Required if 'importType' is 'file', ignored otherwise."},"payload":{"type":"object","description":"Adapter-specific configuration payload","additionalProperties":true}}}}}}},"WriteRequestMeta":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IWriteRequestMeta","description":"Optional audit metadata for a write request. `audit.source` is the issuing surface/channel (e.g. studio-web, mcp, api, system); `audit.reason` is a free-text justification. Both are optional and length-capped.","type":"object","additionalProperties":false,"properties":{"audit":{"type":"object","additionalProperties":false,"properties":{"source":{"type":"string","maxLength":64},"reason":{"type":"string","maxLength":256}}}}},"DataIngressCreateOneResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IDataIngressCreateOneResponse","description":"Response for creating a new data ingress execution","type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":"object","required":["id","type","attributes"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Data ingress execution ID"},"type":{"type":"string","enum":["dataIngress"]},"attributes":{"$ref":"#/components/schemas/DataIngressAttributes"}}}}},"DataIngressAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IDataIngressAttributes","description":"Attributes for a data ingress execution","type":"object","additionalProperties":false,"required":["status","sourceAdapterType","totalItems","successCount","failedCount"],"properties":{"status":{"type":"string","enum":["IN_PROGRESS","COMPLETED","FAILED"],"description":"Current status of the ingress execution"},"name":{"type":"string","description":"Optional name for the data ingress execution, useful for identification and tracking purposes"},"sourceAdapterType":{"type":"string","description":"Identifier of the source adapter used (e.g., 'origin-studio-api', 'generic-file')"},"payload":{"type":"object","description":"Adapter-specific configuration payload","additionalProperties":true},"totalItems":{"type":"integer","description":"Total number of items identified for import"},"successCount":{"type":"integer","description":"Number of items successfully imported"},"failedCount":{"type":"integer","description":"Number of items that failed to import"},"executionArn":{"type":"string","description":"Internal execution reference for the workflow processing this data ingress. Provided for diagnostic purposes."},"backgroundJobId":{"type":"string","description":"ID of the background job tracking this data ingress execution. Use it to retrieve the execution's error archive via GET /backgroundJobs/{jobId}/errors."},"output":{"type":"object","description":"Output data including errors and results","additionalProperties":true},"completedAt":{"type":"string","format":"date-time","description":"Timestamp when the execution completed"},"created":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated":{"type":"string","format":"date-time","description":"Last update timestamp"}}},"ErrorResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IErrorResponse","description":"Standard JSON:API error response returned when a request fails. Contains an `errors` array with one or more error objects (status, title, and optional detail).","type":"object","required":["errors"],"additionalProperties":false,"properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}}},"Error":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IError","description":"A single JSON:API error object. `status` is the HTTP status code as a string. `title` is a short, human-readable summary. `detail` provides optional context. `meta` may include structured conflict or authorization details.","type":"object","additionalProperties":false,"required":["status","title"],"properties":{"status":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","description":"A JSON Pointer to the request field that caused the error (e.g. `/data/attributes/title`).","properties":{"pointer":{"type":"string"}}},"meta":{"type":"object","additionalProperties":true,"properties":{"stack":{"type":"string","description":"Error stack trace. Only present in non-production environments."},"conflictItems":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"unauthorizedItems":{"type":"array","items":{"type":"string"}}}}}}}},"paths":{"/data-ingress":{"post":{"summary":"Create a new data ingress execution","description":"Creates a new data ingress execution to import records from an external source. The execution runs asynchronously in the background. The `sourceAdapterType` determines how data is fetched. The `importType` controls the import strategy: `api` paginates through an external API, while `file` reads items from an uploaded file. Poll the execution status using the returned ID.","operationId":"dataIngressCreateOne","tags":["DataIngress"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataIngressCreateOneRequest"}}}},"responses":{"201":{"description":"Data ingress execution created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataIngressCreateOneResponse"}}}},"400":{"description":"Bad Request - Invalid source adapter or payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Get a specific data ingress execution

> Returns a single data ingress execution by its ID, including full details such as payload, output, and progress counts.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"DataIngress","description":"This API provides a way to manage data ingress executions for importing records from external sources like Fabric V1. It supports multiple source adapters (API-based or CSV-based) and handles hierarchical record creation in the correct order. The system supports incremental imports and tracks progress with success/failure counts."}],"servers":[{"url":"{protocol}://{domain}/{basePath}","variables":{"protocol":{"enum":["http","https"],"default":"https"},"domain":{"default":"api.studio.fabricdata.com"},"basePath":{"default":"v1"}}}],"security":[{"jwt-apikey-authorizer":[]}],"components":{"securitySchemes":{"jwt-apikey-authorizer":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"DataIngressFindOneResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IDataIngressFindOneResponse","description":"Response for getting a single data ingress execution","type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":"object","required":["id","type","attributes"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Data ingress execution ID"},"type":{"type":"string","enum":["dataIngress"]},"attributes":{"$ref":"#/components/schemas/DataIngressAttributes"}}}}},"DataIngressAttributes":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IDataIngressAttributes","description":"Attributes for a data ingress execution","type":"object","additionalProperties":false,"required":["status","sourceAdapterType","totalItems","successCount","failedCount"],"properties":{"status":{"type":"string","enum":["IN_PROGRESS","COMPLETED","FAILED"],"description":"Current status of the ingress execution"},"name":{"type":"string","description":"Optional name for the data ingress execution, useful for identification and tracking purposes"},"sourceAdapterType":{"type":"string","description":"Identifier of the source adapter used (e.g., 'origin-studio-api', 'generic-file')"},"payload":{"type":"object","description":"Adapter-specific configuration payload","additionalProperties":true},"totalItems":{"type":"integer","description":"Total number of items identified for import"},"successCount":{"type":"integer","description":"Number of items successfully imported"},"failedCount":{"type":"integer","description":"Number of items that failed to import"},"executionArn":{"type":"string","description":"Internal execution reference for the workflow processing this data ingress. Provided for diagnostic purposes."},"backgroundJobId":{"type":"string","description":"ID of the background job tracking this data ingress execution. Use it to retrieve the execution's error archive via GET /backgroundJobs/{jobId}/errors."},"output":{"type":"object","description":"Output data including errors and results","additionalProperties":true},"completedAt":{"type":"string","format":"date-time","description":"Timestamp when the execution completed"},"created":{"type":"string","format":"date-time","description":"Creation timestamp"},"updated":{"type":"string","format":"date-time","description":"Last update timestamp"}}},"ErrorResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IErrorResponse","description":"Standard JSON:API error response returned when a request fails. Contains an `errors` array with one or more error objects (status, title, and optional detail).","type":"object","required":["errors"],"additionalProperties":false,"properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}}},"Error":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IError","description":"A single JSON:API error object. `status` is the HTTP status code as a string. `title` is a short, human-readable summary. `detail` provides optional context. `meta` may include structured conflict or authorization details.","type":"object","additionalProperties":false,"required":["status","title"],"properties":{"status":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","description":"A JSON Pointer to the request field that caused the error (e.g. `/data/attributes/title`).","properties":{"pointer":{"type":"string"}}},"meta":{"type":"object","additionalProperties":true,"properties":{"stack":{"type":"string","description":"Error stack trace. Only present in non-production environments."},"conflictItems":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"unauthorizedItems":{"type":"array","items":{"type":"string"}}}}}}}},"paths":{"/data-ingress/{dataIngressId}":{"get":{"summary":"Get a specific data ingress execution","description":"Returns a single data ingress execution by its ID, including full details such as payload, output, and progress counts.","operationId":"dataIngressFindOne","tags":["DataIngress"],"parameters":[{"name":"dataIngressId","in":"path","required":true,"description":"The data ingress execution ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Successful response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataIngressFindOneResponse"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Generate a presigned URL for file upload

> Generates a presigned S3 URL that can be used to upload a file for data ingress. The returned URL accepts HTTP PUT requests with the file content. The uploaded file can then be referenced when creating a file-based data ingress execution.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"DataIngress","description":"This API provides a way to manage data ingress executions for importing records from external sources like Fabric V1. It supports multiple source adapters (API-based or CSV-based) and handles hierarchical record creation in the correct order. The system supports incremental imports and tracks progress with success/failure counts."}],"servers":[{"url":"{protocol}://{domain}/{basePath}","variables":{"protocol":{"enum":["http","https"],"default":"https"},"domain":{"default":"api.studio.fabricdata.com"},"basePath":{"default":"v1"}}}],"security":[{"jwt-apikey-authorizer":[]}],"components":{"securitySchemes":{"jwt-apikey-authorizer":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"DataIngressGetUploadUrlRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IDataIngressGetUploadUrlRequest","description":"Request body for generating a presigned S3 upload URL for data ingress file imports","type":"object","required":["data"],"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/WriteRequestMeta"},"data":{"type":"object","required":["type","attributes"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["dataIngress"]},"attributes":{"type":"object","required":["fileName"],"additionalProperties":false,"properties":{"fileName":{"type":"string","description":"Name of the file to upload"},"contentType":{"type":"string","description":"MIME content type of the file (e.g., 'text/csv', 'application/json')","nullable":true}}}}}}},"WriteRequestMeta":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IWriteRequestMeta","description":"Optional audit metadata for a write request. `audit.source` is the issuing surface/channel (e.g. studio-web, mcp, api, system); `audit.reason` is a free-text justification. Both are optional and length-capped.","type":"object","additionalProperties":false,"properties":{"audit":{"type":"object","additionalProperties":false,"properties":{"source":{"type":"string","maxLength":64},"reason":{"type":"string","maxLength":256}}}}},"DataIngressGetUploadUrlResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IDataIngressGetUploadUrlResponse","description":"Response containing a presigned S3 URL for uploading a data ingress file","type":"object","required":["data"],"additionalProperties":false,"properties":{"data":{"type":"object","required":["type","attributes"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["dataIngressUploadUrl"]},"attributes":{"type":"object","required":["url","key","expiresInSeconds"],"additionalProperties":false,"properties":{"url":{"type":"string","description":"Presigned S3 URL for uploading the file via HTTP PUT"},"key":{"type":"string","description":"S3 object key where the file will be stored"},"expiresInSeconds":{"type":"integer","description":"Number of seconds until the presigned URL expires"}}}}}}},"ErrorResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IErrorResponse","description":"Standard JSON:API error response returned when a request fails. Contains an `errors` array with one or more error objects (status, title, and optional detail).","type":"object","required":["errors"],"additionalProperties":false,"properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}}},"Error":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IError","description":"A single JSON:API error object. `status` is the HTTP status code as a string. `title` is a short, human-readable summary. `detail` provides optional context. `meta` may include structured conflict or authorization details.","type":"object","additionalProperties":false,"required":["status","title"],"properties":{"status":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","description":"A JSON Pointer to the request field that caused the error (e.g. `/data/attributes/title`).","properties":{"pointer":{"type":"string"}}},"meta":{"type":"object","additionalProperties":true,"properties":{"stack":{"type":"string","description":"Error stack trace. Only present in non-production environments."},"conflictItems":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"unauthorizedItems":{"type":"array","items":{"type":"string"}}}}}}}},"paths":{"/data-ingress/upload-url":{"post":{"summary":"Generate a presigned URL for file upload","description":"Generates a presigned S3 URL that can be used to upload a file for data ingress. The returned URL accepts HTTP PUT requests with the file content. The uploaded file can then be referenced when creating a file-based data ingress execution.","operationId":"dataIngressGetUploadUrl","tags":["DataIngress"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataIngressGetUploadUrlRequest"}}}},"responses":{"200":{"description":"Presigned upload URL generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataIngressGetUploadUrlResponse"}}}},"400":{"description":"Bad Request - Invalid file name or content type","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Generate a presigned URL for file download

> Generates a presigned S3 URL that can be used to download a file from the data ingress bucket. The returned URL accepts HTTP GET requests.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"DataIngress","description":"This API provides a way to manage data ingress executions for importing records from external sources like Fabric V1. It supports multiple source adapters (API-based or CSV-based) and handles hierarchical record creation in the correct order. The system supports incremental imports and tracks progress with success/failure counts."}],"servers":[{"url":"{protocol}://{domain}/{basePath}","variables":{"protocol":{"enum":["http","https"],"default":"https"},"domain":{"default":"api.studio.fabricdata.com"},"basePath":{"default":"v1"}}}],"security":[{"jwt-apikey-authorizer":[]}],"components":{"securitySchemes":{"jwt-apikey-authorizer":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"DataIngressGetDownloadUrlRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IDataIngressGetDownloadUrlRequest","description":"Request body for generating a presigned S3 download URL for a data ingress file","type":"object","required":["data"],"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/WriteRequestMeta"},"data":{"type":"object","required":["type","attributes"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["dataIngress"]},"attributes":{"type":"object","required":["fileName"],"additionalProperties":false,"properties":{"fileName":{"type":"string","description":"Name of the file to download"}}}}}}},"WriteRequestMeta":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IWriteRequestMeta","description":"Optional audit metadata for a write request. `audit.source` is the issuing surface/channel (e.g. studio-web, mcp, api, system); `audit.reason` is a free-text justification. Both are optional and length-capped.","type":"object","additionalProperties":false,"properties":{"audit":{"type":"object","additionalProperties":false,"properties":{"source":{"type":"string","maxLength":64},"reason":{"type":"string","maxLength":256}}}}},"DataIngressGetDownloadUrlResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IDataIngressGetDownloadUrlResponse","description":"Response containing a presigned S3 URL for downloading a data ingress file","type":"object","required":["data"],"additionalProperties":false,"properties":{"data":{"type":"object","required":["type","attributes"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["dataIngressDownloadUrl"]},"attributes":{"type":"object","required":["url","key","expiresInSeconds"],"additionalProperties":false,"properties":{"url":{"type":"string","description":"Presigned S3 URL for downloading the file via HTTP GET"},"key":{"type":"string","description":"S3 object key of the file"},"expiresInSeconds":{"type":"integer","description":"Number of seconds until the presigned URL expires"}}}}}}},"ErrorResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IErrorResponse","description":"Standard JSON:API error response returned when a request fails. Contains an `errors` array with one or more error objects (status, title, and optional detail).","type":"object","required":["errors"],"additionalProperties":false,"properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}}},"Error":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IError","description":"A single JSON:API error object. `status` is the HTTP status code as a string. `title` is a short, human-readable summary. `detail` provides optional context. `meta` may include structured conflict or authorization details.","type":"object","additionalProperties":false,"required":["status","title"],"properties":{"status":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","description":"A JSON Pointer to the request field that caused the error (e.g. `/data/attributes/title`).","properties":{"pointer":{"type":"string"}}},"meta":{"type":"object","additionalProperties":true,"properties":{"stack":{"type":"string","description":"Error stack trace. Only present in non-production environments."},"conflictItems":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"unauthorizedItems":{"type":"array","items":{"type":"string"}}}}}}}},"paths":{"/data-ingress/download-url":{"post":{"summary":"Generate a presigned URL for file download","description":"Generates a presigned S3 URL that can be used to download a file from the data ingress bucket. The returned URL accepts HTTP GET requests.","operationId":"dataIngressGetDownloadUrl","tags":["DataIngress"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataIngressGetDownloadUrlRequest"}}}},"responses":{"200":{"description":"Presigned download URL generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataIngressGetDownloadUrlResponse"}}}},"400":{"description":"Bad Request - Invalid key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```

## Scan a file and return column names and unique categorical values

> Reads an uploaded file directly from the S3 ingress bucket and returns all column/key names plus the unique values found in requested categorical columns. Supports CSV, JSON, and JSONL formats. The file must have been previously uploaded via the upload-url endpoint. The S3 key is derived server-side from the tenant and file name — never supplied by the caller.

```json
{"openapi":"3.0.3","info":{"title":"Fabric API - Audit","version":"0.9.2264"},"tags":[{"name":"DataIngress","description":"This API provides a way to manage data ingress executions for importing records from external sources like Fabric V1. It supports multiple source adapters (API-based or CSV-based) and handles hierarchical record creation in the correct order. The system supports incremental imports and tracks progress with success/failure counts."}],"servers":[{"url":"{protocol}://{domain}/{basePath}","variables":{"protocol":{"enum":["http","https"],"default":"https"},"domain":{"default":"api.studio.fabricdata.com"},"basePath":{"default":"v1"}}}],"security":[{"jwt-apikey-authorizer":[]}],"components":{"securitySchemes":{"jwt-apikey-authorizer":{"type":"apiKey","name":"Authorization","in":"header"}},"schemas":{"DataIngressScanColumnsRequest":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IDataIngressScanColumnsRequest","description":"Request body for scanning an uploaded file to discover column names and unique categorical values","type":"object","required":["data"],"additionalProperties":false,"properties":{"meta":{"$ref":"#/components/schemas/WriteRequestMeta"},"data":{"type":"object","required":["type","attributes"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["dataIngress"]},"attributes":{"type":"object","required":["fileName"],"additionalProperties":false,"properties":{"fileName":{"type":"string","minLength":1,"description":"File name only, without any path prefix. Must match the file name used when obtaining the upload URL."}}}}}}},"WriteRequestMeta":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IWriteRequestMeta","description":"Optional audit metadata for a write request. `audit.source` is the issuing surface/channel (e.g. studio-web, mcp, api, system); `audit.reason` is a free-text justification. Both are optional and length-capped.","type":"object","additionalProperties":false,"properties":{"audit":{"type":"object","additionalProperties":false,"properties":{"source":{"type":"string","maxLength":64},"reason":{"type":"string","maxLength":256}}}}},"DataIngressScanColumnsResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IDataIngressScanColumnsResponse","description":"Response from scanning an uploaded file for column names and unique categorical values","type":"object","required":["data"],"additionalProperties":false,"properties":{"data":{"type":"object","required":["type","attributes"],"additionalProperties":false,"properties":{"type":{"type":"string","enum":["dataIngressScanColumns"]},"attributes":{"type":"object","required":["ok"],"additionalProperties":false,"properties":{"ok":{"type":"boolean","description":"Whether the scan succeeded"},"fileType":{"type":"string","enum":["csv","json","jsonl"],"description":"Format of the uploaded file"},"columns":{"type":"array","items":{"type":"string"},"description":"All column names found in the file header (CSV first row or JSON object keys)"},"uniqueValues":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}},"description":"Map of column name to sorted array of unique values found in that column"},"error":{"type":"string","description":"Error message when ok is false"}}}}}}},"ErrorResponse":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IErrorResponse","description":"Standard JSON:API error response returned when a request fails. Contains an `errors` array with one or more error objects (status, title, and optional detail).","type":"object","required":["errors"],"additionalProperties":false,"properties":{"errors":{"type":"array","items":{"$ref":"#/components/schemas/Error"}}}},"Error":{"$schema":"http://json-schema.org/draft-07/schema#","title":"IError","description":"A single JSON:API error object. `status` is the HTTP status code as a string. `title` is a short, human-readable summary. `detail` provides optional context. `meta` may include structured conflict or authorization details.","type":"object","additionalProperties":false,"required":["status","title"],"properties":{"status":{"type":"string"},"title":{"type":"string"},"detail":{"type":"string"},"source":{"type":"object","description":"A JSON Pointer to the request field that caused the error (e.g. `/data/attributes/title`).","properties":{"pointer":{"type":"string"}}},"meta":{"type":"object","additionalProperties":true,"properties":{"stack":{"type":"string","description":"Error stack trace. Only present in non-production environments."},"conflictItems":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}}}},"unauthorizedItems":{"type":"array","items":{"type":"string"}}}}}}}},"paths":{"/data-ingress/scan-columns":{"post":{"summary":"Scan a file and return column names and unique categorical values","description":"Reads an uploaded file directly from the S3 ingress bucket and returns all column/key names plus the unique values found in requested categorical columns. Supports CSV, JSON, and JSONL formats. The file must have been previously uploaded via the upload-url endpoint. The S3 key is derived server-side from the tenant and file name — never supplied by the caller.","operationId":"dataIngressScanColumns","tags":["DataIngress"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataIngressScanColumnsRequest"}}}},"responses":{"200":{"description":"File scanned successfully — column names and unique values returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataIngressScanColumnsResponse"}}}},"400":{"description":"Bad Request — requested column exceeds unique value cap or invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Not Found — file does not exist in the ingress bucket","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}}}}
```
