atomfiles/developers
Developer docsAtom Files ↗
ATOM FILES / DEVELOPER DOCUMENTATION

Atom Files API

Work with file metadata and bytes across user-controlled devices and connected storage.

API access is not yet availableThis reference describes the intended /v1 interface. Existing Atom services use different internal contracts; no public credentials are issued yet.
Audience: developersReference version: 0.14Reviewed: 20 Oct 2026
START WITH A TASK

What do you want your app to do?

Choose a workflow to see the request and response shape. Examples use sample IDs.

RESOURCE MAP

Core resources, one mental model

FolderA stable container ID; the place an integration is granted access.
FileA stable identity and metadata record, independent of byte location.
VersionAn immutable content revision; reads can pin one version.
ArtifactA version-pinned derived output such as OCR, a transcript, thumbnail, summary, or structured table.
EmbeddingA model-specific vector for an authorized file segment, page, or time range.
UploadA short-lived transfer plan for sending a new version’s bytes.
OperationA durable record of an asynchronous action and its destination receipt.
ChangeAn authorized metadata update, read from a resumable cursor.
WebhookA signed prompt to fetch changes; not the source of truth.
UsageMeasured activity, grouped by route and meter; not itself an invoice.
BillingAccount-level charges, credits, and invoices with restricted access.
IMPLEMENTATION STATUS

What can an integration use today?

The public API is not available yet. Atom has internal components, but third-party authentication, destination-bound writes, and a documented public contract are not shipped.

Existing internal building blocks

Authenticated Atom services; a B2-backed Finder drive with upload sessions; Mac-side staging and recovery; a local operation outbox; peer-to-peer file reads; internal semantic-search tables.

Needed for external developers

Folder-scoped third-party authorization; Mac inbound write receiver; durable destination receipts; a unified operation ledger; change feed; version-pinned processing and artifact access; stable endpoints and SDKs.

Based on a workspace code review, not a live production audit. Backend and synchronization guarantees must be verified before this public contract is released.

01 / THE MODEL

One namespace; multiple byte locations

Integrations address an Atom folder and file. They do not choose a Google Drive API, a Backblaze bucket, or a Mac filesystem path. Atom keeps that routing behind the API boundary.

CLIENTYour app or agentRequests a file operation
→
CONTROL PLANEAtom APIAuthorization · operation status · metadata
→
BYTE DESTINATIONWhere the file belongsMac · connected provider · managed storage
Important distinction

“Request accepted” and “file saved at its destination” are separate facts. A destination may be offline or temporarily unavailable.

02 / API REFERENCE

Endpoints

Choose an endpoint to open its own reference page and shareable URL. File delivery, usage metering, and billing are separate concerns. Atom’s provider-specific queues, credentials, and internal routing stay private.

GET/v1/rootsList this caller’s accessible starting folders, not the whole tree.
GET/v1/folders/{folder_id}Read a folder’s metadata and revision.
GET/v1/folders/{folder_id}/childrenList one folder’s immediate files and subfolders; use the same sort and cursor contract as roots.
GET/v1/searchSearch authorized file metadata; results may lag indexing.
GET/v1/files/{file_id}Read metadata, current version, and availability.
GET/v1/files/{file_id}/contentRead a pinned version or range of file bytes.
GET/v1/files/{file_id}/processingDetect file type and inspect status for each applicable output.
PATCH/v1/files/{file_id}/processing-policyEnable or disable processors with an expected policy revision.
POST/v1/files/{file_id}/processing-runsStart or rerun selected processors for one file version.
GET/v1/processing-runs/{run_id}Track a run and its per-output progress.
POST/v1/processing-runs/{run_id}/cancelStop remaining work without rolling back published outputs.
GET/v1/files/{file_id}/artifactsList thumbnails, OCR, transcripts, summaries, and other derived outputs.
GET/v1/artifacts/{artifact_id}/contentRead a derived output with its own media type.
DELETE/v1/artifacts/{artifact_id}Purge an output and its dependent search/vector projection.
GET/v1/files/{file_id}/embeddingsRead model-specific vectors for authorized file segments.
POST/v1/search/semanticSearch indexed content within the integration’s grant.
POST/v1/foldersCreate a child folder with a retry-safe operation.
PATCH/v1/items/{item_id}Rename or move using an expected revision.
POST/v1/items/{item_id}/trashMove an item to recoverable trash.
POST/v1/items/{item_id}/restoreRestore an item to an authorized folder.
POST/v1/uploadsAccept a new file or version intent; return an operation and transfer plan.
POST/v1/uploads/{operation_id}/transfer-planRefresh an expired transfer plan without duplicating the file.
POST/v1/uploads/{operation_id}/cancelCancel an upload before its destination commits.
POST/v1/uploads/{operation_id}/finishSender reports byte transfer complete; destination verification still follows.
GET/v1/operations/{operation_id}Read authoritative progress, failure, and receipt.
GET/v1/files/{file_id}/versionsInspect versions and resolve conflicts.
GET/v1/changes?cursor=…Resume metadata changes without relying solely on webhooks.
GET/v1/changes/snapshotBootstrap a consistent authorized snapshot and resume cursor.
POST/v1/webhooksSubscribe an HTTPS endpoint to selected event hints.
GET/v1/webhooksList subscriptions and verification states.
DELETE/v1/webhooks/{webhook_id}Stop future deliveries.
POST/v1/webhooks/{webhook_id}/rotate-secretRotate a signing secret safely.
GET/v1/grantsInspect authorized folder grants.
DELETE/v1/grants/{grant_id}Revoke an integration’s folder grant.
GET/v1/usage/summarySummarize observed activity and billable units for a time window.
GET/v1/usage/eventsPage through auditable metering events without exposing network addresses.
GET/v1/billing/summaryShow the account’s current bill estimate, credits, and finalized total.
GET/v1/billing/invoicesList finalized invoices for billing administrators.

