canonical: https://jentic.com/apis/ninox.com/ninox

# Ninox API

Jentic publishes the only available OpenAPI specification for Ninox API, keeping it validated and agent-ready. Ninox is a low-code database platform used by small teams to build internal tools, CRMs, and project trackers. The REST API exposes the team-database-table-record hierarchy: list teams, list databases inside a team, list tables in a database, then list, create, read, update, and delete records inside a table. Authentication is a bearer token issued from the Ninox account settings; every call is scoped to the team and database identifiers in the URL path.

## For AI agents

Read and write records across Ninox teams, databases, and tables through 9 endpoints under api.ninox.com/v1.

## Scope

Does not handle Ninox formula scripting, view configuration, or user permissions - use for Ninox team, database, table, and record CRUD only.

## Capabilities

- List the teams accessible to the API key through GET /teams
- List databases inside a team through `/teams/{teamId}/databases`
- List tables in a database through `/teams/{teamId}/databases/{databaseId}/tables`
- Page through records in a table through /records
- Create a new record with arbitrary fields through POST /records
- Update fields on an existing record through PUT `/records/{recordId}`
- Delete a record by ID through DELETE `/records/{recordId}`

## Use cases

### Internal tool back-end CRUD

Teams using Ninox as the back end for an internal tool can read and write records from a custom UI or script. GET /records pages through entries, POST /records inserts a new row with arbitrary fields, PUT `/records/{recordId}` edits one, and DELETE `/records/{recordId}` removes one. The team and database IDs in the URL keep operations scoped to the right tenant.

Example prompt: POST `/teams/{teamId}/databases/{databaseId}/tables/{tableId}/records` with fields {Name: 'Acme', Status: 'Active'} and confirm a 200 response with the new record ID.

### Data sync into Ninox

An ETL job can mirror rows from another system into Ninox by creating or updating records on a schedule. The agent lists tables once via GET /tables to confirm the schema, then for each source row issues a POST or PUT against /records depending on whether the target row already exists.

Example prompt: For each source CSV row, PUT `/records/{recordId}` if the matching ID exists in Ninox, otherwise POST /records to create a new record.

### AI agent operating a Ninox-backed app

An AI agent can read and modify Ninox records as part of a workflow - for example, marking a task as done, adding a contact, or attaching a note. Through Jentic, the agent searches for the right Ninox endpoint by intent and Jentic returns the schema. The bearer token is held in the vault and never enters the agent's chat context.

Example prompt: Search Jentic for 'update a ninox record', load PUT `/teams/{teamId}/databases/{databaseId}/tables/{tableId}/records/{recordId}`, and execute it with fields {Status: 'Done'}.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/teams` | List teams accessible to the token |
| GET | `/teams/{teamId}/databases` | List databases inside a team |
| GET | `/teams/{teamId}/databases/{databaseId}/tables` | List tables in a database |
| GET | `/teams/{teamId}/databases/{databaseId}/tables/{tableId}/records` | List records in a table |
| POST | `/teams/{teamId}/databases/{databaseId}/tables/{tableId}/records` | Create a new record |
| PUT | `/teams/{teamId}/databases/{databaseId}/tables/{tableId}/records/{recordId}` | Update fields on a record |
| DELETE | `/teams/{teamId}/databases/{databaseId}/tables/{tableId}/records/{recordId}` | Delete a record |

## Key resources

- **Teams** — List teams accessible to the API key
- **Databases** — List and inspect databases within a team
- **Tables** — List the tables inside a database
- **Records** — List, create, read, update, and delete records in a table

## Why Jentic

- **Setup:** Wiring Ninox by hand means handling its bearer auth and threading team, database, and table ids through every path (https://api.ninox.com/v1) yourself. Through Jentic you install once, import the Ninox API from the API Directory, store the token once, and your agent calls it.
- **Permission scoping:** Ninox puts the team and database ids in the URL path (`/teams/{teamId}/databases/{databaseId}/...`), so a rule can pin your agent to one database: it can read and create records in that database's tables and nothing else. You choose the operations it may call, so destructive ones like deleting a record are not included unless you add them.
- **Credential handling:** Your Ninox token is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'list databases for a team' or 'create a record in a table', and Jentic returns the matching Ninox operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Airtable API** — Airtable is the most direct alternative - a low-code database with a similar base-table-record model.
- **NocoDB API** — NocoDB is an open-source Airtable/Ninox alternative with similar REST CRUD on tables.
- **Notion API** — Notion's database API serves a similar low-code role with deeper document features.
- **Smartsheet API** — Smartsheet provides spreadsheet-style data backing for project and ops use cases.

## FAQ

### Why is there no official OpenAPI spec for Ninox API?

Ninox publishes documentation but does not maintain an OpenAPI specification. Jentic generates and maintains this spec so that AI agents and developers can call Ninox API via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Ninox API use?

Ninox uses HTTP bearer tokens. Issue a token from the Ninox account settings and send it as Authorization: Bearer <token>. Through Jentic, the token is stored encrypted in the vault and never enters the agent's context.

### Can I create records in any field schema with the Ninox API?

Yes. POST `/teams/{teamId}/databases/{databaseId}/tables/{tableId}/records` accepts a fields object whose keys match the Ninox table's field names. The response returns the new record ID and stored values.

### What are the rate limits for the Ninox API?

Ninox enforces per-account rate limits but does not publish exact numbers in this OpenAPI spec. Bulk imports should batch writes and back off on HTTP 429 responses.

### How do I create a Ninox record through Jentic?

Run pip install jentic, search Jentic for 'create a record in a Ninox table', and load POST `/teams/{teamId}/databases/{databaseId}/tables/{tableId}/records.` Provide the team, database, and table IDs along with a fields object.

### Is the Ninox API free?

API access is bundled with Ninox paid plans. The API itself does not have separate per-call pricing; usage is included in the team's seat plan.

### Can I limit what my agent is allowed to do with the Ninox API?

Yes. Because Ninox puts the team and database IDs in the URL path, a rule in your self-hosted Jentic One can pin your agent to a single database so it only reads and creates records in that database's tables and nothing else. You decide which operations the agent may call, so destructive ones like DELETE `/records/{recordId}` are excluded unless you add them. Your own rules and stored credentials, not the agent, control what it can reach.
