---
name: infolobby
description: Use when the user wants to read, query, or modify their InfoLobby workspace data — list spaces and tables, get a table schema, create/update/delete/query records, post comments, upload/download record attachments, or build/edit table automations (flows, account key only). Requires the user's InfoLobby API key, which the skill prompts for once and caches at ~/.infolobby/key.
license: MIT
metadata:
  source: https://infolobby.com/skill
  vendor: Globi Web Solutions
  version: "1.13"
  updated: "2026-10-13"
---

# InfoLobby

Access an InfoLobby account from any agent using plain `curl`. No SDK.

## Setup

The API key lives at `~/.infolobby/key` (one line, the raw token).

**On every invocation**, first try to read it:

```bash
INFOLOBBY_KEY="$(cat ~/.infolobby/key 2>/dev/null)"
INFOLOBBY_API="https://infolobby.com/api"
```

If `~/.infolobby/key` does not exist, ask the user once for their InfoLobby API key (`il_live_…` or `il_user_…`), then write it. Do not log or echo the key back.

- macOS / Linux:
  ```bash
  mkdir -p ~/.infolobby
  ( umask 077 && printf '%s' "<KEY>" > ~/.infolobby/key )
  ```
- Windows (PowerShell):
  ```powershell
  New-Item -ItemType Directory -Force "$HOME\.infolobby" | Out-Null
  Set-Content -NoNewline "$HOME\.infolobby\key" '<KEY>'
  ```

Where the user gets a key:

- **Account key** (`il_live_…`): InfoLobby → **Account → API Keys**. Account-owner only. Acts as the owner across all in-scope workspaces.
- **Personal key** (`il_user_…`): InfoLobby → **Profile → Personal API Keys**. Acts as that user; cannot manage workspaces or table schemas.

Send the key on every request as `Authorization: Bearer $INFOLOBBY_KEY`.

## Scope

This skill covers data work, plus flow authoring:

- discover: list spaces, list tables, fetch a table schema
- records: create, get, update, delete, batch-delete, **query with filters / saved views**
- comments: list, post, attach files
- files: upload, download, delete record attachments (base64 in JSON, 50 MB cap)
- flows: build/edit per-table automations — **account key only, advanced** (see [Flows](#flows-advanced) and `references/flows.md`)

This skill does **not** create/modify workspaces, create/modify table schemas, manage members, or touch billing. Point the user at [https://infolobby.com/api-docs](https://infolobby.com/api-docs) for those.

## Workflow

Always discover before mutating:

1. `GET /spaces/list` → pick a space.
2. `GET /space/<space_id>/tables/list` → pick a table.
3. `GET /table/<table_id>/get` → read field `id` slugs from the schema. Record payloads use these slugs, **not** display names — a wrong key returns `Unauthorized - no field edit permissions for field: X`.

## Cheat sheet

| Action | Verb | Path |
|---|---|---|
| List spaces | GET | `/spaces/list` |
| List tables | GET | `/space/<sid>/tables/list` |
| Get table schema | GET | `/table/<tid>/get` |
| List views | GET | `/table/<tid>/views/list` |
| Query records | POST | `/table/<tid>/records/query` |
| Get record | GET | `/table/<tid>/record/<rid>/get` |
| Create record | POST | `/table/<tid>/records/create` |
| Update record | POST | `/table/<tid>/record/<rid>/update` |
| Delete record | POST | `/table/<tid>/record/<rid>/delete` |
| List comments | GET | `/table/<tid>/record/<rid>/comments/get?limit=20` |
| Add comment | POST | `/table/<tid>/record/<rid>/comments/create` |
| Upload attachment | POST | `/table/<tid>/record/<rid>/files/create` |
| Download attachment | POST | `/table/<tid>/record/<rid>/files/get` |
| Delete attachment | POST | `/table/<tid>/record/<rid>/files/delete` |
| List flows | GET | `/table/<tid>/flows/list` |
| Get flow (with code) | GET | `/table/<tid>/flow/<fid>/get` |
| Validate flow (dry run) | POST | `/table/<tid>/flows/validate` |
| Create flow (inactive) | POST | `/table/<tid>/flows/create` |
| Enable flow | POST | `/table/<tid>/flow/<fid>/set_active` |

## Query example

```bash
curl -s "$INFOLOBBY_API/table/101/records/query" \
  -H "Authorization: Bearer $INFOLOBBY_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "fields": ["company_name","email","status"],
    "filters": [{"column":"status","compare":"=","value":"Active"}],
    "order_by": "company_name",
    "order_dir": "A",
    "limit": 50
  }'
```

Pass `"view_id": N` to query through a saved view; the view's filters and sort replace the request's.

## Create / update record example

```bash
curl -s -X POST "$INFOLOBBY_API/table/101/records/create" \
  -H "Authorization: Bearer $INFOLOBBY_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data":{"company_name":"Acme","email":"hello@acme.test","status":"Active"}}'
```

`data` keys must be field `id` slugs from `GET /table/<tid>/get`. Update bodies are partial — include only fields to change.

### Silent writes

Add `"silent": true` alongside `data` to suppress **follower/subscriber**
notifications for that one call:

```bash
curl -s -X POST "$INFOLOBBY_API/table/101/record/5/update" \
  -H "Authorization: Bearer $INFOLOBBY_KEY" \
  -H "Content-Type: application/json" \
  -d '{"data":{"status":"Synced"},"silent":true}'
```

Accepted by `records/create`, `records/create_with_children`,
`record/<rid>/update`, `record/<rid>/update_with_children`,
`record/<rid>/delete`, `comments/create`, `files/create` and `files/delete`.

It mutes followers only. `@mention` notifications, assigned-user notifications,
record history, and flow triggers are all unaffected — a silent write is quiet,
not invisible. Use it for syncs, backfills, and bulk housekeeping; leave it off
when a human should notice. The same flag exists on flow bricks (see
[Flows](#flows-advanced)).

## Files (base64)

```bash
B64=$(base64 -w0 invoice.pdf)
curl -s -X POST "$INFOLOBBY_API/table/101/record/5/files/create" \
  -H "Authorization: Bearer $INFOLOBBY_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"field_id\":\"attachments\",\"name\":\"invoice.pdf\",\"type\":\"application/pdf\",\"data\":\"$B64\"}"
```

Decoded payload must be ≤ 50 MB. Download returns base64 in `data`. Attachment object shape on the record is `{name,path,type,size,host}`. `files/delete` strips by `(field_id, path)`.

## Flows (advanced)

Build/edit per-table automations. **Account key (`il_live_`) only** — the key
acts as a workspace admin; personal keys are rejected. A flow runs server-side
under the account and can send email, call external URLs, run AI, and invoke
other flows — so treat authoring one like deploying code: confirm intent with
the user, keep new flows **inactive** until reviewed, then enable.

Loop: read schema → author bricks → `flows/validate` (dry run) →
`flows/create` (starts inactive) → `flow/<fid>/set_active`. A flow's `code` is
builder JSON (`{"version":1,"bricks":[...]}`, round-trips to the visual editor)
or PHPScript.

```bash
# 1. dry-run validate, 2. create inactive
curl -s -X POST "$INFOLOBBY_API/table/101/flows/validate" \
  -H "Authorization: Bearer $INFOLOBBY_KEY" -H "Content-Type: application/json" \
  -d '{"code":"{\"version\":1,\"bricks\":[...]}"}'

curl -s -X POST "$INFOLOBBY_API/table/101/flows/create" \
  -H "Authorization: Bearer $INFOLOBBY_KEY" -H "Content-Type: application/json" \
  -d '{"trigger":"crt","data":{"name":"Stamp created","code":"{\"version\":1,\"bricks\":[...]}"}}'
```

Read [references/flows.md](references/flows.md) for the brick contract (tokens,
record sources, field mapper, brick types, the `silent` flag) before authoring,
and [references/phpscript.md](references/phpscript.md) before writing a `set_var`
value, an `if_expr` condition, or a code-mode flow: those are raw PHPScript, and an
unquoted string literal there silently evaluates to null.

## Error handling

- Non-2xx → plain text body.
- `401` → key missing/invalid/revoked; reprompt and rewrite `~/.infolobby/key`.
- `403` → read-only key on a write call, or endpoint not in scope for the key type.
- `429` → respect `Retry-After`. `X-RateLimit-*` headers describe the bucket.
- `500` with `Unauthorized - no field edit permissions for field: X` → field slug is wrong; refetch schema.

## References

- [references/endpoints.md](references/endpoints.md) — full endpoint list and request bodies for the in-scope surface.
- [references/fields.md](references/fields.md) — field-type quirks that surprise first-time callers (lookup, select, user, number, date).
- [references/flows.md](references/flows.md) — flow authoring: the builder brick contract, tokens, and the validate→create→enable loop (account key only).
- [references/phpscript.md](references/phpscript.md) — the PHPScript language: what `set_var`/`if_expr`/code-mode flows accept, the function catalog, and the traps (quoting, multi-value fields, UTC).

## Tips

- Base URL: `https://infolobby.com/api`.
- Responses are JSON for data endpoints; errors are plain text with non-2xx status.
- Use `curl -i` when debugging auth or scoping issues.
- Personal keys (`il_user_…`) cannot CRUD workspaces or table schemas — that is by design.
- Never write the user's key into chat output, command history echoes, or logs.
