All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.6.0 - 2026-07-16
- Typed billing exceptions in
foxnose_sdk.errors, all subclasses ofFoxnoseAPIError:SpendCapExceeded(HTTP 402spend_cap_reached) — attrscap_usd,cycle_resets_at,raise_cap_urlPlanExhausted(HTTP 402plan_exhausted) — attrsaxis,window_resets_at,upgrade_urlPlanLimitExceeded(HTTP 403plan_limit_exceeded) — attrsentity,limit,current,upgrade_urlRateLimitExceeded(HTTP 429rate_limited) — attrretry_after(from theRetry-Afterheader)
- All four are exported from the package root and caught by
except FoxnoseAPIError. - Components on Collections —
NestedFieldMetahelper for building nested-fieldmeta(component,component_version,auto_update), andsync_collection_component()onManagementClient/AsyncManagementClientto advance pinned nested fields to a target Component version. New modelsSyncComponentResponse,SyncComponentSkippedItem, andComponentSyncConflictDetail.
- Renamed Folder → Collection across the Management API surface. New
*_collection*methods (list_collections,create_collection,list_collection_versions,list_collection_fields, etc.) and models (CollectionSummary,CollectionList,APICollectionSummary,APICollectionList) are the preferred names. The old*_folder*methods andFolderSummary/FolderListremain as deprecated aliases that emit a one-shotDeprecationWarningon first use and will be removed in 1.0.
- Composite folder support.
RolePermission.all_objectsis now optional (bool | None), so permissions for non-object-based content types — which the API returns withall_objects: null— parse without error.- Corrected the
roles_and_permissionsexample and the docs to the real permission wire-shape (content_type+actionslist, withall_objectsonly on object-based content types), the renamed content-type keys (collection-structure/collection-itemsin place offolder-*), and the real API-key create shape (description+ a singlerole).
0.5.0 - 2026-03-19
- Vector search models in
foxnose_sdk.flux.models:SearchModeenum (text,vector,vector_boosted,hybrid)VectorSearch— auto-generated embedding search configurationVectorFieldSearch— custom pre-computed embedding search configurationVectorBoostConfig— boost configuration forvector_boostedmodeHybridConfig— weight configuration forhybridmodeSearchRequest— typed search payload with cross-field validation
- Convenience methods on
FluxClientandAsyncFluxClient:vector_search()— semantic search with auto-generated embeddingsvector_field_search()— search with custom embedding vectorshybrid_search()— blended text + vector searchboosted_search()— keyword search boosted by vector similarity
- Vector Search documentation — dedicated guide covering all search modes
- All convenience methods support
offsetand**extra_bodypass-through for additional API parameters (where,sort, etc.)
examples/flux_client.pysearch example now uses correct API keys (find_textandresults)
0.4.2 - 2026-03-10
- Secure Management/Flux signing with query parameters:
SecureKeyAuthnow signs only the URL path (without query string)- aligns SDK signatures with server-side verification and Management auth docs
- prevents
401 authentication_failed/Invalid signatureon requests with query params
0.4.1 - 2026-03-05
- Flux role permission objects handling in Management clients:
- normalize permission object list responses consistently
- keep compatibility with paginated/object payload variants
- align role-scoped flux permission object behavior with production contract
0.4.0 - 2026-02-25
- Flux introspection methods on sync and async clients:
get_router()callsGET /{api_prefix}/_routerget_schema(folder_path)callsGET /{api_prefix}/{folder_path}/_schema
- API folder route description support in Management clients:
add_api_folder()andupdate_api_folder()now accept:description_get_onedescription_get_manydescription_searchdescription_schema
APIFolderSummarymodel fields for route descriptions:description_get_onedescription_get_manydescription_searchdescription_schema
0.3.0 - 2026-02-10
upsert_resource()method onManagementClientandAsyncManagementClient— create or update a resource byexternal_idin a single call. UsesPUT /folders/:folder/resources/?external_id=<value>.batch_upsert_resources()method onManagementClientandAsyncManagementClient— upsert multiple resources concurrently with configurablemax_concurrency,fail_fasterror handling mode, and optionalon_progresscallback.BatchUpsertItem,BatchItemError,BatchUpsertResultmodels for batch upsert input/output.external_idoptional parameter oncreate_resource()— assign an external identifier when creating a resource viaPOST.external_idfield onResourceSummarymodel — populated in API responses for resources that have an external identifier.
0.2.0 - 2026-01-26
- Model objects as identifiers — Management client methods now accept either string keys or corresponding model objects (e.g.
FolderSummary,ResourceSummary) wherever a*_keyparameter is used. This eliminates the need to manually extract.keyfrom objects returned by the API. _resolve_key()helper function for extracting string keys from model objects.- 13 type aliases for method parameters:
FolderRef,ResourceRef,RevisionRef,ComponentRef,SchemaVersionRef,OrgRef,ProjectRef,EnvironmentRef,ManagementRoleRef,FluxRoleRef,ManagementAPIKeyRef,FluxAPIKeyRef,APIRef.
0.1.0 - 2026-01-14
- Initial release of the FoxNose Python SDK
ManagementClientfor administrative operationsAsyncManagementClientfor async administrative operationsFluxClientfor content deliveryAsyncFluxClientfor async content delivery- JWT authentication with automatic token refresh
- API key authentication for Flux API
- Comprehensive type hints and Pydantic models
- Automatic retry with exponential backoff
- Full support for all Management API endpoints:
- Organizations
- Projects
- Environments
- Folders
- Resources
- Revisions
- Schema versions and fields
- Components
- Locales
- Management roles and permissions
- Flux roles and permissions
- Management API keys
- Flux API keys
- Getting started guide
- Authentication guide
- Management Client reference
- Flux Client reference
- Error handling guide
- Code examples