Creates a file asset from a file already uploaded to storage.
Promotes the referenced storage file to retained — so the temporary-upload sweep no longer removes it — then creates a file-backed asset using the file's stored display name and content type and kicks off ingestion. Use this after uploading via `POST /storage?temporary=true` to avoid sending the same bytes twice; the direct-upload path (`POST /assets:file`) stays available for one-shot uploads. When `vectorize` is true an `embeddingConfig` matching a model from `GET /assets/embeddingModels` is required.
Authorization
Bearer JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token.
In: header
Path Parameters
The tenant identifier
The storage file id and ingestion options.
Storage file id returned by POST /storage.
1 <= lengthOptional note describing what the asset contains and when an agent should use it. Injected into the step system prompt alongside the asset link.
Whether to vectorize the file for semantic search. Defaults to true.
Embedding model configuration. Required when CreateAssetFromFileRequest.Vectorize is true.
Optional reference to a tenant-level LLM config for embedding credentials. When set, the published revision's API key is used instead of CreateAssetFromFileRequest.EmbeddingConfig ApiKey.
uuidResponse Body
curl -X POST "https://api.fruxon.com/v1/tenants/string/assets:import" \ -H "Content-Type: application/json" \ -d '{ "fileId": "string" }'{
"asset": {
"id": "string",
"displayName": "string",
"description": "string",
"type": "string",
"vectorized": false,
"config": {
"sourceType": "string",
"parameters": {}
},
"integrationId": "string",
"assetLink": "string",
"createdAt": 0,
"modifiedAt": 0,
"autoUpdate": false,
"autoUpdateConfig": {
"strategy": "WEBHOOK",
"provider": "string",
"externalContext": "string",
"filter": "string",
"pollFrequency": "DAILY",
"pollDay": "string",
"pollDayOfMonth": 0,
"pollHour": "string",
"pollMinute": "string",
"timezone": "string"
},
"lastPolledAt": 0,
"embeddingLlmConfigId": "string",
"integrationConfigId": "string",
"supportsAutoUpdate": false,
"supportsWebhookRegistration": false,
"supportsPollSchedule": false,
"embedding": {
"provider": "string",
"model": "string",
"chunkSize": 0,
"chunkOverlap": 0
},
"budget": {
"tokenBudget": 0,
"monthlyTokenBudget": 0,
"dailyTokenBudget": 0,
"totalTokenCount": 0,
"lifetimeTokensUsed": 0,
"monthlyTokensUsed": 0,
"dailyTokensUsed": 0,
"costBudget": 0,
"monthlyCostBudget": 0,
"dailyCostBudget": 0,
"totalCost": 0,
"monthlyCostUsed": 0,
"dailyCostUsed": 0,
"pricePerMillionTokens": 0
},
"embeddingStatus": "PENDING",
"errorCategory": "CREDENTIALS"
},
"longOperation": {
"name": "string",
"status": "PENDING",
"resourceName": "string",
"resourceType": "string",
"startedAt": 0,
"completedAt": 0,
"error": "string",
"metadata": {}
},
"webhook": {
"id": "string",
"provider": "string",
"authMode": "API_KEY",
"status": "ACTIVE",
"expiresAt": 0,
"createdAt": 0,
"modifiedAt": 0,
"webhookUrl": "string",
"signingSecret": "string"
}
}{
"type": "string",
"title": "string",
"status": 0,
"detail": "string",
"instance": "string",
"property1": null,
"property2": null
}Gets a single asset by its ID, including token budget from the RAG service.
Returns the asset together with RAG-side fields (token budget, embedding model, ingestion-derived usage) when the asset is vectorized. Safe to poll after `POST /assets` or `POST /assets/{asset}:refresh` to observe state changes, though ingestion progress is better tracked via `/operations`.
Looks up an asset, and optionally one of its documents, by the ids the search index reports.
A search hit — from `POST /assets/{asset}:search`, or a `search_assets` result in a run's trace — names its asset and document by the search index's own ids, not the ones the other asset endpoints take. This translates them: it returns the asset's id and name, and the knowledge base the asset backs, if any. With `documentId` it also says where that document stands now. The index deletes a document and creates a new one whenever its source changes, so an id recorded earlier may be gone even though its source is still indexed. `CURRENT` means the id is still indexed and its text is unchanged. `REINDEXED` means one document from the same source replaced it; `current` is the replacement and its text may differ. `MISSING` means nothing in the asset can be told apart as its replacement. Pass whatever else the hit carries (`knowledgeDocumentId`, `sourceUrl`, `fileName`) so a replacement can be recognised. Read the document's text with `GET /assets/{asset}/documents/{document}/chunks`, using `assetId` and `document.current.id` from this response.