These paths are not yet served by a public Atom API. The existing Atom Drive API has different routes.

03 / MACHINE-READABLE REFERENCE

OpenAPI

The OpenAPI 3.1 JSON covers all 38 operations, request fields, response examples, status codes, and scoped bearer assumptions. Its server uses a non-working .invalid host until public API access is available.

Still needs proof

Before freezing this contract, implement and test a resumable upload data plane, consistent snapshot-to-change handoff, explicit user consent for grants, and safe one-time webhook-secret handoff. The existing internal routes do not prove these public API semantics.

GUIDE / FILE INTELLIGENCE

Know which outputs are ready

Atom identifies a file’s media type from content and metadata, then applies only enabled processors that fit that version. Ask for processing status before requesting an artifact. There is no single “file processing complete” flag: OCR may be ready while a summary is still running.

PhotoThumbnail, description, OCR, visual embedding; face detection is opt-in and does not imply identity recognition.
Audio & videoTranscript, SRT or WebVTT captions, time-coded summaries and embeddings, preview images.
PDF & documentsPage thumbnails and OCR, extracted images, page and document summaries, structured text.
SpreadsheetsSheet/table structure and optional Parquet export; formulas and formatting are not silently replaced by Parquet.

Each output is tied to the immutable version_id and records its processor or model. States are not_applicable, disabled, queued, running, partial, ready, failed, or stale. New bytes create new processing state; old outputs must never appear current. Processing may occur asynchronously, and available outputs depend on policy, cost, and source availability.

Walk through one processing run

Read status and policy revision → optionally update enabled outputs → start a version-pinned run with an idempotency key → check its progress and list outputs. To stop unfinished work, request cancellation. To remove an already-published derivative, delete that artifact separately. Neither action deletes or rewrites the original file.

A policy update uses expected_policy_revision to avoid lost edits. Cancellation may race with completion and keeps already-published outputs. Artifact deletion denies new reads and search results immediately, then confirms byte/vector purge through an operation; it suppresses automatic regeneration for that source version until an explicitly authorized rerun.

Same file permissions, finer-grained vector access

Artifacts inherit the source file’s grant and are checked again when read. Raw vectors require an additional embeddings.read capability. Search results are authorization-filtered and report index freshness. Revocation and trashing must remove affected results, including cached projections, on the next synchronization.

These processing and search routes describe the intended public scope; they are not available as a live API today. Processor catalog, output formats, retention, cost policy, and model version guarantees require implementation decisions.

API REFERENCE / FOLDERS

GET /v1/folders/{folder_id}/children

List one visible folder’s immediate files and subfolders. Like GET /v1/roots, this accepts limit, sort, and an opaque cursor, and returns items plus next_cursor. Default sorting is name_asc; modified_desc is also available. Each page is a live view, not a frozen inventory.

Example response
200 OK
{
  "items": [
    { "id": "file_789", "type": "file", "name": "invoice.pdf",
      "modified_at": "2026-10-20T18:00:00Z", "version_id": "ver_012", "availability": "available" },
    { "id": "folder_124", "type": "folder", "name": "Receipts", "modified_at": "2026-10-19T18:00:00Z" }
  ],
  "next_cursor": null
}
API REFERENCE / FILES

GET /v1/files/{file_id}

Read stable file identity, current version, size, media type, and availability. Provider credentials and Mac filesystem paths stay private.

Example response
200 OK
{
  "id": "file_789", "parent_id": "folder_123",
  "name": "invoice.pdf", "media_type": "application/pdf",
  "size_bytes": 4194304, "current_version_id": "ver_012",
  "availability": "available"
}
API REFERENCE / FILE DELIVERY

GET /v1/files/{file_id}/content

This is the streaming API: read only the bytes needed for playback, preview, seek, or resume. Pin version_id so the content cannot change halfway through a stream. A normal request streams a full version; Range requests a slice. The API may use a Mac, peer, or permitted cloud copy internally, but this endpoint does not guarantee a direct P2P route.

Example range request and response
GET /v1/files/file_789/content?version_id=ver_012
Range: bytes=0-65535

206 Partial Content
Accept-Ranges: bytes
Content-Range: bytes 0-65535/4194304
Content-Type: application/pdf
ETag: "ver_012"

<binary bytes>
Seek and resumeUse Range and a version-pinned ETag; If-Range can prevent combining bytes from different versions.
AvailabilityIf the source is offline and no authorized copy exists, return an explicit unavailable result rather than inventing a cloud fallback.
TransportExpose delivery route and metered bytes in diagnostics or usage records, not provider credentials or device addresses.

HTTP 206, 416, range validation, cache policy, and media-player behavior require contract and integration tests before release. A separate stream-session endpoint is unnecessary unless native or P2P transport negotiation proves it useful.

API REFERENCE / UPLOADS

POST /v1/uploads

Create an upload intent for a folder. Requires a future folder-scoped write credential. Returns an operation and a destination-specific transfer plan; it does not mean file bytes have been committed.

An app declares the destination, size, content hash, and retry identity. Atom decides whether the bytes can go directly to the destination or need an explicitly permitted staging route.

1 · Request an upload
POST /v1/uploads
Authorization: Bearer <scoped token>
Idempotency-Key: invoice-8427
Content-Type: application/json

{
  "parent_id": "folder_123",
  "name": "invoice.pdf",
  "size_bytes": 4194304,
  "sha256": "<whole-file digest>",
  "replace_version_id": null
}
2 · Receive a transfer plan
202 Accepted
{
  "operation_id": "op_456",
  "file_id": "file_789",
  "status": "ready_to_transfer",
  "transfer": {
    "method": "direct",
    "capability": "<short-lived, destination-scoped capability>"
  }
}

The transfer plan would be short-lived and destination-scoped. A client would refresh an expired plan using the same operation ID; it must not create another file to resume. A future SDK could hide transport details.

Mac offline?

A local-only folder returns waiting_for_device. The sender retains the bytes. Temporary cloud staging is a separate, owner-approved folder policy—not a silent fallback.

API REFERENCE / UPLOADS

POST /v1/uploads/{operation_id}/finish

The sender says it has finished the assigned transfer. Atom moves the operation into destination verification; this call alone never asserts that the file is available.

Path parameteroperation_idThe ID returned by POST /v1/uploads.
Retry behaviorRepeating finish for the same operation must be safe. Inspect operation status after an ambiguous response.
Success meaningTransfer report accepted; wait for a destination receipt before treating the file as available.

Request shape, HTTP status codes, and receipt format remain unspecified.

API REFERENCE / OPERATIONS

GET /v1/operations/{operation_id}

Read the durable state of an accepted file operation. This is the recovery point after a timeout, lost acknowledgement, or offline destination.

Path parameteroperation_idStable operation identifier.
Expected fieldsKind, state, resource ID, last update, failure details if any, and a completion receipt when available.
Terminal statesavailable for a committed file, completed for policy or purge work, or failed, cancelled, or conflict.

Polling interval, retention, and exact response schema remain unspecified.

API REFERENCE / FILES

GET /v1/files/{file_id}/versions

List versions visible to the caller so an app can present history or resolve an expected-version conflict without silently overwriting another edit.

Path parameterfile_idStable Atom file identifier.
AuthorizationResults are limited to versions the caller may read; knowing an ID is not access.
PaginationRequired for a public release; cursor semantics have not been specified.
API REFERENCE / CHANGES

