Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/skills/gumlet-python-sdk/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,5 +77,5 @@ except APIStatusError as err:

## Reference files

- [README.md](../../../README.md) — full feature tour: client options, retries and timeouts, logging.
- [README.md](../../../README.md) — full feature tour: client options, retries and timeouts, webhooks, logging.
- [api.md](../../../api.md) — complete catalogue of every operation with request and response types.
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "1.3.3"
".": "1.4.0"
}
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,25 @@
# Changelog

## [1.4.0](https://github.com/gumlet/python-sdk/compare/v1.3.3...v1.4.0) (2026-11-05)


### ⚠ BREAKING CHANGES

* **api:** 4 breaking changes to the SDK surface.
- Added required body field `workspace_id` to `videoAssets.upload`.
- Added required body field `workspace_id` to `videoAssets.deleteMany`.
- Added required body field `workspace_id` to `videoAssets.tagMany`.
- Added required body field `workspace_id` to `videoPlaylists.create`.

### Features

* **api:** update SDK surface (8 changes) ([1380d95](https://github.com/gumlet/python-sdk/commit/1380d95c4d96245759dccdff50755915b8703c3f))


### Chores

* release 1.4.0 ([08ba2c0](https://github.com/gumlet/python-sdk/commit/08ba2c036f720e69bcb7962e529713a22ebb560a))

## [1.3.3](https://github.com/gumlet/python-sdk/compare/v1.3.2...v1.3.3) (2026-10-25)


Expand Down
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ The full API of this library can be found in [api.md](./api.md).
- [Errors](#errors)
- [Client Options](#client-options)
- [Retries and Timeouts](#retries-and-timeouts)
- [Webhooks](#webhooks)
- [Helpers](#helpers)
- [Logging](#logging)
- [Requirements](#requirements)
Expand Down Expand Up @@ -149,6 +150,24 @@ Generated clients support request timeouts and retry temporary failures such as

<br />

## Webhooks

The webhook helper verifies the signature of each delivery your server receives, then decodes its body into a typed event. Pass it the request body exactly as it arrived, before any JSON parsing, together with the request headers: the signature covers the raw body, so one that was parsed and re-serialized fails verification. A delivery whose signature does not verify is rejected before it is decoded.

```python
# `payload` is the raw request body; `headers` holds the request headers.
event = client.webhooks.unwrap(payload, headers=headers)
```

The signing secret comes from the client's `webhook_secret` option, which defaults to the `GUMLET_WEBHOOK_SECRET` environment variable. Pass `key` to use a different secret for one call.

The same resource also has:

- `client.webhooks.verify_signature(payload, headers)` checks a delivery's signature, and fails when it does not verify.
- `client.webhooks.parse_unsafe(payload)` decodes a body into a typed event without checking its signature. Use it only for a body verified elsewhere, or in tests.

<br />

## Helpers

- Use `client.with_raw_response.<resource>.<method>(...)` to access the raw `httpx.Response` and parse it yourself.
Expand All @@ -160,6 +179,7 @@ Generated clients support request timeouts and retry temporary failures such as

- Set the `GUMLET_LOG` environment variable to `info` or `debug` to enable HTTP logging.
- Logs are emitted through the standard `logging` module under the `gumlet` logger.
- Importing the SDK wraps the process's log record factory: records from the SDK, `httpx`, `httpcore`, `hpack` and `websockets` loggers have credential headers, credential query parameters and URL userinfo logged as `***`. A record factory installed later that does not chain to the previous one turns this off.

<br />

Expand Down
2 changes: 1 addition & 1 deletion SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,5 +77,5 @@ except APIStatusError as err:

## Reference files

- [README.md](./README.md) — full feature tour: client options, retries and timeouts, logging.
- [README.md](./README.md) — full feature tour: client options, retries and timeouts, webhooks, logging.
- [api.md](./api.md) — complete catalogue of every operation with request and response types.
8 changes: 5 additions & 3 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,7 @@ video_asset = client.video_assets.upload(
],
playlist_id="6597acd5ed6f26a9c5ca9633",
folder="697375fbfa2d1037283140e4",
workspace_id="646df1c9173a4a2fcac180b4",
)
```

Expand Down Expand Up @@ -330,6 +331,7 @@ Delete multiple VOD assets at once.
video_asset = client.video_assets.delete_many(
asset_list=["64249a8858fd3a208b987702", "64784bae843b155b829bbf84"],
source_id="60bd2ba353ff754d28179ee6",
workspace_id="60bd2ba353ff754d28179ee6",
)
```

Expand All @@ -348,6 +350,7 @@ video_asset = client.video_assets.tag_many(
source_id="60bd2ba353ff754d28179ee6",
add_tags=["tag-1"],
remove_tags=["playlist-1"],
workspace_id="60bd2ba353ff754d28179ee6",
)
```

Expand Down Expand Up @@ -647,6 +650,7 @@ video_playlist = client.video_playlists.create(
collection_id="{{video-source-id}}",
title="Playlist-Title",
description="This is description for playlist.",
workspace_id="{{video-source-id}}",
)
```

Expand All @@ -660,9 +664,7 @@ Get all playlists for given workspace
| Response | [`VideoPlaylistListAllResponse`](./src/gumlet/types/video_playlist_list_all_response.py) |

```python
video_playlist = client.video_playlists.list_all(
collection_id="collection_id",
)
video_playlist = client.video_playlists.list_all()
```

### Add asset to playlist
Expand Down
5 changes: 2 additions & 3 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "gumlet"
version = "1.3.3" # x-release-please-version
version = "1.4.0" # x-release-please-version
description = "Gumlet helps developers deliver online video and images. This API encompasses Gumlet Video, Image and Video Analytics functionality to help you build your products better and faster than ever before."
readme = "README.md"
license = "Apache-2.0"
Expand All @@ -13,7 +13,6 @@ dependencies = [
"pydantic>=1.9.0, <3",
"typing-extensions>=4.14, <5",
"anyio>=3.5.0, <5",
"distro>=1.7.0, <2",
"sniffio",
]

Expand All @@ -28,7 +27,7 @@ documentation = "https://docs.gumlet.com/reference"

[project.optional-dependencies]
aiohttp = ["aiohttp", "httpx_aiohttp>=0.1.9"]
webhooks = ["standardwebhooks >= 1.0.1, < 2"]
webhooks = []

[build-system]
requires = ["hatchling>=1.18.0"]
Expand Down
74 changes: 61 additions & 13 deletions scalar-sdk.manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "Gumlet",
"slug": "gumlet",
"generatorVersion": "0.36.9",
"generatorVersion": "0.38.0",
"servers": [
"https://api.gumlet.com/v1"
],
Expand Down Expand Up @@ -1548,7 +1548,8 @@
"enable_drm",
"call_to_actions",
"playlist_id",
"folder"
"folder",
"workspace_id"
],
"publicBodyParams": [
"collection_id",
Expand Down Expand Up @@ -1576,12 +1577,13 @@
"enable_drm",
"call_to_actions",
"playlist_id",
"folder"
"folder",
"workspace_id"
],
"bodyParamDetails": [
{
"name": "collection_id",
"required": true
"required": false
},
{
"name": "profile_id",
Expand Down Expand Up @@ -1682,6 +1684,10 @@
{
"name": "folder",
"required": false
},
{
"name": "workspace_id",
"required": true
}
],
"pathParamDetails": [],
Expand Down Expand Up @@ -3062,11 +3068,13 @@
"publicHeaderParams": [],
"bodyParams": [
"asset_list",
"source_id"
"source_id",
"workspace_id"
],
"publicBodyParams": [
"asset_list",
"source_id"
"source_id",
"workspace_id"
],
"bodyParamDetails": [
{
Expand All @@ -3075,6 +3083,10 @@
},
{
"name": "source_id",
"required": false
},
{
"name": "workspace_id",
"required": true
}
],
Expand Down Expand Up @@ -3199,13 +3211,15 @@
"asset_list",
"source_id",
"add_tags",
"remove_tags"
"remove_tags",
"workspace_id"
],
"publicBodyParams": [
"asset_list",
"source_id",
"add_tags",
"remove_tags"
"remove_tags",
"workspace_id"
],
"bodyParamDetails": [
{
Expand All @@ -3214,7 +3228,7 @@
},
{
"name": "source_id",
"required": true
"required": false
},
{
"name": "add_tags",
Expand All @@ -3223,6 +3237,10 @@
{
"name": "remove_tags",
"required": true
},
{
"name": "workspace_id",
"required": true
}
],
"pathParamDetails": [],
Expand Down Expand Up @@ -4208,13 +4226,15 @@
"queryParams": [
"start_at",
"end_at",
"workspace_id",
"collection_id",
"page",
"page_size"
],
"publicQueryParams": [
"start_at",
"end_at",
"workspace_id",
"collection_id",
"page",
"page_size"
Expand All @@ -4238,6 +4258,12 @@
"style": "form",
"explode": true
},
{
"name": "workspace_id",
"required": false,
"style": "form",
"explode": true
},
{
"name": "collection_id",
"required": false,
Expand Down Expand Up @@ -5551,17 +5577,19 @@
"bodyParams": [
"collection_id",
"title",
"description"
"description",
"workspace_id"
],
"publicBodyParams": [
"collection_id",
"title",
"description"
"description",
"workspace_id"
],
"bodyParamDetails": [
{
"name": "collection_id",
"required": true
"required": false
},
{
"name": "title",
Expand All @@ -5570,6 +5598,10 @@
{
"name": "description",
"required": false
},
{
"name": "workspace_id",
"required": true
}
],
"pathParamDetails": [],
Expand Down Expand Up @@ -5686,9 +5718,11 @@
"pathParams": [],
"publicPathParams": [],
"queryParams": [
"workspace_id",
"collection_id"
],
"publicQueryParams": [
"workspace_id",
"collection_id"
],
"headerParams": [],
Expand All @@ -5698,9 +5732,15 @@
"bodyParamDetails": [],
"pathParamDetails": [],
"queryParamDetails": [
{
"name": "workspace_id",
"required": false,
"style": "form",
"explode": true
},
{
"name": "collection_id",
"required": true,
"required": false,
"style": "form",
"explode": true
}
Expand Down Expand Up @@ -13451,6 +13491,7 @@
"publicPathParams": [],
"queryParams": [
"search_query",
"workspace_id",
"collection_id",
"size",
"assets_offset",
Expand All @@ -13460,6 +13501,7 @@
],
"publicQueryParams": [
"search_query",
"workspace_id",
"collection_id",
"size",
"assets_offset",
Expand All @@ -13480,6 +13522,12 @@
"style": "form",
"explode": true
},
{
"name": "workspace_id",
"required": false,
"style": "form",
"explode": true
},
{
"name": "collection_id",
"required": false,
Expand Down
Loading
Loading