What's missing
kbagent has no support for two Storage API endpoints we're using to expose Keboola
buckets to BigQuery Analytics Hub consumers:
POST /v2/storage/branch/{branchId}/buckets/{bucketId}/table-aliases
POST / GET / PATCH /v2/storage/branch/{branchId}/buckets/{bucketId}/listing
(the exposure listing itself — bigquery.listingResourceName in the GET response
is what a consumer subscribes to via Analytics Hub, out of scope here)
Right now we build request bodies by hand and hit these with raw curl + a
kbagent token create --bucket-write scoped token, since neither endpoint has a
client/service/command in the CLI (checked client/storage_tables.py — it has
create_bucket, share_bucket/link_bucket, but nothing for aliases or listings).
What we found by observation (not from public docs)
These endpoints don't appear to be documented anywhere we could find — not in
Keboola's public docs, not in this repo, not in kbagent serve's OpenAPI. We
captured the request/response shapes by intercepting window.fetch in the
Keboola UI's own bucket-exposure flow. Two things worth a maintainer's eyes:
- The
PATCH (update) endpoint's description field is named exposureDescription,
but POST (create) uses listingDescription — same resource, different field
name depending on verb. We only confirmed this because we saw both in the wire
capture; happy to share exact request/response bodies if useful.
bigquery.listingId appears immutable once created (client-side form
constraint, not confirmed server-side) — matches ^[a-zA-Z0-9_]+$, ≤63 chars.
Proposed shape (matching existing patterns)
client/storage_tables.py: create_table_alias(bucket_id, source_table, name, branch_id=None),
create_listing(...), get_listing(...) — same prefix/body pattern as create_bucket
storage create-table-alias, storage create-listing, storage get-listing commands
OPERATION_REGISTRY entries (write category)
- Given the endpoints are unpublished, we'd love a maintainer confirmation of the
contract before anyone sinks time into a PR — happy to share our captured
request/response samples if that helps.
Not requesting: an Analytics Hub subscribe client. That call runs on the
consumer's own GCP side with their own ADC credentials against Google's API, not
Keboola's — outside kbagent's surface regardless of this feature.
What's missing
kbagenthas no support for two Storage API endpoints we're using to expose Keboolabuckets to BigQuery Analytics Hub consumers:
POST /v2/storage/branch/{branchId}/buckets/{bucketId}/table-aliasesPOST/GET/PATCH /v2/storage/branch/{branchId}/buckets/{bucketId}/listing(the exposure listing itself —
bigquery.listingResourceNamein the GET responseis what a consumer subscribes to via Analytics Hub, out of scope here)
Right now we build request bodies by hand and hit these with raw
curl+ akbagent token create --bucket-writescoped token, since neither endpoint has aclient/service/command in the CLI (checked
client/storage_tables.py— it hascreate_bucket,share_bucket/link_bucket, but nothing for aliases or listings).What we found by observation (not from public docs)
These endpoints don't appear to be documented anywhere we could find — not in
Keboola's public docs, not in this repo, not in
kbagent serve's OpenAPI. Wecaptured the request/response shapes by intercepting
window.fetchin theKeboola UI's own bucket-exposure flow. Two things worth a maintainer's eyes:
PATCH(update) endpoint's description field is namedexposureDescription,but
POST(create) useslistingDescription— same resource, different fieldname depending on verb. We only confirmed this because we saw both in the wire
capture; happy to share exact request/response bodies if useful.
bigquery.listingIdappears immutable once created (client-side formconstraint, not confirmed server-side) — matches
^[a-zA-Z0-9_]+$, ≤63 chars.Proposed shape (matching existing patterns)
client/storage_tables.py:create_table_alias(bucket_id, source_table, name, branch_id=None),create_listing(...),get_listing(...)— same prefix/body pattern ascreate_bucketstorage create-table-alias,storage create-listing,storage get-listingcommandsOPERATION_REGISTRYentries (writecategory)contract before anyone sinks time into a PR — happy to share our captured
request/response samples if that helps.
Not requesting: an Analytics Hub subscribe client. That call runs on the
consumer's own GCP side with their own ADC credentials against Google's API, not
Keboola's — outside kbagent's surface regardless of this feature.