GET /v1/changes

Resume authorized metadata changes from a cursor. Webhooks provide prompt notification; the feed is the recovery path if an event is missed.

Query parametercursorAn opaque checkpoint returned by an earlier page.
Access changesPermission removal must stop future access and remove the applicable local projection.
Replay gapAn expired cursor must signal that a fresh authorized snapshot is needed, not silently skip changes.

Cursor retention, ordering, event schema, and snapshot bootstrap are not specified yet.

API REFERENCE / WEBHOOKS

POST /v1/webhooks

Subscribe a verified HTTPS receiver to events within the caller’s authorized grant. Deliveries are signed and may be repeated, so consumers deduplicate by event ID. A webhook is a prompt to read the change feed, not a replacement for it.

Example request
POST /v1/webhooks
Authorization: Bearer <scoped token>
Content-Type: application/json

{
  "url": "https://example.app/atom/events",
  "event_types": ["file.available", "file.version_created",
                  "operation.failed", "access.revoked"]
}
Example response
201 Created
{
  "id": "wh_123",
  "status": "pending_verification"
}

Endpoint verification, safe one-time signing-secret delivery, retry window, secret rotation, and list/delete management are required before this design can ship.

API REFERENCE / USAGE

GET /v1/usage/summary

See observed activity for a bounded time window. Separate the route that delivered bytes from the units that may be billed. An integration can see its own usage; account-wide totals require an owner or billing-admin grant.

Example summary
GET /v1/usage/summary?from=2026-10-01&to=2026-11-01

200 OK
{
  "period": { "from": "2026-10-01", "to": "2026-11-01" },
  "status": "estimated",
  "observed_through": "2026-10-20T18:00:00Z",
  "transfer_bytes": {
    "direct_peer": 104857600,
    "relay": 16777216,
    "cloud_egress": 0
  },
  "api_requests": 42,
  "billable": [
    { "meter": "relay_egress_bytes", "quantity": 16777216, "unit": "byte" }
  ]
}

Logical file bytes and physical transfer bytes are different. Internal retries, duplicate events, and a relay hop must not silently create duplicate billable usage. Meter definitions and prices must be published before charging customers.

API REFERENCE / USAGE

GET /v1/usage/events

Page through metering records for reconciliation. Each event has a stable ID, timestamp, meter, quantity, and related transfer or operation ID. Do not expose private peer addresses, Mac paths, or provider credentials.

Filtersfrom, to, meter, and opaque cursor.
CorrectionsRetain auditability if an event is adjusted; do not rewrite history invisibly.
FreshnessReturn observed_through because aggregates may lag activity.

Retention, exact event schema, and meter IDs remain design decisions.

API REFERENCE / BILLING

GET /v1/billing/summary

Show the account owner what is owed, what is merely estimated, and how usage maps to charges. Billing scope is separate from file-read scope: access to a folder must not reveal an account’s invoices.

Current periodEstimated charges, credits, currency, period, and last aggregation time.
FinalizedSettled invoice totals are distinct from in-progress estimates.
Payment controlsOpen a hosted billing portal; do not put card details into the file API.

No price, free allowance, or charging rule is committed by this reference.

API REFERENCE / BILLING

GET /v1/billing/invoices

List finalized invoices for an account owner or billing administrator. Each result should include its period, currency, total, status, and a short-lived hosted invoice URL. Support cursor pagination without exposing another customer’s billing data.

Invoice creation and payment-method changes belong to the billing system, not this read-only API surface.

GUIDE / AUTHORIZATION

Grant a folder and only the actions needed

A user would authorize an integration for selected folders and capabilities. Example grants are files.metadata.read, files.content.read, files.analysis.read, files.analysis.manage, embeddings.read, files.write, events.read, and usage.read. Managing analysis is separate from reading its results; sensitive processing still needs explicit owner consent. Billing reads require a separate account-level administrator grant. A token must not confer access to the whole Mac, underlying provider credentials, or unrelated folders.

Permission changes are immediate at the API boundary

If a grant is revoked, subsequent metadata and byte reads must fail even if an integration still knows a file ID. The change feed must signal removal so an offline client can discard the affected local projection on reconnect.

These scope names and the consent flow are not yet available as issued credentials.

04 / OPERATION LIFECYCLE

Accepted is not available

