QuickBase-Structure-Client
Python client for Quickbase structural administration: apps, tables, fields, relationships, trustees, Solutions/QBL exports, and schema snapshots.
This package is intended to pair with quickbase-data-client. The data client
handles records, reports, files, and pandas workflows. This structure client
focuses on administration and schema lifecycle work.
Documentation
See the documentation index for all guides:
- Getting started
- API reference
- Request configuration
- Automatic backups
- Schema exports and Solutions/QBL
- Examples
- Development
See the changelog for notable changes.
Installation
pip install quickbase-structure-client
For local development:
python -m pip install -e ".[dev]"
pytest
Quickstart
import os
from quickbase_structure_client import Auth, QuickBaseStructureClient
auth = Auth(
os.environ["QUICKBASE_REALM_HOSTNAME"],
os.environ["QUICKBASE_USER_TOKEN"],
)
client = QuickBaseStructureClient(auth, auto_backup=False)
app = client.create_app("Managed Operations", description="Built by automation")
orders = app.create_table(
"Order",
plural_name="Orders",
single_record_name="Order",
)
orders.create_field(
"Total",
"currency",
options={"description": "Order total"},
)
schema = client.exporter.compile_schema(app.id)
print(client.exporter.to_markdown(schema))
Schema Export
Use the standalone example to export an existing application's tables, fields, field properties, formulas, choices, query-like details, and relationships to both JSON and Markdown:
$env:QUICKBASE_REALM_HOSTNAME = "example.quickbase.com"
$env:QUICKBASE_USER_TOKEN = "qb-user-token"
python examples/export_schema.py --app-id "b12345678"
By default, the files are written to schema_exports/<app-id>_schema.json and
schema_exports/<app-id>_schema.md. Use --output-dir to choose another
directory:
python examples/export_schema.py --app-id "b12345678" --output-dir "exports"
The same API can be used directly:
from pathlib import Path
schema = client.exporter.compile_schema("b12345678")
client.exporter.to_json(schema, Path("exports/schema.json"))
client.exporter.to_markdown(schema, Path("exports/schema.md"))
Replace b12345678 with your application's ID.
Pass table_id="b23456789" to compile_schema to export only one table. The example
command provides the equivalent --table-id "b23456789" option. Replace that sample table ID too.
Solutions / QBL
Solution creation accepts the raw QBL document required by Quickbase:
from pathlib import Path
qbl = Path("solution.qbl").read_text(encoding="utf-8")
result = client.solutions.create_solution(qbl)
For existing Solutions, preview changes with preview_solution_changes before update_solution.
See the QBL update workflow for examples
and deletion risks.
Auto Backup
auto_backup=True is the default. Mutating app/table/field/relationship/trustee
calls trigger a pre-change and post-change backup.
client = QuickBaseStructureClient(
auth,
auto_backup=True,
backup_method="schema",
backup_solution_id="solution-id",
backup_dir="backups",
)
If backup_method="schema" has no backup_solution_id and fallback is enabled,
the client falls back to app cloning. Internal backup calls suppress their own
backup hooks to avoid recursive clone storms.
These backups preserve structure only. They cannot recover deleted records or attachments.
PTO Demo
The demo script builds a small PTO tracking app with a Users table, a
PTO Events table, fields, an optional relationship, optional trustee access,
and schema exports.
Copy the sample environment file and fill in real Quickbase credentials:
Copy-Item .env.example .env
Preview the plan without creating anything:
python examples/pto_tracking_demo.py --env-file .env
Create the live Quickbase app:
python examples/pto_tracking_demo.py --env-file .env --execute
You can also set QUICKBASE_DEMO_EXECUTE=true in .env. The script refuses to
execute with placeholder credentials from .env.example.
If Quickbase returns User token is invalid, verify that:
QUICKBASE_REALM_HOSTNAMEis the same realm where the token was generated.QUICKBASE_USER_TOKENis a user token, not an app token.QUICKBASE_DEMO_ASSIGN_TOKEN=truewhen creating a new demo app. User tokens are scoped to assigned apps, so a token can create an app but still fail on table/field calls unless it is assigned to that new app.- The value has no quotes, comments, or copied label text around it.
- The token's user has permission to create apps in that realm.
If Quickbase returns Extraneous key 'description' is not permitted while
creating fields, use fieldHelp instead of description. The client maps
description to fieldHelp for field create/update convenience.
Supported Surface
- Core sync client:
QuickBaseStructureClient - Request tuning:
RequestConfig - App wrapper:
StructureApp - Table wrapper:
StructureTable - Field wrapper:
StructureField - Relationship wrapper:
StructureRelationship - Trustee manager:
TrusteesManager - Solutions/QBL manager:
SolutionsManager - Schema exporter:
SchemaExporter
Notes
- Python 3.10+ is required.
- Tests are mock-based and validate payload/method composition plus local backup behavior. They do not prove live tenant permissions or endpoint availability.
- Destructive app deletion requires the app name as confirmation because the Quickbase API requires that confirmation payload.
DISCLAIMER
This project was made primarily through the use of LLMs. As a result its code is open and available for all.
License
The Unlicense. See LICENSE.
Metadata
Release files for quickbase-structure-client 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| quickbase_structure_client-1.0.0.tar.gz | 84.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| quickbase_structure_client-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 128.2 kB
Release files / quickbase_structure_client-1.0.0.tar.gz
| Download URL | quickbase_structure_client-1.0.0.tar.gz |
|---|---|
| Size | 84.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
bc96b1176ba2434323975ea6ea7f8ee297b9056283aaf56dfe68d79a863f1b40
|
|
BLAKE2b-256 checksum How to use checksums |
7d7df0a4e57e6840411445f476810ca52eb94aa0d68a1c0cd1c4aacd03201a98
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency logRelease files / quickbase_structure_client-1.0.0-py3-none-any.whl
| Download URL | quickbase_structure_client-1.0.0-py3-none-any.whl |
|---|---|
| Size | 43.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
859183fcda1f4d4d0cba4302f051c0d570d2d8ce3186464783e9d8d3802e85ca
|
|
BLAKE2b-256 checksum How to use checksums |
dfe3c150a00564eb6a84caef5cdf7507ada233fa6120fbf3470a4d7eb4dcc401
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency log