pub struct Client { /* private fields */ }Expand description
Client for Tabularium API
Tabularium — index, submit, and discover plugins.
Version: 1.0.0
Implementations§
Source§impl Client
impl Client
Sourcepub fn new(baseurl: &str) -> Self
pub fn new(baseurl: &str) -> Self
Create a new client.
baseurl is the base URL provided to the internal
reqwest::Client, and should include a scheme and hostname,
as well as port and a path stem if applicable.
Sourcepub fn new_with_client(baseurl: &str, client: Client) -> Self
pub fn new_with_client(baseurl: &str, client: Client) -> Self
Construct a new client with an existing reqwest::Client,
allowing more control over its configuration.
baseurl is the base URL provided to the internal
reqwest::Client, and should include a scheme and hostname,
as well as port and a path stem if applicable.
Sourcepub fn api_version(&self) -> &'static str
pub fn api_version(&self) -> &'static str
Get the version of this API.
This string is pulled directly from the source OpenAPI document and may be in any format the API selects.
Source§impl Client
impl Client
Sourcepub fn list_audit(&self) -> ListAudit<'_>
pub fn list_audit(&self) -> ListAudit<'_>
List audit log entries
Sends a GET request to /api/admin/audit/
let response = client.list_audit()
.action(action)
.actor_id(actor_id)
.limit(limit)
.page(page)
.send()
.await;Sourcepub fn get_admin_email_recovery(&self) -> GetAdminEmailRecovery<'_>
pub fn get_admin_email_recovery(&self) -> GetAdminEmailRecovery<'_>
Read email-recovery state for the current admin
Sends a GET request to /api/admin/auth/email-recovery/
let response = client.get_admin_email_recovery()
.send()
.await;Sourcepub fn update_admin_email_recovery(&self) -> UpdateAdminEmailRecovery<'_>
pub fn update_admin_email_recovery(&self) -> UpdateAdminEmailRecovery<'_>
Update email-recovery state
Toggle whether rootCredentials survives the first OAuth link, and/or rotate the bootstrap email + password for the calling admin.
Sends a PUT request to /api/admin/auth/email-recovery/
let response = client.update_admin_email_recovery()
.body(body)
.send()
.await;Sourcepub fn delete_admin_email_recovery(&self) -> DeleteAdminEmailRecovery<'_>
pub fn delete_admin_email_recovery(&self) -> DeleteAdminEmailRecovery<'_>
Delete the rootCredentials row for the current admin
Sends a DELETE request to /api/admin/auth/email-recovery/
let response = client.delete_admin_email_recovery()
.send()
.await;Sourcepub fn get_admin_branding(&self) -> GetAdminBranding<'_>
pub fn get_admin_branding(&self) -> GetAdminBranding<'_>
Get current + default branding (with translation maps)
Sends a GET request to /api/admin/branding/
let response = client.get_admin_branding()
.send()
.await;Sourcepub fn update_branding(&self) -> UpdateBranding<'_>
pub fn update_branding(&self) -> UpdateBranding<'_>
Update branding (whitelabel)
Partial update. tagline and footerText set the default-locale value; taglineTranslations / footerTextTranslations set per-locale overrides (pass null/empty to clear).
Sends a PUT request to /api/admin/branding/
let response = client.update_branding()
.body(body)
.send()
.await;Sourcepub fn upload_branding_favicon(&self) -> UploadBrandingFavicon<'_>
pub fn upload_branding_favicon(&self) -> UploadBrandingFavicon<'_>
Upload a branding favicon
Multipart upload. Field name must be file. Accepts png/jpg/webp/svg/ico up to 256 KB. Storage backend is set in /admin/infra/storage. The branding favicon_url setting is updated to reference the new URL (includes a cache-buster query param).
Sends a POST request to /api/admin/branding/favicon/
let response = client.upload_branding_favicon()
.body(body)
.send()
.await;Sourcepub fn upload_branding_logo(&self) -> UploadBrandingLogo<'_>
pub fn upload_branding_logo(&self) -> UploadBrandingLogo<'_>
Upload a branding logo
Multipart upload. Field name must be file. Accepts png/jpg/webp/svg up to 512 KB. Storage backend is set in /admin/infra/storage. The branding logo_url setting is updated to reference the new URL (includes a cache-buster query param).
Sends a POST request to /api/admin/branding/logo/
let response = client.upload_branding_logo()
.body(body)
.send()
.await;Sourcepub fn admin_diagnostics(&self) -> AdminDiagnostics<'_>
pub fn admin_diagnostics(&self) -> AdminDiagnostics<'_>
System diagnostics
Admin-only deep health/diagnostics. Returns driver names, mode, uptime, and per-check failure detail. The public /healthz returns only { ok } to avoid leaking infrastructure details.
Sends a GET request to /api/admin/diagnostics/
let response = client.admin_diagnostics()
.send()
.await;Sourcepub fn admin_get_docs_config(&self) -> AdminGetDocsConfig<'_>
pub fn admin_get_docs_config(&self) -> AdminGetDocsConfig<'_>
Read docs config (intro/outro/sections)
Sends a GET request to /api/admin/docs/
let response = client.admin_get_docs_config()
.send()
.await;Sourcepub fn admin_update_docs_config(&self) -> AdminUpdateDocsConfig<'_>
pub fn admin_update_docs_config(&self) -> AdminUpdateDocsConfig<'_>
Update intro / outro markdown
Sends a PUT request to /api/admin/docs/
let response = client.admin_update_docs_config()
.body(body)
.send()
.await;Sourcepub fn admin_list_docs_sections(&self) -> AdminListDocsSections<'_>
pub fn admin_list_docs_sections(&self) -> AdminListDocsSections<'_>
List custom docs sections
Sends a GET request to /api/admin/docs/sections/
let response = client.admin_list_docs_sections()
.send()
.await;Sourcepub fn admin_create_docs_section(&self) -> AdminCreateDocsSection<'_>
pub fn admin_create_docs_section(&self) -> AdminCreateDocsSection<'_>
Create a custom docs section
Sends a POST request to /api/admin/docs/sections/
let response = client.admin_create_docs_section()
.body(body)
.send()
.await;Sourcepub fn admin_update_docs_section(&self) -> AdminUpdateDocsSection<'_>
pub fn admin_update_docs_section(&self) -> AdminUpdateDocsSection<'_>
Update a custom docs section
Sends a PUT request to /api/admin/docs/sections/{id}/
let response = client.admin_update_docs_section()
.id(id)
.body(body)
.send()
.await;Sourcepub fn admin_delete_docs_section(&self) -> AdminDeleteDocsSection<'_>
pub fn admin_delete_docs_section(&self) -> AdminDeleteDocsSection<'_>
Delete a custom docs section
Sends a DELETE request to /api/admin/docs/sections/{id}/
let response = client.admin_delete_docs_section()
.id(id)
.send()
.await;Sourcepub fn admin_get_features(&self) -> AdminGetFeatures<'_>
pub fn admin_get_features(&self) -> AdminGetFeatures<'_>
Get feature flags
Sends a GET request to /api/admin/features/
let response = client.admin_get_features()
.send()
.await;Sourcepub fn admin_update_features(&self) -> AdminUpdateFeatures<'_>
pub fn admin_update_features(&self) -> AdminUpdateFeatures<'_>
Toggle feature flags
Sends a PATCH request to /api/admin/features/
let response = client.admin_update_features()
.body(body)
.send()
.await;Sourcepub fn admin_get_home_copy(&self) -> AdminGetHomeCopy<'_>
pub fn admin_get_home_copy(&self) -> AdminGetHomeCopy<'_>
Get home-page copy overrides (admin view)
Sends a GET request to /api/admin/home-copy/
let response = client.admin_get_home_copy()
.send()
.await;Sourcepub fn admin_update_home_copy(&self) -> AdminUpdateHomeCopy<'_>
pub fn admin_update_home_copy(&self) -> AdminUpdateHomeCopy<'_>
Update home-page copy overrides
Replaces the entire home_copy blob. Empty strings clear the override for that locale.
Sends a PUT request to /api/admin/home-copy/
let response = client.admin_update_home_copy()
.body(body)
.send()
.await;Sourcepub fn admin_get_i18n(&self) -> AdminGetI18n<'_>
pub fn admin_get_i18n(&self) -> AdminGetI18n<'_>
Get i18n config
Sends a GET request to /api/admin/i18n/
let response = client.admin_get_i18n()
.send()
.await;Sourcepub fn admin_update_i18n(&self) -> AdminUpdateI18n<'_>
pub fn admin_update_i18n(&self) -> AdminUpdateI18n<'_>
Update i18n config
Sends a PATCH request to /api/admin/i18n/
let response = client.admin_update_i18n()
.body(body)
.send()
.await;Sourcepub fn get_infra_cache(&self) -> GetInfraCache<'_>
pub fn get_infra_cache(&self) -> GetInfraCache<'_>
Get current cache driver state
Sends a GET request to /api/admin/infra/cache/
let response = client.get_infra_cache()
.send()
.await;Sourcepub fn update_infra_cache(&self) -> UpdateInfraCache<'_>
pub fn update_infra_cache(&self) -> UpdateInfraCache<'_>
Update cache driver (hot-swap, no restart)
Persists the driver choice (and optional redisUrl) and immediately reconfigures the running cache. redisUrl is stored encrypted. Pass empty string to clear the override.
Sends a PUT request to /api/admin/infra/cache/
let response = client.update_infra_cache()
.body(body)
.send()
.await;Sourcepub fn get_infra_storage(&self) -> GetInfraStorage<'_>
pub fn get_infra_storage(&self) -> GetInfraStorage<'_>
Get storage driver state
Sends a GET request to /api/admin/infra/storage/
let response = client.get_infra_storage()
.send()
.await;Sourcepub fn update_infra_storage(&self) -> UpdateInfraStorage<'_>
pub fn update_infra_storage(&self) -> UpdateInfraStorage<'_>
Update storage driver (hot-swap)
Pass an empty string for any s3 field to clear it. Access / secret keys are stored encrypted. disk writes under data/uploads/ and serves via /uploads/. s3 uses Bun.S3Client (compatible with AWS, MinIO, R2).
Sends a PUT request to /api/admin/infra/storage/
let response = client.update_infra_storage()
.body(body)
.send()
.await;Sourcepub fn get_instance_settings(&self) -> GetInstanceSettings<'_>
pub fn get_instance_settings(&self) -> GetInstanceSettings<'_>
Get instance-wide settings
Sends a GET request to /api/admin/instance/
let response = client.get_instance_settings()
.send()
.await;Sourcepub fn update_instance_settings(&self) -> UpdateInstanceSettings<'_>
pub fn update_instance_settings(&self) -> UpdateInstanceSettings<'_>
Update instance-wide settings
Toggle approval mode, adjust per-bucket rate limits, and configure the manifest filename + schema URL. Pass reset: true to clear a rate-limit override; pass null or an empty string for the manifest fields to revert to defaults.
Sends a PUT request to /api/admin/instance/
let response = client.update_instance_settings()
.body(body)
.send()
.await;Sourcepub fn list_app_url_schemes(&self) -> ListAppUrlSchemes<'_>
pub fn list_app_url_schemes(&self) -> ListAppUrlSchemes<'_>
List configured app URL schemes
Sends a GET request to /api/admin/instance/app-schemes/
let response = client.list_app_url_schemes()
.send()
.await;Sourcepub fn replace_app_url_schemes(&self) -> ReplaceAppUrlSchemes<'_>
pub fn replace_app_url_schemes(&self) -> ReplaceAppUrlSchemes<'_>
Replace the full list of app URL schemes
Overwrites the stored app_url_schemes setting with the provided list. Each scheme needs a name + URL scheme (lowercase, starts with a letter). Optional kinds filter restricts the scheme to specific plugin kinds.
Sends a PUT request to /api/admin/instance/app-schemes/
let response = client.replace_app_url_schemes()
.body(body)
.send()
.await;Sourcepub fn get_instance_security(&self) -> GetInstanceSecurity<'_>
pub fn get_instance_security(&self) -> GetInstanceSecurity<'_>
Get current + previous registry signing keys
Sends a GET request to /api/admin/instance/security/
let response = client.get_instance_security()
.send()
.await;Sourcepub fn rotate_instance_signing_key(&self) -> RotateInstanceSigningKey<'_>
pub fn rotate_instance_signing_key(&self) -> RotateInstanceSigningKey<'_>
Rotate the registry signing key
Generates a new Ed25519 keypair, demotes the current key to .previous (overwriting any earlier previous), and records an audit entry.
Sends a POST request to /api/admin/instance/security/rotate
let response = client.rotate_instance_signing_key()
.send()
.await;Sourcepub fn admin_list_kinds(&self) -> AdminListKinds<'_>
pub fn admin_list_kinds(&self) -> AdminListKinds<'_>
List all plugin kinds
Sends a GET request to /api/admin/kinds/
let response = client.admin_list_kinds()
.send()
.await;Sourcepub fn admin_create_kind(&self) -> AdminCreateKind<'_>
pub fn admin_create_kind(&self) -> AdminCreateKind<'_>
Create a plugin kind
Sends a POST request to /api/admin/kinds/
let response = client.admin_create_kind()
.body(body)
.send()
.await;Sourcepub fn admin_get_kind(&self) -> AdminGetKind<'_>
pub fn admin_get_kind(&self) -> AdminGetKind<'_>
Read one plugin kind
Sends a GET request to /api/admin/kinds/{key}/
let response = client.admin_get_kind()
.key(key)
.send()
.await;Sourcepub fn admin_update_kind(&self) -> AdminUpdateKind<'_>
pub fn admin_update_kind(&self) -> AdminUpdateKind<'_>
Replace one plugin kind
Sends a PUT request to /api/admin/kinds/{key}/
let response = client.admin_update_kind()
.key(key)
.body(body)
.send()
.await;Sourcepub fn admin_delete_kind(&self) -> AdminDeleteKind<'_>
pub fn admin_delete_kind(&self) -> AdminDeleteKind<'_>
Delete one plugin kind
Sends a DELETE request to /api/admin/kinds/{key}/
let response = client.admin_delete_kind()
.key(key)
.send()
.await;Sourcepub fn get_manifest_extensions(&self) -> GetManifestExtensions<'_>
pub fn get_manifest_extensions(&self) -> GetManifestExtensions<'_>
Read the current manifest extensions delta + merged schema
Sends a GET request to /api/admin/manifest/extensions/
let response = client.get_manifest_extensions()
.send()
.await;Sourcepub fn update_manifest_extensions(&self) -> UpdateManifestExtensions<'_>
pub fn update_manifest_extensions(&self) -> UpdateManifestExtensions<'_>
Replace the manifest extensions delta
The delta is a flat record of { propertyName: JSONSchemaNode }. The registry wraps it into an object schema and merges it with the locked core. Pass null or {} to clear.
Sends a PUT request to /api/admin/manifest/extensions/
let response = client.update_manifest_extensions()
.body(body)
.send()
.await;Sourcepub fn admin_list_pages(&self) -> AdminListPages<'_>
pub fn admin_list_pages(&self) -> AdminListPages<'_>
List all markdown pages (grouped by slug)
Sends a GET request to /api/admin/pages/
let response = client.admin_list_pages()
.send()
.await;Sourcepub fn create_page(&self) -> CreatePage<'_>
pub fn create_page(&self) -> CreatePage<'_>
Create a markdown page
Creates the default-locale row unless locale is given. Pass path to mount at any non-reserved URL.
Sends a POST request to /api/admin/pages/
let response = client.create_page()
.body(body)
.send()
.await;Sourcepub fn preview_page(&self) -> PreviewPage<'_>
pub fn preview_page(&self) -> PreviewPage<'_>
Render markdown to sanitized HTML (admin live preview)
Sends a POST request to /api/admin/pages/preview/
let response = client.preview_page()
.body(body)
.send()
.await;Sourcepub fn admin_get_page(&self) -> AdminGetPage<'_>
pub fn admin_get_page(&self) -> AdminGetPage<'_>
Get a markdown page (raw)
Sends a GET request to /api/admin/pages/{slug}/
let response = client.admin_get_page()
.slug(slug)
.locale(locale)
.send()
.await;Sourcepub fn delete_page(&self) -> DeletePage<'_>
pub fn delete_page(&self) -> DeletePage<'_>
Delete a markdown page (all locales) or one translation when locale is given
Sends a DELETE request to /api/admin/pages/{slug}/
let response = client.delete_page()
.slug(slug)
.locale(locale)
.send()
.await;Sourcepub fn update_page(&self) -> UpdatePage<'_>
pub fn update_page(&self) -> UpdatePage<'_>
Update a markdown page (creates the translation row if absent)
Sends a PATCH request to /api/admin/pages/{slug}/
let response = client.update_page()
.slug(slug)
.locale(locale)
.body(body)
.send()
.await;Sourcepub fn admin_list_page_translations(&self) -> AdminListPageTranslations<'_>
pub fn admin_list_page_translations(&self) -> AdminListPageTranslations<'_>
List existing translations for a page
Sends a GET request to /api/admin/pages/{slug}/translations
let response = client.admin_list_page_translations()
.slug(slug)
.send()
.await;Sourcepub fn admin_list_plugins(&self) -> AdminListPlugins<'_>
pub fn admin_list_plugins(&self) -> AdminListPlugins<'_>
List plugins (incl. non-approved)
Sends a GET request to /api/admin/plugins/
let response = client.admin_list_plugins()
.status(status)
.send()
.await;Sourcepub fn bulk_plugin_action(&self) -> BulkPluginAction<'_>
pub fn bulk_plugin_action(&self) -> BulkPluginAction<'_>
Bulk-approve / reject / delete plugins
Apply the same action to up to 100 plugins in one round-trip. delete cascades to releases. reject accepts an optional reason. Single audit-log entry per call.
Sends a POST request to /api/admin/plugins/bulk/
let response = client.bulk_plugin_action()
.body(body)
.send()
.await;Sourcepub fn admin_delete_plugin(&self) -> AdminDeletePlugin<'_>
pub fn admin_delete_plugin(&self) -> AdminDeletePlugin<'_>
Force-delete a plugin (admin override)
Sends a DELETE request to /api/admin/plugins/{id}/
let response = client.admin_delete_plugin()
.id(id)
.send()
.await;Sourcepub fn update_plugin(&self) -> UpdatePlugin<'_>
pub fn update_plugin(&self) -> UpdatePlugin<'_>
Update plugin (status / moderation / pin / categorize)
Partial update. status toggles approval. featured: true pins to the landing grid (use featuredOrder to set position). category/tags are normally driven by the .tabularium manifest but can be overridden here.
Sends a PATCH request to /api/admin/plugins/{id}/
let response = client.update_plugin()
.id(id)
.body(body)
.send()
.await;Sourcepub fn refresh_plugin_manifest(&self) -> RefreshPluginManifest<'_>
pub fn refresh_plugin_manifest(&self) -> RefreshPluginManifest<'_>
Re-fetch the .tabularium manifest from the repo
Pulls .tabularium (and the README) from the repo at the given ref (defaults to the latest released tag or HEAD).
Sends a POST request to /api/admin/plugins/{id}/refresh-manifest/
let response = client.refresh_plugin_manifest()
.id(id)
.body(body)
.send()
.await;Sourcepub fn rehash_release(&self) -> RehashRelease<'_>
pub fn rehash_release(&self) -> RehashRelease<'_>
Re-hash release assets
Re-fetches every asset of the given (or latest) release and updates sha256 + size. Useful when the original webhook fetch failed. Set force: true to re-hash assets that already have a sha256.
Sends a POST request to /api/admin/plugins/{id}/rehash/
let response = client.rehash_release()
.id(id)
.body(body)
.send()
.await;Sourcepub fn replay_webhook(&self) -> ReplayWebhook<'_>
pub fn replay_webhook(&self) -> ReplayWebhook<'_>
Manually replay the latest release ingest
Re-fetches the upstream latest release via the owner’s stored OAuth token and runs the same ingest path the webhook uses. Useful when the webhook never fired (initial setup) or upstream timed out. Skips signature verification.
Sends a POST request to /api/admin/plugins/{id}/replay-webhook/
let response = client.replay_webhook()
.id(id)
.send()
.await;Sourcepub fn list_provider_instances(&self) -> ListProviderInstances<'_>
pub fn list_provider_instances(&self) -> ListProviderInstances<'_>
List all provider instances (secrets redacted)
Sends a GET request to /api/admin/provider-instances/
let response = client.list_provider_instances()
.send()
.await;Sourcepub fn create_provider_instance(&self) -> CreateProviderInstance<'_>
pub fn create_provider_instance(&self) -> CreateProviderInstance<'_>
Create a new provider instance
Sends a POST request to /api/admin/provider-instances/
let response = client.create_provider_instance()
.body(body)
.send()
.await;Sourcepub fn bulk_provider_instance_action(&self) -> BulkProviderInstanceAction<'_>
pub fn bulk_provider_instance_action(&self) -> BulkProviderInstanceAction<'_>
Bulk enable / disable provider instances
Flip enabled on up to 100 provider instances in one round-trip. Unknown ids are returned in missing and silently skipped. Single audit-log entry per call.
Sends a POST request to /api/admin/provider-instances/bulk/
let response = client.bulk_provider_instance_action()
.body(body)
.send()
.await;Sourcepub fn get_provider_instance(&self) -> GetProviderInstance<'_>
pub fn get_provider_instance(&self) -> GetProviderInstance<'_>
Get a single provider instance
Sends a GET request to /api/admin/provider-instances/{id}/
let response = client.get_provider_instance()
.id(id)
.send()
.await;Sourcepub fn delete_provider_instance(&self) -> DeleteProviderInstance<'_>
pub fn delete_provider_instance(&self) -> DeleteProviderInstance<'_>
Delete a provider instance
Sends a DELETE request to /api/admin/provider-instances/{id}/
let response = client.delete_provider_instance()
.id(id)
.send()
.await;Sourcepub fn patch_provider_instance(&self) -> PatchProviderInstance<'_>
pub fn patch_provider_instance(&self) -> PatchProviderInstance<'_>
Partially update a provider instance
Sends a PATCH request to /api/admin/provider-instances/{id}/
let response = client.patch_provider_instance()
.id(id)
.body(body)
.send()
.await;Sourcepub fn upload_provider_logo(&self) -> UploadProviderLogo<'_>
pub fn upload_provider_logo(&self) -> UploadProviderLogo<'_>
Upload a logo for a provider instance
Multipart upload. Field name must be file. Accepts png/jpg/webp/svg up to 512 KB. Storage backend is set in /admin/infra/storage. The instance row is updated to reference the new URL (includes a cache-buster query param).
Sends a POST request to /api/admin/provider-instances/{id}/logo/
let response = client.upload_provider_logo()
.id(id)
.body(body)
.send()
.await;Sourcepub fn test_provider_o_auth(&self) -> TestProviderOAuth<'_>
pub fn test_provider_o_auth(&self) -> TestProviderOAuth<'_>
Probe the OAuth authorize endpoint for a provider instance
Issues a GET (manual redirect, 5s timeout) against the provider-kind specific authorize URL. A 302/400 typically means “configured correctly”. 5xx or fetch errors are reported as not-ok. Records an audit entry with the outcome.
Sends a POST request to /api/admin/provider-instances/{id}/test-oauth/
let response = client.test_provider_o_auth()
.id(id)
.send()
.await;Sourcepub fn admin_delete_request(&self) -> AdminDeleteRequest<'_>
pub fn admin_delete_request(&self) -> AdminDeleteRequest<'_>
Delete a plugin request
Sends a DELETE request to /api/admin/requests/{id}/
let response = client.admin_delete_request()
.id(id)
.send()
.await;Sourcepub fn list_settings(&self) -> ListSettings<'_>
pub fn list_settings(&self) -> ListSettings<'_>
List all settings (encrypted values masked)
Sends a GET request to /api/admin/settings/
let response = client.list_settings()
.send()
.await;Sourcepub fn get_setting(&self) -> GetSetting<'_>
pub fn get_setting(&self) -> GetSetting<'_>
Get a single setting (secrets redacted)
Sends a GET request to /api/admin/settings/{key}/
let response = client.get_setting()
.key(key)
.send()
.await;Sourcepub fn put_setting(&self) -> PutSetting<'_>
pub fn put_setting(&self) -> PutSetting<'_>
Create or update a setting
Keys ending in .client_secret, .password, or .token are stored encrypted automatically.
Sends a PUT request to /api/admin/settings/{key}/
let response = client.put_setting()
.key(key)
.body(body)
.send()
.await;Sourcepub fn delete_setting(&self) -> DeleteSetting<'_>
pub fn delete_setting(&self) -> DeleteSetting<'_>
Delete a setting
Sends a DELETE request to /api/admin/settings/{key}/
let response = client.delete_setting()
.key(key)
.send()
.await;Sourcepub fn complete_setup(&self) -> CompleteSetup<'_>
pub fn complete_setup(&self) -> CompleteSetup<'_>
Mark the setup wizard as completed
Sets setup.completed_at in settings. Frontend stops redirecting to /welcome after this.
Sends a POST request to /api/admin/setup/complete/
let response = client.complete_setup()
.send()
.await;Sourcepub fn list_admin_tokens(&self) -> ListAdminTokens<'_>
pub fn list_admin_tokens(&self) -> ListAdminTokens<'_>
List the caller’s admin API tokens
Sends a GET request to /api/admin/tokens/
let response = client.list_admin_tokens()
.send()
.await;Sourcepub fn create_admin_token(&self) -> CreateAdminToken<'_>
pub fn create_admin_token(&self) -> CreateAdminToken<'_>
Create a long-lived admin API token (M2M)
Returns the plaintext token once. Store it immediately — the registry only persists a sha256 hash and cannot show the token again. Use it as Authorization: Bearer <token> against any /api/admin/* endpoint.
Sends a POST request to /api/admin/tokens/
let response = client.create_admin_token()
.body(body)
.send()
.await;Sourcepub fn revoke_admin_token(&self) -> RevokeAdminToken<'_>
pub fn revoke_admin_token(&self) -> RevokeAdminToken<'_>
Revoke an admin API token
Sends a DELETE request to /api/admin/tokens/{id}/
let response = client.revoke_admin_token()
.id(id)
.send()
.await;Sourcepub fn list_users(&self) -> ListUsers<'_>
pub fn list_users(&self) -> ListUsers<'_>
List users (most recent first)
Sends a GET request to /api/admin/users/
let response = client.list_users()
.limit(limit)
.send()
.await;Sourcepub fn get_user(&self) -> GetUser<'_>
pub fn get_user(&self) -> GetUser<'_>
Get a single user
Sends a GET request to /api/admin/users/{id}/
let response = client.get_user()
.id(id)
.send()
.await;Sourcepub fn patch_user(&self) -> PatchUser<'_>
pub fn patch_user(&self) -> PatchUser<'_>
Update a user (role or displayName)
Sends a PATCH request to /api/admin/users/{id}/
let response = client.patch_user()
.id(id)
.body(body)
.send()
.await;Sourcepub fn list_my_publisher_tokens(&self) -> ListMyPublisherTokens<'_>
pub fn list_my_publisher_tokens(&self) -> ListMyPublisherTokens<'_>
List the caller’s publisher tokens
Sends a GET request to /api/auth/me/tokens/
let response = client.list_my_publisher_tokens()
.send()
.await;Sourcepub fn create_my_publisher_token(&self) -> CreateMyPublisherToken<'_>
pub fn create_my_publisher_token(&self) -> CreateMyPublisherToken<'_>
Create a publisher API token
Returns the plaintext token once. Store it immediately — the registry only persists a sha256 hash and cannot show the token again. Use it as Authorization: Bearer <token> against POST /api/publish/:slug.
Sends a POST request to /api/auth/me/tokens/
let response = client.create_my_publisher_token()
.body(body)
.send()
.await;Sourcepub fn revoke_my_publisher_token(&self) -> RevokeMyPublisherToken<'_>
pub fn revoke_my_publisher_token(&self) -> RevokeMyPublisherToken<'_>
Revoke a publisher token
Sends a DELETE request to /api/auth/me/tokens/{id}/
let response = client.revoke_my_publisher_token()
.id(id)
.send()
.await;Sourcepub fn get_branding(&self) -> GetBranding<'_>
pub fn get_branding(&self) -> GetBranding<'_>
Get instance branding (whitelabel)
Public read-only endpoint. Pass ?locale= to fetch the tagline/footer in a specific language (falls back to default locale).
Sends a GET request to /api/branding/
let response = client.get_branding()
.locale(locale)
.send()
.await;Sourcepub fn get_plugin_docs(&self) -> GetPluginDocs<'_>
pub fn get_plugin_docs(&self) -> GetPluginDocs<'_>
Plugin developer docs (live, localized)
Returns a structured PluginDocs document with the current core schema, global extensions, per-kind extensions, examples (YAML + JSON), and links to the OpenAPI spec. Generated on every request from the live registry state. Pass ?format=md for a single flat markdown blob (LLM-friendly).
Sends a GET request to /api/docs/plugin-development/
let response = client.get_plugin_docs()
.format(format)
.locale(locale)
.send()
.await;Sourcepub fn get_features(&self) -> GetFeatures<'_>
pub fn get_features(&self) -> GetFeatures<'_>
Get public feature flags (submissions/requests on/off)
Sends a GET request to /api/features/
let response = client.get_features()
.send()
.await;Sourcepub fn get_home_copy(&self) -> GetHomeCopy<'_>
pub fn get_home_copy(&self) -> GetHomeCopy<'_>
Get home-page copy overrides
Public read-only endpoint. Returns the admin-configured eyebrow + feature-section overrides. Empty translation maps mean “fall back to the built-in copy”.
Sends a GET request to /api/home-copy/
let response = client.get_home_copy()
.send()
.await;Sourcepub fn get_i18n_config(&self) -> GetI18nConfig<'_>
pub fn get_i18n_config(&self) -> GetI18nConfig<'_>
Get i18n config (default + enabled locales)
Sends a GET request to /api/i18n/
let response = client.get_i18n_config()
.send()
.await;Sourcepub fn init_complete(&self) -> InitComplete<'_>
pub fn init_complete(&self) -> InitComplete<'_>
Finalize install: connect DB, migrate, promote bootstrap admin, exit
Sends a POST request to /api/init/complete/
let response = client.init_complete()
.body(body)
.send()
.await;Sourcepub fn init_defaults(&self) -> InitDefaults<'_>
pub fn init_defaults(&self) -> InitDefaults<'_>
Env values to prefill the install wizard
Sends a GET request to /api/init/defaults/
let response = client.init_defaults()
.send()
.await;Sourcepub fn init_login(&self) -> InitLogin<'_>
pub fn init_login(&self) -> InitLogin<'_>
Bootstrap sign-in for the install wizard
Sends a POST request to /api/init/login/
let response = client.init_login()
.body(body)
.send()
.await;Sourcepub fn init_status(&self) -> InitStatus<'_>
pub fn init_status(&self) -> InitStatus<'_>
Check whether the registry needs first-time setup
Sends a GET request to /api/init/status/
let response = client.init_status()
.send()
.await;Sourcepub fn init_test_db(&self) -> InitTestDb<'_>
pub fn init_test_db(&self) -> InitTestDb<'_>
Probe a database URL during install
Tries to connect to the given URL and run SELECT 1. Reports the detected dialect either way. Bootstrap-only.
Sends a POST request to /api/init/test-db/
let response = client.init_test_db()
.body(body)
.send()
.await;Sourcepub fn get_instance_info(&self) -> GetInstanceInfo<'_>
pub fn get_instance_info(&self) -> GetInstanceInfo<'_>
Public instance info (app URL schemes, etc)
Public read-only endpoint. Clients (frontend, third-party browsers) consume this on boot to learn which desktop apps can handle “Open in App” deep-links for plugin installation.
Sends a GET request to /api/instance/info/
let response = client.get_instance_info()
.send()
.await;Sourcepub fn list_kinds(&self) -> ListKinds<'_>
pub fn list_kinds(&self) -> ListKinds<'_>
List active plugin kinds
Returns the registry-wide list of plugin kinds defined by the admin. Plugin authors mark a plugin’s kind by adding the matching value to their tags field. Public — no auth required. A kind may opt in to a dedicated public catalogue page at /c/:key via publicPageEnabled; consumers treat the field as falsy when absent.
Sends a GET request to /api/kinds/
let response = client.list_kinds()
.send()
.await;Sourcepub fn get_manifest_spec(&self) -> GetManifestSpec<'_>
pub fn get_manifest_spec(&self) -> GetManifestSpec<'_>
Discoverable plugin manifest spec
Public reference for plugin authors. Returns the TypeBox JSON Schema, an example, and the registry’s active kind keys.
Sends a GET request to /api/manifest/
let response = client.get_manifest_spec()
.send()
.await;Sourcepub fn validate_manifest(&self) -> ValidateManifest<'_>
pub fn validate_manifest(&self) -> ValidateManifest<'_>
Validate a manifest body against the registry schema
Public validator for authoring tools / CI. Returns 200 + ok:false on validation failure so HTTP-status-branching tools always reach the body. 4xx is reserved for malformed requests and oversized bodies.
Sends a POST request to /api/manifest/validate/
let response = client.validate_manifest()
.body(body)
.send()
.await;Sourcepub fn list_pages(&self) -> ListPages<'_>
pub fn list_pages(&self) -> ListPages<'_>
List published markdown pages
Sends a GET request to /api/pages/
let response = client.list_pages()
.locale(locale)
.send()
.await;Sourcepub fn get_page_by_path(&self) -> GetPageByPath<'_>
pub fn get_page_by_path(&self) -> GetPageByPath<'_>
Resolve a published page by its public path
Returns sanitized HTML in the requested locale, with fallback to the default locale.
Sends a GET request to /api/pages/by-path
let response = client.get_page_by_path()
.locale(locale)
.path(path)
.send()
.await;Sourcepub fn get_page(&self) -> GetPage<'_>
pub fn get_page(&self) -> GetPage<'_>
Render a published markdown page
Returns sanitized HTML for a page in the requested locale, falling back to the default locale if missing.
Sends a GET request to /api/pages/{slug}/
let response = client.get_page()
.slug(slug)
.locale(locale)
.send()
.await;Sourcepub fn list_plugins(&self) -> ListPlugins<'_>
pub fn list_plugins(&self) -> ListPlugins<'_>
List plugins
Paginated catalog. Supports search (name/description/slug), category (exact), tag (exact), featured=1, and sort=updated|new|name|featured. Returns facets so the UI can render filter chips without an extra request. Public — no auth required.
Sends a GET request to /api/plugins/
let response = client.list_plugins()
.category(category)
.featured(featured)
.kind(kind)
.limit(limit)
.page(page)
.search(search)
.sort(sort)
.tag(tag)
.verified(verified)
.send()
.await;Sourcepub fn get_plugin(&self) -> GetPlugin<'_>
pub fn get_plugin(&self) -> GetPlugin<'_>
Get plugin detail
Full plugin record including release history and the rendered README HTML (sanitized via DOMPurify, cached 10 min). Public — no auth required. Pass ?locale= to request a localized README; falls back to base language, then en, then the first available.
Sends a GET request to /api/plugins/{slug}/
let response = client.get_plugin()
.slug(slug)
.locale(locale)
.send()
.await;Sourcepub fn delete_plugin(&self) -> DeletePlugin<'_>
pub fn delete_plugin(&self) -> DeletePlugin<'_>
Delete plugin
Removes the plugin and all of its releases from the registry. Requires auth and only the owner can perform it. The upstream repo and the webhook on the repo are left untouched.
Sends a DELETE request to /api/plugins/{slug}/
let response = client.delete_plugin()
.slug(slug)
.send()
.await;Sourcepub fn get_plugin_download_stats(&self) -> GetPluginDownloadStats<'_>
pub fn get_plugin_download_stats(&self) -> GetPluginDownloadStats<'_>
Aggregated download counts per version + platform
Sends a GET request to /api/plugins/{slug}/downloads/
let response = client.get_plugin_download_stats()
.slug(slug)
.send()
.await;Sourcepub fn get_latest_asset(&self) -> GetLatestAsset<'_>
pub fn get_latest_asset(&self) -> GetLatestAsset<'_>
Resolve latest release for a platform
Returns the matching asset for the requested platform. os and arch are optional — if missing, the User-Agent is inspected; if still unknown, falls back to universal. The full per-platform map is always included so clients can present alternatives.
Sends a GET request to /api/plugins/{slug}/latest/
let response = client.get_latest_asset()
.slug(slug)
.arch(arch)
.os(os)
.redirect(redirect)
.send()
.await;Re-fetch the .tabularium manifest (plugin owner)
Pulls .tabularium (and the README) from the repo at the given ref (defaults to the latest released tag or HEAD). Authenticated plugin owners only; rate-limited to 1/min per plugin.
Sends a POST request to /api/plugins/{slug}/refresh-manifest/
let response = client.author_refresh_plugin_manifest()
.slug(slug)
.body(body)
.send()
.await;Re-hash release assets (plugin owner)
Re-fetches every asset of the given (or latest) release and updates sha256 + size. Useful when the original webhook fetch raced asset upload. Set force: true to re-hash assets that already have a sha256. Authenticated plugin owners only; rate-limited to 1/min per plugin.
Sends a POST request to /api/plugins/{slug}/rehash/
let response = client.author_rehash_release()
.slug(slug)
.body(body)
.send()
.await;Sourcepub fn get_release_integrity(&self) -> GetReleaseIntegrity<'_>
pub fn get_release_integrity(&self) -> GetReleaseIntegrity<'_>
Asset integrity (sha256 + size) for a specific release
Lookup endpoint for sum.<host>-style verifiers. When release_assets rows are present (post-ingest) the response includes the signed jws plus per-asset metadata (name, sha256, size, attestation_bundle). For legacy releases without per-asset rows yet, falls back to the platform-keyed JSON blob with url/size/sha256.
Sends a GET request to /api/plugins/{slug}/releases/{version}/integrity/
let response = client.get_release_integrity()
.slug(slug)
.version(version)
.send()
.await;Sourcepub fn get_plugin_stats(&self) -> GetPluginStats<'_>
pub fn get_plugin_stats(&self) -> GetPluginStats<'_>
Provider stats (stars / forks / last push) for a plugin
Lazily fetched from the upstream provider and cached for 10 minutes. Returns null fields when the provider is unreachable or the repo is private.
Sends a GET request to /api/plugins/{slug}/stats/
let response = client.get_plugin_stats()
.slug(slug)
.send()
.await;Sourcepub fn initiate_transfer(&self) -> InitiateTransfer<'_>
pub fn initiate_transfer(&self) -> InitiateTransfer<'_>
Initiate a plugin ownership transfer
Owner-only. Creates a pending transfer the recipient must accept (or reject) within 7 days. Cancel anytime via DELETE /auth/me/transfers/:id. Only one pending transfer per plugin at a time.
Sends a POST request to /api/plugins/{slug}/transfer/
let response = client.initiate_transfer()
.slug(slug)
.body(body)
.send()
.await;Sourcepub fn publish_release(&self) -> PublishRelease<'_>
pub fn publish_release(&self) -> PublishRelease<'_>
Publish a release from a CI / CLI using a publisher token
Token-authenticated counterpart to the webhook ingest path. First push of an unknown slug auto-claims it (requires publish:* scope and a repoUrl). Subsequent pushes update the plugin’s latest release. Manifest is validated; asset URLs are hashed in the background.
Sends a POST request to /api/publish/{slug}/
let response = client.publish_release()
.slug(slug)
.body(body)
.send()
.await;Sourcepub fn list_requests(&self) -> ListRequests<'_>
pub fn list_requests(&self) -> ListRequests<'_>
List plugin requests
Browse the community wishlist of plugins users would like to see. Sorted by upvotes by default. Public — no auth required.
Sends a GET request to /api/requests/
let response = client.list_requests()
.limit(limit)
.page(page)
.sort(sort)
.send()
.await;Sourcepub fn create_request(&self) -> CreateRequest<'_>
pub fn create_request(&self) -> CreateRequest<'_>
Create plugin request
Add a new entry to the community wishlist. Requires auth. Slug must be unique across requests.
Sends a POST request to /api/requests/
let response = client.create_request()
.body(body)
.send()
.await;Sourcepub fn toggle_request_claim(&self) -> ToggleRequestClaim<'_>
pub fn toggle_request_claim(&self) -> ToggleRequestClaim<'_>
Toggle a claim on a plugin request
Adds or removes the current user’s claim on the request. Claims are non-exclusive — multiple users can claim the same request. They do not block plugin submission.
Sends a POST request to /api/requests/{id}/claim/
let response = client.toggle_request_claim()
.id(id)
.send()
.await;Sourcepub fn toggle_upvote(&self) -> ToggleUpvote<'_>
pub fn toggle_upvote(&self) -> ToggleUpvote<'_>
Toggle upvote on a request
Toggles the current user’s vote on the request: if not yet voted, adds a vote; if already voted, removes it. Returns the new total and the user’s new vote state. Requires auth.
Sends a POST request to /api/requests/{id}/upvote/
let response = client.toggle_upvote()
.id(id)
.send()
.await;Sourcepub fn submit_o_auth(&self) -> SubmitOAuth<'_>
pub fn submit_o_auth(&self) -> SubmitOAuth<'_>
Submit plugin via OAuth-verified ownership
Sends a POST request to /api/submit/oauth/
let response = client.submit_o_auth()
.body(body)
.send()
.await;Sourcepub fn submit_preview(&self) -> SubmitPreview<'_>
pub fn submit_preview(&self) -> SubmitPreview<'_>
Dry-run a submission: fetch + validate the manifest, no writes
Resolves the latest release + .tabularium for the given repo and returns a preview the frontend can render before the user confirms. No database writes. Useful so the submit page can show name/description/kind/screenshots from the manifest instead of asking the user to type them again.
Sends a POST request to /api/submit/preview/
let response = client.submit_preview()
.body(body)
.send()
.await;Sourcepub fn list_submittable_repos(&self) -> ListSubmittableRepos<'_>
pub fn list_submittable_repos(&self) -> ListSubmittableRepos<'_>
List submittable repos across linked identities
Sends a GET request to /api/submit/repos/
let response = client.list_submittable_repos()
.send()
.await;Sourcepub fn release_webhook(&self) -> ReleaseWebhook<'_>
pub fn release_webhook(&self) -> ReleaseWebhook<'_>
Release event ingestion
GitHub / GitLab / Gitea (and Forgejo) post releases here. Signature scheme is picked per plugin’s linked provider instance kind.
Sends a POST request to /api/webhooks/release/
let response = client.release_webhook()
.send()
.await;Sourcepub fn email_login(&self) -> EmailLogin<'_>
pub fn email_login(&self) -> EmailLogin<'_>
Bootstrap admin email + password sign-in
Recovery path for the initial admin. Closes permanently once the admin links any OAuth identity.
Sends a POST request to /auth/email/login/
let response = client.email_login()
.body(body)
.send()
.await;Sourcepub fn register_bootstrap_admin(&self) -> RegisterBootstrapAdmin<'_>
pub fn register_bootstrap_admin(&self) -> RegisterBootstrapAdmin<'_>
Register the bootstrap admin account
Allowed only while no admin exists. The first registered account becomes admin. Credentials are stored in root_credentials and deleted automatically the first time the admin links an OAuth identity.
Sends a POST request to /auth/email/register/
let response = client.register_bootstrap_admin()
.body(body)
.send()
.await;Sourcepub fn logout(&self) -> Logout<'_>
pub fn logout(&self) -> Logout<'_>
Revoke session + clear cookie
Idempotent — flips the server-side session record to revoked and clears the auth cookie. Returns { ok: true } regardless of prior auth state.
Sends a POST request to /auth/logout/
let response = client.logout()
.send()
.await;Sourcepub fn get_me(&self) -> GetMe<'_>
pub fn get_me(&self) -> GetMe<'_>
Get current user with linked identities
Sends a GET request to /auth/me/
let response = client.get_me()
.send()
.await;Sourcepub fn delete_me(&self) -> DeleteMe<'_>
pub fn delete_me(&self) -> DeleteMe<'_>
Delete your account
Cascade-deletes identities + root credentials and clears the session cookie. Refuses with 409 if you still own plugins — transfer or delete them first.
Sends a DELETE request to /auth/me/
let response = client.delete_me()
.send()
.await;Sourcepub fn unlink_identity(&self) -> UnlinkIdentity<'_>
pub fn unlink_identity(&self) -> UnlinkIdentity<'_>
Unlink an identity
Sends a DELETE request to /auth/me/identities/{id}
let response = client.unlink_identity()
.id(id)
.send()
.await;Sourcepub fn list_transfers(&self) -> ListTransfers<'_>
pub fn list_transfers(&self) -> ListTransfers<'_>
List plugin transfers involving the current user
Returns both incoming (you are the recipient) and outgoing (you initiated) transfers. Each row carries plugin + actor names already joined in.
Sends a GET request to /auth/me/transfers/
let response = client.list_transfers()
.send()
.await;Sourcepub fn respond_transfer(&self) -> RespondTransfer<'_>
pub fn respond_transfer(&self) -> RespondTransfer<'_>
Respond to a transfer (accept / reject / cancel)
Recipient: action=accept (moves ownership) or action=reject. Sender: action=cancel. Idempotent — once terminal, returns 409.
Sends a POST request to /auth/me/transfers/{id}/
let response = client.respond_transfer()
.id(id)
.body(body)
.send()
.await;Sourcepub fn list_providers(&self) -> ListProviders<'_>
pub fn list_providers(&self) -> ListProviders<'_>
List enabled OAuth provider instances
Sends a GET request to /auth/providers/
let response = client.list_providers()
.send()
.await;Sourcepub fn start_o_auth(&self) -> StartOAuth<'_>
pub fn start_o_auth(&self) -> StartOAuth<'_>
Start OAuth flow for a provider instance
Redirects to the provider instance’s authorize page. Instance IDs are configured by the admin (e.g. github, gitlab, forgejo-acme). Set link=1 to attach this identity to the currently signed-in user.
Sends a GET request to /auth/{instance}/
let response = client.start_o_auth()
.instance(instance)
.link(link)
.return_to(return_to)
.send()
.await;Sourcepub fn oauth_callback(&self) -> OauthCallback<'_>
pub fn oauth_callback(&self) -> OauthCallback<'_>
OAuth callback for a provider instance
Sends a GET request to /auth/{instance}/callback/
let response = client.oauth_callback()
.instance(instance)
.code(code)
.state(state)
.send()
.await;Sourcepub fn healthz(&self) -> Healthz<'_>
pub fn healthz(&self) -> Healthz<'_>
Health check
Liveness/readiness probe. Returns { ok: true } (200) when DB + cache + storage are reachable, { ok: false } (503) otherwise. Intentionally terse to avoid leaking driver / setup-mode details to unauthenticated callers — admins should hit /api/admin/diagnostics for the full breakdown.
Sends a GET request to /healthz/
let response = client.healthz()
.send()
.await;Sourcepub fn get_uploads(&self) -> GetUploads<'_>
pub fn get_uploads(&self) -> GetUploads<'_>
Sends a GET request to /uploads/*
let response = client.get_uploads()
.send()
.await;