1acceptedIntent, authorization, and retry identity durably recorded.
2waiting_for_device optionalDestination cannot receive new bytes yet.
3transferringBytes moving over Atom’s selected transport.
4verifyingDestination checks size, digest, and version conditions.
5availableDestination committed the file and returned a durable receipt.

Non-file operations such as policy changes and artifact purges finish as completed with a completion receipt. Operations can instead end as failed, cancelled, or conflict. A sender’s finish call does not by itself produce available.

05 / CORRECTNESS

Retry without duplicating or overwriting

01

One operation ID

Repeat the same idempotency key to retrieve the same operation. Reusing it with different input is a conflict.

02

Expected version

Replace a file only against the version you read. An intervening edit yields a conflict, not last-write-wins.

03

Destination receipt

The Mac or provider confirms committed bytes. Queue delivery and optimistic UI are not proof of completion.

04

Recovery by status

After a lost response, ask for operation status. Never blindly issue another create, rename, or upload.

06 / CHANGE DELIVERY

Events are hints. The change feed is recoverable.

Subscribe to file.available, operation.failed, file.version_created, artifact.ready, artifact.purged, processing.failed, processing.cancelled, and access.revoked webhooks for fast reactions. Use the cursor-based change feed to recover missed notifications. Authorization is checked again when an app reads the file or a derived output.

{
  "id": "evt_234",
  "type": "file.available",
  "operation_id": "op_456",
  "file_id": "file_789",
  "version_id": "ver_012",
  "occurred_at": "2026-10-20T18:00:00Z"
}

The event names and shape above are examples. Webhook signatures, replay retention, and cursor expiry are not specified yet.

07 / ERROR HANDLING

Handle outcomes explicitly

A caller needs to distinguish a rejected request from an accepted operation that later fails. The error envelope will be finalized alongside the implementation.

unauthorizedMissing or expired credential. Re-authenticate; do not retry unchanged.
forbiddenCredential lacks access to the destination folder.
version_conflictThe expected file version changed. Fetch the current version and ask the user to resolve it.
waiting_for_deviceOperation accepted, but the destination is offline. Poll the same operation ID.
integrity_failedDestination rejected bytes or digest. Retain source bytes; inspect status before retrying.
Lost response after a write?

Retry with the same idempotency key, then inspect the returned operation. A timeout is not proof that the write did not commit.

08 / DELIVERY ROADMAP

Build the smallest trustworthy API first

This sequence is not a launch date. Each stage depends on the correctness checks in the stage before it.

  1. 01 · Contract

    Make the rules executable

    Define folder grants, version identity, error bodies, status codes, idempotency, and a versioned OpenAPI contract. Prove authorization and retry behavior against running services.

  2. 02 · Read

    Let apps find and open files

    Ship scoped folder listing, metadata search, version-pinned reads, and byte ranges. Measure startup, seek, and fallback behavior without exposing device paths or provider credentials.

  3. 03 · Write

    Make saves recoverable

    Add upload intents, destination-bound byte transfer, durable operation IDs, and destination receipts. Test offline devices, lost acknowledgements, concurrent edits, and checksum failure.

  4. 04 · Understand

    Expose useful derived content

    Report per-output progress, version-pinned artifacts, embeddings, and authorized semantic results. Prove policy updates, reruns, cancellation, purging, stale-version handling, partial failures, revocation, and processor cost controls.

  5. 05 · React

    Keep integrations current

    Provide a replayable change feed and signed webhooks, including artifact readiness. Verify catch-up after downtime and immediate denial after a grant is revoked.

  6. 06 · Operate

    Open to external developers

    Publish onboarding, measured usage, billing visibility where needed, and generated language examples. Expand SDK support only after the HTTP contract stabilizes.

09 / BEFORE PUBLIC RELEASE

Release requirements

  1. Implement and test folder-scoped listing, authorized ranged reads, and destination-bound upload receipts.
  2. Prove retries, offline recovery, checksum failure, revocation, and concurrent replacement.
  3. Prove content-version pinning, per-output processing states, artifact authorization, embedding/search freshness, cancellation races, and purge receipts before exposing file intelligence.
  4. Build a replayable change feed and signed webhook delivery with catch-up tests.
  5. Define auditable usage meters and account-scoped billing reads before any usage-based charges.
  6. Publish a versioned OpenAPI contract generated from running integration tests, then launch onboarding and a real SDK example.
Atom Files Developers

Developer reference · API access not yet available

Back to top ↑