CSV to API
You have a CSV file and want a URL that code can call. With rho you upload the file and it has one: rows as typed JSON, with filters, sorting and paging, and no server to run.
From a file to a working curl
- Sign up. There’s no password.
- Drop your file anywhere in the app. rho reads CSV, TSV, Excel, JSON, NDJSON and Parquet.
- Check what rho made of it: each column with its type, and the first rows. Then write it.
- Open the table’s API panel and copy its URL.
curl -H "Authorization: Bearer $RHO_API_KEY" https://api.rho.store/v/<key>{ "table": "products", "version": 1, "columns": [ { "name": "name", "type": "VARCHAR" }, { "name": "price", "type": "DOUBLE" } ], "rows": [{ "name": "Lamp", "price": 49.5 }], "offset": 0, "total": 214, "next": "https://api.rho.store/v/<key>?offset=100"}A table starts out private, and answers an API token of your workspace. Make it public and the same URL answers anyone who has it, with no token, so it can be read straight from a browser.
What the API can do
/v/<key>?country=SE # rows whose country is SE/v/<key>?price__lt=10 # compare a column/v/<key>?sort=-price # order by a column/v/<key>?select=name,price # only these columns/v/<key>?q=lamp # rows with this text in any column/v/<key>.csv # every row, also .ndjson and .parquetThe table API guide has all of it.
Why it’s different from a sheet with an API
- Real types. Numbers come back as numbers, dates as ISO text, an empty cell as
null. rho works out each column’s type when it reads the file, and you see it before anything is written. - Your API doesn’t change under your callers. A new upload makes a new version.
/v/<key>@3is version 3 for good, and every answer has an ETag, so a caller can cache it until there’s a new version. - Mistakes can be undone. A wrong upload is undone by restoring the version before it.
- The file can keep growing. Upload a new file to replace the rows, add to them, or update them by a key.
- Agents can use it too. The same table can be read and queried with SQL by your AI agents, over MCP.
When something else fits better
If people need to edit the rows by hand and you need writes over the API, a no-code database such as Baserow or Airtable fits better: rho’s table API only reads. If you want to host it yourself, look at Datasette.