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 <= lengthWhether to vectorize the file for semantic search. Defaults to true.
Optional reference to a tenant-level LLM config for embedding credentials. When set, the published revision's API key is used instead of Fruxon.Server.Controllers.Assets.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",
"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": "_1",
"pollHour": "string",
"pollMinute": "string",
"timezone": "string"
},
"lastPolledAt": 0,
"embeddingLlmConfigId": "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,
"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`.
Retrieves OAuth credentials obtained from a completed asset OAuth flow
Exchanges the short-lived credential key produced by the OAuth callback for the access/refresh token pair, then invalidates the key. Allowed anonymously because the OAuth success page runs before the user is reattached to a session; the key itself binds the response to the originating flow. Pass the returned tokens as the `auth` block when creating the asset via `POST /assets`. Calling this endpoint a second time with the same key returns 400.