Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
227ebb6
codegen metadata
stainless-app[bot] Mar 6, 2026
4b6609f
codegen metadata
stainless-app[bot] Mar 7, 2026
2731abe
codegen metadata
stainless-app[bot] Mar 7, 2026
59a7a78
chore(ci): skip uploading artifacts on stainless-internal branches
stainless-app[bot] Mar 8, 2026
68fa0ae
feat(api): api update
stainless-app[bot] Mar 8, 2026
f7f6586
codegen metadata
stainless-app[bot] Mar 10, 2026
403ce72
feat(api): api update
stainless-app[bot] Mar 11, 2026
47ea2de
feat(api): api update
stainless-app[bot] Mar 11, 2026
f1eff44
feat(api): api update
stainless-app[bot] Mar 11, 2026
69a46d3
codegen metadata
stainless-app[bot] Mar 12, 2026
7a99863
codegen metadata
stainless-app[bot] Mar 12, 2026
5f3d61d
codegen metadata
stainless-app[bot] Mar 13, 2026
92b2375
codegen metadata
stainless-app[bot] Mar 14, 2026
a81ebd5
codegen metadata
stainless-app[bot] Mar 16, 2026
916df29
codegen metadata
stainless-app[bot] Mar 17, 2026
2d11f9b
fix(pydantic): do not pass `by_alias` unless set
stainless-app[bot] Mar 17, 2026
acdef8e
fix(deps): bump minimum typing-extensions version
stainless-app[bot] Mar 17, 2026
504ef27
chore(internal): tweak CI branches
stainless-app[bot] Mar 17, 2026
f3d8b79
codegen metadata
stainless-app[bot] Mar 17, 2026
ce53cef
codegen metadata
stainless-app[bot] Mar 18, 2026
509a588
fix: sanitize endpoint path params
stainless-app[bot] Mar 20, 2026
0b46bfa
codegen metadata
stainless-app[bot] Mar 22, 2026
6d2f4da
codegen metadata
stainless-app[bot] Mar 22, 2026
0d40ada
chore(internal): update gitignore
stainless-app[bot] Mar 24, 2026
daa9f60
codegen metadata
stainless-app[bot] Mar 24, 2026
a37ad05
chore(ci): skip lint on metadata-only changes
stainless-app[bot] Mar 25, 2026
112627e
codegen metadata
stainless-app[bot] Mar 25, 2026
c4c2498
codegen metadata
stainless-app[bot] Mar 26, 2026
343548c
codegen metadata
stainless-app[bot] Mar 26, 2026
35fb0ec
codegen metadata
stainless-app[bot] Mar 26, 2026
2a9632f
feat(internal): implement indices array format for query and form ser…
stainless-app[bot] Mar 27, 2026
c30b386
codegen metadata
stainless-app[bot] Mar 27, 2026
08ac5fa
codegen metadata
stainless-app[bot] Apr 2, 2026
c1d7c8a
release: 0.1.0-alpha.4
stainless-app[bot] Apr 2, 2026
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
26 changes: 16 additions & 10 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
name: CI
on:
push:
branches-ignore:
- 'generated'
- 'codegen/**'
- 'integrated/**'
- 'stl-preview-head/**'
- 'stl-preview-base/**'
branches:
- '**'
- '!integrated/**'
- '!stl-preview-head/**'
- '!stl-preview-base/**'
- '!generated'
- '!codegen/**'
- 'codegen/stl/**'
pull_request:
branches-ignore:
- 'stl-preview-head/**'
Expand All @@ -17,7 +19,7 @@ jobs:
timeout-minutes: 10
name: lint
runs-on: ${{ github.repository == 'stainless-sdks/slash-sdk-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
steps:
- uses: actions/checkout@v6

Expand All @@ -36,7 +38,7 @@ jobs:
run: ./scripts/lint

build:
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
if: (github.event_name == 'push' || github.event.pull_request.head.repo.fork) && (github.event_name != 'push' || github.event.head_commit.message != 'codegen metadata')
timeout-minutes: 10
name: build
permissions:
Expand All @@ -61,14 +63,18 @@ jobs:
run: rye build

- name: Get GitHub OIDC Token
if: github.repository == 'stainless-sdks/slash-sdk-python'
if: |-
github.repository == 'stainless-sdks/slash-sdk-python' &&
!startsWith(github.ref, 'refs/heads/stl/')
id: github-oidc
uses: actions/github-script@v8
with:
script: core.setOutput('github_token', await core.getIDToken());

- name: Upload tarball
if: github.repository == 'stainless-sdks/slash-sdk-python'
if: |-
github.repository == 'stainless-sdks/slash-sdk-python' &&
!startsWith(github.ref, 'refs/heads/stl/')
env:
URL: https://pkg.stainless.com/s
AUTH: ${{ steps.github-oidc.outputs.github_token }}
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
.prism.log
.stdy.log
_dev

__pycache__
Expand Down
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "0.1.0-alpha.3"
".": "0.1.0-alpha.4"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 55
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/slash-financial--inc-dash%2Fslash-sdk-773c90f079c54155b39d84d7cf37ff7a2b89c74865c56a6cf86db730c36751a2.yml
openapi_spec_hash: 95129e670c6a3e832a1ea3fc64c07b11
configured_endpoints: 52
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/slash-financial--inc-dash%2Fslash-sdk-7f31a3be697a2cfed2f8a155edafa048098dcdcd00c9a562ac1e0067d2518be3.yml
openapi_spec_hash: 639ee7b20e3b634d76def08e5c65656e
config_hash: 9a5c338a583a0bc1a2e798ec5b94d860
27 changes: 27 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,32 @@
# Changelog

## 0.1.0-alpha.4 (2026-04-02)

Full Changelog: [v0.1.0-alpha.3...v0.1.0-alpha.4](https://github.com/slashfi/slash-sdk-python/compare/v0.1.0-alpha.3...v0.1.0-alpha.4)

### Features

* **api:** api update ([f1eff44](https://github.com/slashfi/slash-sdk-python/commit/f1eff440f3ef4ed6a0495ccba3ecd7826d862c9c))
* **api:** api update ([47ea2de](https://github.com/slashfi/slash-sdk-python/commit/47ea2de42a4430641a44e10101e79693cfa94ba4))
* **api:** api update ([403ce72](https://github.com/slashfi/slash-sdk-python/commit/403ce72fe8450996c6eec0b12d18605d6fd1ba10))
* **api:** api update ([68fa0ae](https://github.com/slashfi/slash-sdk-python/commit/68fa0aeac982ca051911fb116fc585f60ec8d3b5))
* **internal:** implement indices array format for query and form serialization ([2a9632f](https://github.com/slashfi/slash-sdk-python/commit/2a9632fd3fd8c3e7689f72bdf27db90b106adf20))


### Bug Fixes

* **deps:** bump minimum typing-extensions version ([acdef8e](https://github.com/slashfi/slash-sdk-python/commit/acdef8e72361b2a7b24485d67f68e357c48de380))
* **pydantic:** do not pass `by_alias` unless set ([2d11f9b](https://github.com/slashfi/slash-sdk-python/commit/2d11f9b1903e6f454ebb23e1141ebaa03373cfb6))
* sanitize endpoint path params ([509a588](https://github.com/slashfi/slash-sdk-python/commit/509a588cf24e5549ea16f55a4c178a1b9a221935))


### Chores

* **ci:** skip lint on metadata-only changes ([a37ad05](https://github.com/slashfi/slash-sdk-python/commit/a37ad0591c6a413ce5957904697c8db606af4c3d))
* **ci:** skip uploading artifacts on stainless-internal branches ([59a7a78](https://github.com/slashfi/slash-sdk-python/commit/59a7a78b6e534d5e3acb42824220a1e11c9c3a60))
* **internal:** tweak CI branches ([504ef27](https://github.com/slashfi/slash-sdk-python/commit/504ef27f0aab30e84c40a2f08d89eda3085d7547))
* **internal:** update gitignore ([0d40ada](https://github.com/slashfi/slash-sdk-python/commit/0d40adadd47ddc74051495812222415aeb254f72))

## 0.1.0-alpha.3 (2026-03-06)

Full Changelog: [v0.1.0-alpha.2...v0.1.0-alpha.3](https://github.com/slashfi/slash-sdk-python/compare/v0.1.0-alpha.2...v0.1.0-alpha.3)
Expand Down
25 changes: 0 additions & 25 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -146,31 +146,6 @@ Methods:

- <code title="get /card-product">client.card_product.<a href="./src/slash_sdk/resources/card_product.py">list</a>(\*\*<a href="src/slash_sdk/types/card_product_list_params.py">params</a>) -> <a href="./src/slash_sdk/types/card_product_list_response.py">CardProductListResponse</a></code>

# SlashHandle

Types:

```python
from slash_sdk.types import SlashHandleListResponse
```

Methods:

- <code title="get /slash-handle">client.slash_handle.<a href="./src/slash_sdk/resources/slash_handle.py">list</a>(\*\*<a href="src/slash_sdk/types/slash_handle_list_params.py">params</a>) -> <a href="./src/slash_sdk/types/slash_handle_list_response.py">SlashHandleListResponse</a></code>

# Pay

Types:

```python
from slash_sdk.types import SlashHandle, PaySendResponse
```

Methods:

- <code title="get /pay">client.pay.<a href="./src/slash_sdk/resources/pay.py">retrieve</a>() -> <a href="./src/slash_sdk/types/slash_handle.py">SlashHandle</a></code>
- <code title="post /pay">client.pay.<a href="./src/slash_sdk/resources/pay.py">send</a>(\*\*<a href="src/slash_sdk/types/pay_send_params.py">params</a>) -> <a href="./src/slash_sdk/types/pay_send_response.py">PaySendResponse</a></code>

# Webhook

Types:
Expand Down
4 changes: 2 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "slash-sdk"
version = "0.1.0-alpha.3"
version = "0.1.0-alpha.4"
description = "The official Python library for the slash-sdk API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand All @@ -11,7 +11,7 @@ authors = [
dependencies = [
"httpx>=0.23.0, <1",
"pydantic>=1.9.0, <3",
"typing-extensions>=4.10, <5",
"typing-extensions>=4.14, <5",
"anyio>=3.5.0, <5",
"distro>=1.7.0, <2",
"sniffio",
Expand Down
76 changes: 0 additions & 76 deletions src/slash_sdk/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@
if TYPE_CHECKING:
from .resources import (
fdx,
pay,
card,
crypto,
oauth2,
Expand All @@ -48,13 +47,11 @@
transaction,
card_product,
legal_entity,
slash_handle,
virtual_account,
developer_account,
merchant_category,
developer_application,
)
from .resources.pay import PayResource, AsyncPayResource
from .resources.crypto import CryptoResource, AsyncCryptoResource
from .resources.account import AccountResource, AsyncAccountResource
from .resources.fdx.fdx import FdxResource, AsyncFdxResource
Expand All @@ -66,7 +63,6 @@
from .resources.transaction import TransactionResource, AsyncTransactionResource
from .resources.card_product import CardProductResource, AsyncCardProductResource
from .resources.legal_entity import LegalEntityResource, AsyncLegalEntityResource
from .resources.slash_handle import SlashHandleResource, AsyncSlashHandleResource
from .resources.oauth2.oauth2 import Oauth2Resource, AsyncOauth2Resource
from .resources.virtual_account import VirtualAccountResource, AsyncVirtualAccountResource
from .resources.developer_account import DeveloperAccountResource, AsyncDeveloperAccountResource
Expand Down Expand Up @@ -207,18 +203,6 @@ def card_product(self) -> CardProductResource:

return CardProductResource(self)

@cached_property
def slash_handle(self) -> SlashHandleResource:
from .resources.slash_handle import SlashHandleResource

return SlashHandleResource(self)

@cached_property
def pay(self) -> PayResource:
from .resources.pay import PayResource

return PayResource(self)

@cached_property
def webhook(self) -> WebhookResource:
from .resources.webhook import WebhookResource
Expand Down Expand Up @@ -548,18 +532,6 @@ def card_product(self) -> AsyncCardProductResource:

return AsyncCardProductResource(self)

@cached_property
def slash_handle(self) -> AsyncSlashHandleResource:
from .resources.slash_handle import AsyncSlashHandleResource

return AsyncSlashHandleResource(self)

@cached_property
def pay(self) -> AsyncPayResource:
from .resources.pay import AsyncPayResource

return AsyncPayResource(self)

@cached_property
def webhook(self) -> AsyncWebhookResource:
from .resources.webhook import AsyncWebhookResource
Expand Down Expand Up @@ -822,18 +794,6 @@ def card_product(self) -> card_product.CardProductResourceWithRawResponse:

return CardProductResourceWithRawResponse(self._client.card_product)

@cached_property
def slash_handle(self) -> slash_handle.SlashHandleResourceWithRawResponse:
from .resources.slash_handle import SlashHandleResourceWithRawResponse

return SlashHandleResourceWithRawResponse(self._client.slash_handle)

@cached_property
def pay(self) -> pay.PayResourceWithRawResponse:
from .resources.pay import PayResourceWithRawResponse

return PayResourceWithRawResponse(self._client.pay)

@cached_property
def webhook(self) -> webhook.WebhookResourceWithRawResponse:
from .resources.webhook import WebhookResourceWithRawResponse
Expand Down Expand Up @@ -943,18 +903,6 @@ def card_product(self) -> card_product.AsyncCardProductResourceWithRawResponse:

return AsyncCardProductResourceWithRawResponse(self._client.card_product)

@cached_property
def slash_handle(self) -> slash_handle.AsyncSlashHandleResourceWithRawResponse:
from .resources.slash_handle import AsyncSlashHandleResourceWithRawResponse

return AsyncSlashHandleResourceWithRawResponse(self._client.slash_handle)

@cached_property
def pay(self) -> pay.AsyncPayResourceWithRawResponse:
from .resources.pay import AsyncPayResourceWithRawResponse

return AsyncPayResourceWithRawResponse(self._client.pay)

@cached_property
def webhook(self) -> webhook.AsyncWebhookResourceWithRawResponse:
from .resources.webhook import AsyncWebhookResourceWithRawResponse
Expand Down Expand Up @@ -1064,18 +1012,6 @@ def card_product(self) -> card_product.CardProductResourceWithStreamingResponse:

return CardProductResourceWithStreamingResponse(self._client.card_product)

@cached_property
def slash_handle(self) -> slash_handle.SlashHandleResourceWithStreamingResponse:
from .resources.slash_handle import SlashHandleResourceWithStreamingResponse

return SlashHandleResourceWithStreamingResponse(self._client.slash_handle)

@cached_property
def pay(self) -> pay.PayResourceWithStreamingResponse:
from .resources.pay import PayResourceWithStreamingResponse

return PayResourceWithStreamingResponse(self._client.pay)

@cached_property
def webhook(self) -> webhook.WebhookResourceWithStreamingResponse:
from .resources.webhook import WebhookResourceWithStreamingResponse
Expand Down Expand Up @@ -1185,18 +1121,6 @@ def card_product(self) -> card_product.AsyncCardProductResourceWithStreamingResp

return AsyncCardProductResourceWithStreamingResponse(self._client.card_product)

@cached_property
def slash_handle(self) -> slash_handle.AsyncSlashHandleResourceWithStreamingResponse:
from .resources.slash_handle import AsyncSlashHandleResourceWithStreamingResponse

return AsyncSlashHandleResourceWithStreamingResponse(self._client.slash_handle)

@cached_property
def pay(self) -> pay.AsyncPayResourceWithStreamingResponse:
from .resources.pay import AsyncPayResourceWithStreamingResponse

return AsyncPayResourceWithStreamingResponse(self._client.pay)

@cached_property
def webhook(self) -> webhook.AsyncWebhookResourceWithStreamingResponse:
from .resources.webhook import AsyncWebhookResourceWithStreamingResponse
Expand Down
11 changes: 9 additions & 2 deletions src/slash_sdk/_compat.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from typing import TYPE_CHECKING, Any, Union, Generic, TypeVar, Callable, cast, overload
from datetime import date, datetime
from typing_extensions import Self, Literal
from typing_extensions import Self, Literal, TypedDict

import pydantic
from pydantic.fields import FieldInfo
Expand Down Expand Up @@ -131,6 +131,10 @@ def model_json(model: pydantic.BaseModel, *, indent: int | None = None) -> str:
return model.model_dump_json(indent=indent)


class _ModelDumpKwargs(TypedDict, total=False):
by_alias: bool


def model_dump(
model: pydantic.BaseModel,
*,
Expand All @@ -142,14 +146,17 @@ def model_dump(
by_alias: bool | None = None,
) -> dict[str, Any]:
if (not PYDANTIC_V1) or hasattr(model, "model_dump"):
kwargs: _ModelDumpKwargs = {}
if by_alias is not None:
kwargs["by_alias"] = by_alias
return model.model_dump(
mode=mode,
exclude=exclude,
exclude_unset=exclude_unset,
exclude_defaults=exclude_defaults,
# warnings are not supported in Pydantic v1
warnings=True if PYDANTIC_V1 else warnings,
by_alias=by_alias,
**kwargs,
)
return cast(
"dict[str, Any]",
Expand Down
5 changes: 4 additions & 1 deletion src/slash_sdk/_qs.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,10 @@ def _stringify_item(
items.extend(self._stringify_item(key, item, opts))
return items
elif array_format == "indices":
raise NotImplementedError("The array indices format is not supported yet")
items = []
for i, item in enumerate(value):
items.extend(self._stringify_item(f"{key}[{i}]", item, opts))
return items
elif array_format == "brackets":
items = []
key = key + "[]"
Expand Down
1 change: 1 addition & 0 deletions src/slash_sdk/_utils/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from ._path import path_template as path_template
from ._sync import asyncify as asyncify
from ._proxy import LazyProxy as LazyProxy
from ._utils import (
Expand Down
Loading
Loading