Runtime Artifacts API
Upload, inspect, download, export, and delete temporary account artifacts.Endpoints
Section titled “Endpoints”| Method | Path | Request | Response |
|---|---|---|---|
POST | /api/artifacts | Binary body + name query | RuntimeArtifactEnvelope |
GET | /api/artifacts | — | RuntimeArtifactList |
GET | /api/artifacts/{artifactId} | path parameter | RuntimeArtifactEnvelope |
GET | /api/artifacts/{artifactId}/content | path parameter | Binary content |
POST | /api/artifacts/{artifactId}/public-url | ArtifactExportRequest | ArtifactExportResult |
DELETE | /api/artifacts/{artifactId} | path parameter | { deleted: true } |
Upload an artifact
Section titled “Upload an artifact” POST
/api/artifacts?name={filename} Send the file bytes as the request body. The Content-Type header becomes the artifact MIME type.
curl "https://app.dexto.ai/api/artifacts?name=report.pdf" \ -H "Authorization: Bearer $DEXTO_API_KEY" \ -H "Content-Type: application/pdf" \ --data-binary @report.pdf{ "artifact": { "id": "0f4adac5-45bb-4fd6-9d5d-941263f2547b", "name": "report.pdf", "mimeType": "application/pdf", "size": 184203, "createdAt": "2026-09-13T10:00:00.000Z", "url": "/api/artifacts/0f4adac5-45bb-4fd6-9d5d-941263f2547b/content" }, "version": 1}| Input | HTTP type | Required | Description |
|---|---|---|---|
name | query | Yes | Original filename |
Content-Type | header | No | Defaults to binary content |
| request body | bytes | Yes | Non-empty file content |
List artifacts
Section titled “List artifacts” GET
/api/artifacts curl "https://app.dexto.ai/api/artifacts?limit=50" \ -H "Authorization: Bearer $DEXTO_API_KEY"The list includes uploaded artifacts and completed Media outputs in the same account.
| Response field | JSON type | Required | Description |
|---|---|---|---|
artifacts | array<RuntimeArtifact> | Yes | One bounded artifact page |
artifacts[].id | string | Yes | Artifact identifier |
artifacts[].name | string | Yes | Original filename |
artifacts[].mimeType | string | Yes | Media type |
artifacts[].size | number | Yes | Size in bytes |
artifacts[].createdAt | string | null | Yes | ISO-8601 creation timestamp |
artifacts[].url | string | Yes | Authenticated content path |
version | 1 | Yes | Response contract version |
nextCursor | string | null | Yes | Cursor for the next page |
Download content
Section titled “Download content” GET
/api/artifacts/{artifactId}/content curl https://app.dexto.ai/api/artifacts/$ARTIFACT_ID/content \ -H "Authorization: Bearer $DEXTO_API_KEY" \ --output report.pdfThe response body contains the original bytes and returns the stored MIME type in Content-Type.
Create an expiring public URL
Section titled “Create an expiring public URL” POST
/api/artifacts/{artifactId}/public-url curl https://app.dexto.ai/api/artifacts/$ARTIFACT_ID/public-url \ -H "Authorization: Bearer $DEXTO_API_KEY" \ -H "Content-Type: application/json" \ -d '{"purpose":"download","ttlSeconds":900}'{ "artifact": { "id": "0f4adac5-45bb-4fd6-9d5d-941263f2547b", "name": "report.pdf", "mimeType": "application/pdf", "size": 184203, "createdAt": "2026-09-13T10:00:00.000Z", "url": "/api/artifacts/0f4adac5-45bb-4fd6-9d5d-941263f2547b/content" }, "export": { "method": "GET", "purpose": "download", "expiresAt": "2026-09-13T10:15:00.000Z", "url": "https://app.dexto.ai/api/artifact-exports/eyJ..." }}| Request field | JSON type | Required | Description |
|---|---|---|---|
purpose | string | No | download, preview, provider input, or other |
ttlSeconds | number | No | Positive lifetime bounded by the service maximum |
Delete an artifact
Section titled “Delete an artifact” DELETE
/api/artifacts/{artifactId} curl -X DELETE https://app.dexto.ai/api/artifacts/$ARTIFACT_ID \ -H "Authorization: Bearer $DEXTO_API_KEY"