Amigo Intake API
The Intake API from Amigo — 20 operation(s) for intake.
The Intake API from Amigo — 20 operation(s) for intake.
openapi: 3.1.0
info:
title: Amigo Account Intake API
version: 0.1.0
servers:
- url: https://api.amigo.ai
- url: https://internal-api.amigo.ai
- url: https://api-eu-central-1.amigo.ai
- url: https://api-ap-southeast-2.amigo.ai
- url: https://api-ca-central-1.amigo.ai
security:
- Bearer-Authorization: []
Bearer-Authorization-Organization: []
Basic: []
tags:
- name: Intake
paths:
/v1/{workspace_id}/intake/files/external:
post:
tags:
- Intake
summary: Receive Intake File
operationId: receive_intake_file_v1__workspace_id__intake_files_external_post
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: x-amigo-intake-sha256
in: header
required: true
schema:
type: string
maxLength: 64
title: X-Amigo-Intake-Sha256
- name: x-amigo-intake-timestamp
in: header
required: true
schema:
type: string
maxLength: 20
title: X-Amigo-Intake-Timestamp
- name: x-amigo-intake-signature
in: header
required: true
schema:
type: string
maxLength: 512
title: X-Amigo-Intake-Signature
- name: x-amigo-intake-customer-slug
in: header
required: true
schema:
type: string
maxLength: 63
title: X-Amigo-Intake-Customer-Slug
- name: x-amigo-intake-filename
in: header
required: true
schema:
type: string
maxLength: 256
title: X-Amigo-Intake-Filename
- name: x-amigo-intake-content-type
in: header
required: false
schema:
type: string
maxLength: 128
default: application/octet-stream
title: X-Amigo-Intake-Content-Type
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/IntakeFileResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/files:
get:
tags:
- Intake
summary: List Intake Files
operationId: list_intake_files_v1__workspace_id__intake_files_get
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: limit
in: query
required: false
schema:
type: integer
maximum: 200
minimum: 1
default: 50
title: Limit
- name: continuation_token
in: query
required: false
schema:
type: integer
minimum: 0
default: 0
title: Continuation Token
- name: sort_by
in: query
required: false
schema:
type: string
maxLength: 64
default: -ingested_at
title: Sort By
- name: status
in: query
required: false
schema:
anyOf:
- $ref: '#/components/schemas/_FileStatus'
- type: 'null'
title: Status
- name: search
in: query
required: false
schema:
anyOf:
- type: string
maxLength: 200
- type: 'null'
title: Search
- name: include_withdrawn
in: query
required: false
schema:
type: boolean
default: false
title: Include Withdrawn
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedResponse_IntakeFileRow_'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
post:
tags:
- Intake
summary: Upload Intake File
operationId: upload_intake_file_v1__workspace_id__intake_files_post
requestBody:
required: true
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/Body_upload_intake_file_v1__workspace_id__intake_files_post'
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/IntakeFileRow'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
/v1/{workspace_id}/intake/files/{file_id}/download:
get:
tags:
- Intake
summary: Download Intake File
operationId: download_intake_file_v1__workspace_id__intake_files__file_id__download_get
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: file_id
in: path
required: true
schema:
type: string
format: uuid
title: File Id
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/datasets:
get:
tags:
- Intake
summary: List Intake Datasets
operationId: list_intake_datasets_v1__workspace_id__intake_datasets_get
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: limit
in: query
required: false
schema:
type: integer
maximum: 200
minimum: 1
default: 50
title: Limit
- name: continuation_token
in: query
required: false
schema:
type: integer
minimum: 0
default: 0
title: Continuation Token
- name: sort_by
in: query
required: false
schema:
type: string
maxLength: 64
default: name
title: Sort By
- name: search
in: query
required: false
schema:
anyOf:
- type: string
maxLength: 200
- type: 'null'
title: Search
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedResponse_DatasetRow_'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/sources:
post:
tags:
- Intake
summary: Register Intake Source
operationId: register_intake_source_v1__workspace_id__intake_sources_post
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterSourceRequest'
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/IntakeSourceRow'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
get:
tags:
- Intake
summary: List Intake Sources
operationId: list_intake_sources_v1__workspace_id__intake_sources_get
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: limit
in: query
required: false
schema:
type: integer
maximum: 200
minimum: 1
default: 50
title: Limit
- name: continuation_token
in: query
required: false
schema:
type: integer
minimum: 0
default: 0
title: Continuation Token
- name: sort_by
in: query
required: false
schema:
type: string
maxLength: 64
default: -created_ts
title: Sort By
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedResponse_IntakeSourceRow_'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/sources/{source_id}/sync:
post:
tags:
- Intake
summary: Sync Intake Source
operationId: sync_intake_source_v1__workspace_id__intake_sources__source_id__sync_post
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: source_id
in: path
required: true
schema:
type: string
format: uuid
title: Source Id
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/SourceSyncResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/schema/register:
post:
tags:
- Intake
summary: Register Intake Schema
operationId: register_intake_schema_v1__workspace_id__intake_schema_register_post
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RegisterSchemaRequest'
required: true
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetRow'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
/v1/{workspace_id}/intake/batches:
get:
tags:
- Intake
summary: List Intake Batches
operationId: list_intake_batches_v1__workspace_id__intake_batches_get
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: limit
in: query
required: false
schema:
type: integer
maximum: 200
minimum: 1
default: 50
title: Limit
- name: continuation_token
in: query
required: false
schema:
type: integer
minimum: 0
default: 0
title: Continuation Token
- name: sort_by
in: query
required: false
schema:
type: string
maxLength: 64
default: -created_ts
title: Sort By
- name: source_id
in: query
required: false
schema:
anyOf:
- type: string
format: uuid
- type: 'null'
title: Source Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedResponse_BatchRow_'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/batches/{batch_id}:
get:
tags:
- Intake
summary: Get Intake Batch
operationId: get_intake_batch_v1__workspace_id__intake_batches__batch_id__get
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: batch_id
in: path
required: true
schema:
type: string
format: uuid
title: Batch Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/BatchDetail'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/batches/{batch_id}/processing-manifest:
get:
tags:
- Intake
summary: Get Batch Processing Manifest
description: 'The per-file params the batch-extract job needs to process every still-
``received`` file in one run. Same workspace-scoped auth as the write-back
(the job holds the batch''s agent-session token). Documents only — snapshot/CSV
batches process in version order via the chained per-file path, not here.'
operationId: get_batch_processing_manifest_v1__workspace_id__intake_batches__batch_id__processing_manifest_get
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: batch_id
in: path
required: true
schema:
type: string
format: uuid
title: Batch Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/BatchProcessingManifest'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/batches/{batch_id}/process:
post:
tags:
- Intake
summary: Process Intake Batch
operationId: process_intake_batch_v1__workspace_id__intake_batches__batch_id__process_post
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: batch_id
in: path
required: true
schema:
type: string
format: uuid
title: Batch Id
responses:
'202':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/BatchRow'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/materialize:
post:
tags:
- Intake
summary: Materialize Intake
description: 'Trigger the intake → customer-data materializer for this workspace.
Fires the materializer Databricks job (run-now); it rescans the workspace''s
curated intake files and (re)materializes each snapshot dataset into
``customer_data_<env>.<workspace_id>.<dataset>``. Every write is an idempotent
keyed MERGE / full overwrite, so a re-click is safe. Optionally scope to one
``dataset``; omit for all curated snapshot datasets. Returns ``202`` with the
job ``run_id`` (``null`` when the job is not configured in this environment).
Same auth gate as ``POST /batches/{batch_id}/process``.'
operationId: materialize_intake_v1__workspace_id__intake_materialize_post
requestBody:
content:
application/json:
schema:
anyOf:
- $ref: '#/components/schemas/MaterializeRequest'
- type: 'null'
title: Body
responses:
'202':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/MaterializeResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
/v1/{workspace_id}/intake/datasets/{dataset}/update:
post:
tags:
- Intake
summary: Update Intake Dataset
description: 'Run the customer-facing dataset update flow.
This is the one-click orchestration path for the console: check mapped Drive
folders, prepare any newly landed files, and publish immediately when no
preparation is needed. If preparation is async, the run remains durable and
is advanced by file write-backs or by refresh.'
operationId: update_intake_dataset_v1__workspace_id__intake_datasets__dataset__update_post
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: dataset
in: path
required: true
schema:
type: string
minLength: 2
maxLength: 63
pattern: ^[a-z0-9][a-z0-9_-]*[a-z0-9]$
title: Dataset
responses:
'202':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetUpdateRunResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/update-runs/{run_id}:
get:
tags:
- Intake
summary: Get Intake Update Run
operationId: get_intake_update_run_v1__workspace_id__intake_update_runs__run_id__get
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: run_id
in: path
required: true
schema:
type: string
format: uuid
title: Run Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/DatasetUpdateRunResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/materializations:
get:
tags:
- Intake
summary: List Intake Materializations
description: 'Per-dataset materialization status for the workspace''s Destinations tab.
Lists each registered dataset alongside its customer-data destination table''s
status — ``materialized`` (with row count + last-write time) or
``not_materialized`` (no table yet). The dataset list + pagination mirror
``GET /datasets`` (the contracts registry); the destination status is read
from the ``customer_data_<env>`` catalog via the SQL warehouse. Member read.'
operationId: list_intake_materializations_v1__workspace_id__intake_materializations_get
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: limit
in: query
required: false
schema:
type: integer
maximum: 200
minimum: 1
default: 50
title: Limit
- name: continuation_token
in: query
required: false
schema:
type: integer
minimum: 0
default: 0
title: Continuation Token
- name: sort_by
in: query
required: false
schema:
type: string
maxLength: 64
default: name
title: Sort By
- name: search
in: query
required: false
schema:
anyOf:
- type: string
maxLength: 200
- type: 'null'
title: Search
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedResponse_MaterializationRow_'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/files/{file_id}/status:
post:
tags:
- Intake
summary: Write Back Intake File Status
description: 'Advance a file''s status from the async CDC/extraction job (P4).
The job authenticates with the workspace''s API key (Bearer) — the same
Databricks→platform-api path launch_dpc uses — so RLS scopes the update to
that workspace. Moves the row to its terminal verdict and records the
curated/cdc paths. For a batch-sourced file, advances its batch (chain the
next snapshot version + roll up) once the verdict is terminal.'
operationId: write_back_intake_file_status_v1__workspace_id__intake_files__file_id__status_post
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: file_id
in: path
required: true
schema:
type: string
format: uuid
title: File Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/StatusWriteBackRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/IntakeFileRow'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/links:
post:
tags:
- Intake
summary: Generate upload link
description: Create a shareable upload link for a customer.
operationId: create-intake-link
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateLinkRequest'
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/IntakeLinkResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
get:
tags:
- Intake
summary: List upload links
operationId: list-intake-links
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: include_expired
in: query
required: false
schema:
type: boolean
default: false
title: Include Expired
- name: limit
in: query
required: false
schema:
type: integer
maximum: 500
minimum: 1
default: 100
title: Limit
- name: offset
in: query
required: false
schema:
type: integer
minimum: 0
default: 0
title: Offset
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/IntakeLinkResponse'
title: Response List-Intake-Links
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/links/{link_id}:
delete:
tags:
- Intake
summary: Revoke upload link
operationId: revoke-intake-link
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: link_id
in: path
required: true
schema:
type: string
format: uuid
title: Link Id
responses:
'204':
description: Successful Response
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/links/{link_id}/uploads:
get:
tags:
- Intake
summary: List uploads for a link
operationId: list-intake-link-uploads
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: link_id
in: path
required: true
schema:
type: string
format: uuid
title: Link Id
- name: limit
in: query
required: false
schema:
type: integer
maximum: 500
minimum: 1
default: 200
title: Limit
- name: offset
in: query
required: false
schema:
type: integer
minimum: 0
default: 0
title: Offset
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/IntakeUploadResponse'
title: Response List-Intake-Link-Uploads
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/{workspace_id}/intake/links/{link_id}/uploads/{upload_id}/download:
get:
tags:
- Intake
summary: Download an uploaded file
description: Proxy the raw file bytes from the UC Volume back to the caller.
operationId: download-intake-upload
parameters:
- name: workspace_id
in: path
required: true
schema:
type: string
format: uuid
title: Workspace Id
- name: link_id
in: path
required: true
schema:
type: string
format: uuid
title: Link Id
- name: upload_id
in: path
required: true
schema:
type: string
format: uuid
title: Upload Id
responses:
'200':
description: 'File bytes with Content-Disposition: attachment'
content:
application/octet-stream:
schema:
type: string
format: binary
'404':
description: Link, upload, or file not found
'502':
description: UC Volume storage backend unavailable
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
components:
schemas:
DriveFolderMapping:
properties:
folder_id:
type: string
maxLength: 256
minLength: 1
pattern: ^[A-Za-z0-9_-]+$
title: Folder Id
dataset:
type: string
maxLength: 63
minLength: 2
pattern: ^[a-z0-9][a-z0-9_-]*[a-z0-9]$
title: Dataset
type: object
required:
- folder_id
- dataset
title: DriveFolderMapping
description: 'One Google Drive folder ↔ one intake dataset.
``folder_id`` is the Drive folder id (the identity — never the folder name,
which can be renamed/moved). One folder maps to exactly one dataset.'
MaterializeRequest:
properties:
dataset:
anyOf:
- $ref: '#/components/schemas/_DatasetSlug'
- type: 'null'
type: object
title: MaterializeRequest
DocumentProcessingSpec:
properties:
retain_source:
type: boolean
title: Retain Source
default: true
extraction_mode:
type: string
enum:
- text_extract
- OCR
- hybrid
title: Extraction Mode
default: text_extract
type: object
title: DocumentProcessingSpec
description: 'Processing config for a document dataset (``ingestion_mode=document``).
Documents have no schema/primary-key/CDC; this is what the contract carries
instead (docs/plans/intake_file_processing_pipeline.md §5.9). Page-split /
output-metadata rules are stored in the same jsonb and may be added later
without a migration.'
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
input:
title: Input
ctx:
type: object
title: Context
type: object
required:
- loc
- msg
- type
title: ValidationError
IntakeLinkResponse:
properties:
id:
type: string
format: uuid
title: Id
workspace_id:
type: string
format: uuid
title: Workspace Id
customer_slug:
$ref: '#/components/schemas/SlugString'
display_name:
anyOf:
- $ref: '#/components/schemas/DescriptionString'
- type: 'null'
upload_url:
type: string
maxLength: 512
title: Upload Url
link_token:
type: string
maxLength: 128
minLength: 32
# --- truncated at 32 KB (58 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/amigo/refs/heads/main/openapi/amigo-intake-api-openapi.yml