Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
568 commits
Select commit Hold shift + click to select a range
c78229a
fix(auth): prioritize first auth header
stainless-app[bot] Jun 18, 2026
39b1bbe
codegen metadata
stainless-app[bot] Jun 18, 2026
b8706db
codegen metadata
stainless-app[bot] Jun 18, 2026
95acfc0
codegen metadata
stainless-app[bot] Jun 18, 2026
638733a
codegen metadata
stainless-app[bot] Jun 19, 2026
1631fd4
codegen metadata
stainless-app[bot] Jun 19, 2026
72d3853
codegen metadata
stainless-app[bot] Jun 19, 2026
09ece82
codegen metadata
stainless-app[bot] Jun 19, 2026
6812720
codegen metadata
stainless-app[bot] Jun 21, 2026
2da86b1
codegen metadata
stainless-app[bot] Jun 22, 2026
d4af223
codegen metadata
stainless-app[bot] Jun 22, 2026
91e29a7
codegen metadata
stainless-app[bot] Jun 23, 2026
72629b2
codegen metadata
stainless-app[bot] Jun 23, 2026
0995dfa
codegen metadata
stainless-app[bot] Jun 23, 2026
7420e33
codegen metadata
stainless-app[bot] Jun 23, 2026
40fdc24
codegen metadata
stainless-app[bot] Jun 23, 2026
ad772a0
codegen metadata
stainless-app[bot] Jun 23, 2026
660d6fd
feat(api): api update
stainless-app[bot] Jun 23, 2026
4ec38df
codegen metadata
stainless-app[bot] Jun 24, 2026
e9f519e
codegen metadata
stainless-app[bot] Jun 24, 2026
b27dcdf
codegen metadata
stainless-app[bot] Jun 24, 2026
8c99541
codegen metadata
stainless-app[bot] Jun 24, 2026
771e278
codegen metadata
stainless-app[bot] Jun 25, 2026
f350961
codegen metadata
stainless-app[bot] Jun 25, 2026
bb84865
codegen metadata
stainless-app[bot] Jun 25, 2026
ef13005
codegen metadata
stainless-app[bot] Jun 25, 2026
9d30d73
codegen metadata
stainless-app[bot] Jun 25, 2026
a157d39
codegen metadata
stainless-app[bot] Jun 26, 2026
385bbd8
codegen metadata
stainless-app[bot] Jun 26, 2026
214e59c
codegen metadata
stainless-app[bot] Jun 26, 2026
dd648f7
feat(api): api update
stainless-app[bot] Jun 26, 2026
83fbca1
codegen metadata
stainless-app[bot] Jun 26, 2026
a07d307
codegen metadata
stainless-app[bot] Jun 26, 2026
dcb6a92
codegen metadata
stainless-app[bot] Jun 27, 2026
e31e8b8
codegen metadata
stainless-app[bot] Jun 27, 2026
4436df1
codegen metadata
stainless-app[bot] Jun 29, 2026
b1bf619
codegen metadata
stainless-app[bot] Jun 30, 2026
f5005bf
codegen metadata
stainless-app[bot] Jun 30, 2026
c139771
codegen metadata
stainless-app[bot] Jun 30, 2026
3a51f1d
codegen metadata
stainless-app[bot] Jun 30, 2026
1ee3607
codegen metadata
stainless-app[bot] Jun 30, 2026
bd351e8
codegen metadata
stainless-app[bot] Jul 1, 2026
793f9a1
codegen metadata
stainless-app[bot] Jul 1, 2026
2209fb3
codegen metadata
stainless-app[bot] Jul 1, 2026
87eebdb
codegen metadata
stainless-app[bot] Jul 1, 2026
21bdc36
codegen metadata
stainless-app[bot] Jul 1, 2026
fdb3cd6
codegen metadata
stainless-app[bot] Jul 1, 2026
4a27d6a
codegen metadata
stainless-app[bot] Jul 2, 2026
36fcb7c
codegen metadata
stainless-app[bot] Jul 2, 2026
86e9ef9
feat(api): api update
stainless-app[bot] Jul 2, 2026
a478f5c
codegen metadata
stainless-app[bot] Jul 2, 2026
4c4d714
codegen metadata
stainless-app[bot] Jul 2, 2026
1a2a585
codegen metadata
stainless-app[bot] Jul 2, 2026
f52de5b
codegen metadata
stainless-app[bot] Jul 2, 2026
94545f7
codegen metadata
stainless-app[bot] Jul 3, 2026
8c3f975
codegen metadata
stainless-app[bot] Jul 3, 2026
b85dbe4
codegen metadata
stainless-app[bot] Jul 3, 2026
291bb97
codegen metadata
stainless-app[bot] Jul 7, 2026
f0532aa
codegen metadata
stainless-app[bot] Jul 7, 2026
fc921e0
codegen metadata
stainless-app[bot] Jul 7, 2026
88ece8d
codegen metadata
stainless-app[bot] Jul 7, 2026
c1c1495
codegen metadata
stainless-app[bot] Jul 7, 2026
b57a459
feat(api): api update
stainless-app[bot] Jul 7, 2026
5e66c20
codegen metadata
stainless-app[bot] Jul 7, 2026
cccd595
codegen metadata
stainless-app[bot] Jul 7, 2026
3641e48
codegen metadata
stainless-app[bot] Jul 7, 2026
ac9dc10
codegen metadata
stainless-app[bot] Jul 8, 2026
f6e1296
codegen metadata
stainless-app[bot] Jul 8, 2026
6c950ce
codegen metadata
stainless-app[bot] Jul 8, 2026
8476d1c
codegen metadata
stainless-app[bot] Jul 8, 2026
c0a49e6
codegen metadata
stainless-app[bot] Jul 8, 2026
65d7092
codegen metadata
stainless-app[bot] Jul 9, 2026
1200d5e
codegen metadata
stainless-app[bot] Jul 9, 2026
c2725ee
codegen metadata
stainless-app[bot] Jul 9, 2026
898e12e
codegen metadata
stainless-app[bot] Jul 9, 2026
89e9bb4
codegen metadata
stainless-app[bot] Jul 9, 2026
cb491df
codegen metadata
stainless-app[bot] Jul 9, 2026
6bb303b
codegen metadata
stainless-app[bot] Jul 10, 2026
598c115
codegen metadata
stainless-app[bot] Jul 10, 2026
314e203
codegen metadata
stainless-app[bot] Jul 10, 2026
91425cd
codegen metadata
stainless-app[bot] Jul 10, 2026
6ff104a
codegen metadata
stainless-app[bot] Jul 10, 2026
2ed0f8b
codegen metadata
stainless-app[bot] Jul 10, 2026
832215d
codegen metadata
stainless-app[bot] Jul 11, 2026
477492e
codegen metadata
stainless-app[bot] Jul 11, 2026
eae92c8
codegen metadata
stainless-app[bot] Jul 11, 2026
144250f
codegen metadata
stainless-app[bot] Jul 11, 2026
b1245a2
codegen metadata
stainless-app[bot] Jul 12, 2026
9816846
codegen metadata
stainless-app[bot] Jul 13, 2026
46509fd
codegen metadata
stainless-app[bot] Jul 13, 2026
697ae09
feat(api): api update
stainless-app[bot] Jul 14, 2026
f5bf2fb
codegen metadata
stainless-app[bot] Jul 14, 2026
8d1e2d2
codegen metadata
stainless-app[bot] Jul 14, 2026
aef70f8
codegen metadata
stainless-app[bot] Jul 14, 2026
65e1324
codegen metadata
stainless-app[bot] Jul 15, 2026
e6aacfc
codegen metadata
stainless-app[bot] Jul 15, 2026
5a735d9
codegen metadata
stainless-app[bot] Jul 15, 2026
7d52b1a
codegen metadata
stainless-app[bot] Jul 16, 2026
b154318
codegen metadata
stainless-app[bot] Jul 16, 2026
d4d228b
codegen metadata
stainless-app[bot] Jul 16, 2026
fec40c8
codegen metadata
stainless-app[bot] Jul 17, 2026
25fb2b9
codegen metadata
stainless-app[bot] Jul 17, 2026
ee4cb1d
codegen metadata
stainless-app[bot] Jul 17, 2026
83a9f8f
codegen metadata
stainless-app[bot] Jul 17, 2026
a3ac8b7
codegen metadata
stainless-app[bot] Jul 17, 2026
69d8fe0
codegen metadata
stainless-app[bot] Jul 17, 2026
c507589
codegen metadata
stainless-app[bot] Jul 17, 2026
8e5440f
codegen metadata
stainless-app[bot] Jul 17, 2026
00e3526
codegen metadata
stainless-app[bot] Jul 17, 2026
805f051
codegen metadata
stainless-app[bot] Jul 17, 2026
fd78da6
feat(api): api update
stainless-app[bot] Jul 17, 2026
9aad48e
feat(stlc): configurable CI runner and private-production-repo suppor…
stainless-app[bot] Jul 18, 2026
175b3ca
codegen metadata
stainless-app[bot] Jul 18, 2026
ee25316
codegen metadata
stainless-app[bot] Jul 19, 2026
c4f58fe
codegen metadata
stainless-app[bot] Jul 19, 2026
a4db645
codegen metadata
stainless-app[bot] Jul 20, 2026
eca5561
codegen metadata
stainless-app[bot] Jul 20, 2026
7b9c53a
codegen metadata
stainless-app[bot] Jul 20, 2026
76a694c
codegen metadata
stainless-app[bot] Jul 20, 2026
bebefa5
codegen metadata
stainless-app[bot] Jul 20, 2026
025452d
codegen metadata
stainless-app[bot] Jul 21, 2026
813bcc7
codegen metadata
stainless-app[bot] Jul 21, 2026
9459caa
codegen metadata
stainless-app[bot] Jul 21, 2026
62344d2
codegen metadata
stainless-app[bot] Jul 21, 2026
ebbf408
codegen metadata
stainless-app[bot] Jul 22, 2026
dd7f180
feat(api): api update
stainless-app[bot] Jul 22, 2026
a505410
codegen metadata
stainless-app[bot] Jul 22, 2026
db0083c
codegen metadata
stainless-app[bot] Jul 23, 2026
59cc480
codegen metadata
stainless-app[bot] Jul 23, 2026
d1c1580
codegen metadata
stainless-app[bot] Jul 23, 2026
452a9d6
codegen metadata
stainless-app[bot] Jul 23, 2026
d25b32f
codegen metadata
stainless-app[bot] Jul 23, 2026
8539cd8
codegen metadata
stainless-app[bot] Jul 23, 2026
3b2637a
codegen metadata
stainless-app[bot] Jul 23, 2026
0dc4663
codegen metadata
stainless-app[bot] Jul 24, 2026
a3d1339
feat(api): api update
stainless-app[bot] Jul 24, 2026
5e26203
codegen metadata
stainless-app[bot] Jul 27, 2026
e42bf31
codegen metadata
stainless-app[bot] Jul 27, 2026
0df3051
codegen metadata
stainless-app[bot] Jul 27, 2026
cf359c1
codegen metadata
stainless-app[bot] Jul 27, 2026
c34519f
codegen metadata
stainless-app[bot] Jul 28, 2026
69d0137
codegen metadata
stainless-app[bot] Jul 28, 2026
40e319e
feat(api): api update
stainless-app[bot] Jul 28, 2026
74a55d0
codegen metadata
stainless-app[bot] Jul 28, 2026
1170016
codegen metadata
stainless-app[bot] Jul 29, 2026
79deb51
codegen metadata
stainless-app[bot] Jul 29, 2026
3d448ed
feat(api): api update
stainless-app[bot] Jul 29, 2026
3822f41
codegen metadata
stainless-app[bot] Jul 29, 2026
56e2a15
codegen metadata
stainless-app[bot] Jul 29, 2026
c1c4152
codegen metadata
stainless-app[bot] Jul 30, 2026
3568a7f
codegen metadata
stainless-app[bot] Jul 30, 2026
e84c4a8
codegen metadata
stainless-app[bot] Jul 30, 2026
67567da
codegen metadata
stainless-app[bot] Jul 31, 2026
75dc259
codegen metadata
stainless-app[bot] Jul 31, 2026
8257a2d
codegen metadata
stainless-app[bot] Jul 31, 2026
f91cc4c
codegen metadata
stainless-app[bot] Aug 3, 2026
5993c77
codegen metadata
stainless-app[bot] Aug 3, 2026
c7096e1
feat(api): api update
stainless-app[bot] Aug 4, 2026
5a85f6a
codegen metadata
stainless-app[bot] Aug 4, 2026
5f8817e
codegen metadata
stainless-app[bot] Aug 4, 2026
2aaaa37
codegen metadata
stainless-app[bot] Aug 4, 2026
516d72f
codegen metadata
stainless-app[bot] Aug 5, 2026
f24f99c
codegen metadata
stainless-app[bot] Aug 5, 2026
806678c
codegen metadata
stainless-app[bot] Aug 5, 2026
7a22c5c
feat(api): api update
stainless-app[bot] Aug 6, 2026
3bf0d4d
codegen metadata
stainless-app[bot] Aug 6, 2026
48b58e1
codegen metadata
stainless-app[bot] Aug 7, 2026
ac112b9
feat(api): api update
stainless-app[bot] Aug 7, 2026
844d9d3
codegen metadata
stainless-app[bot] Aug 7, 2026
5faf31a
codegen metadata
stainless-app[bot] Aug 10, 2026
2024430
feat(api): api update
stainless-app[bot] Aug 10, 2026
dc24dfa
codegen metadata
stainless-app[bot] Aug 10, 2026
4e8626b
codegen metadata
stainless-app[bot] Aug 11, 2026
ae40d86
codegen metadata
stainless-app[bot] Aug 12, 2026
8f239bb
feat(api): api update
stainless-app[bot] Aug 12, 2026
52764ef
codegen metadata
stainless-app[bot] Aug 13, 2026
d74b697
codegen metadata
stainless-app[bot] Aug 13, 2026
e33021e
codegen metadata
stainless-app[bot] Aug 13, 2026
dbe4ab2
feat(api): api update
stainless-app[bot] Aug 13, 2026
d794696
codegen metadata
stainless-app[bot] Aug 14, 2026
1ce22f0
feat(api): api update
stainless-app[bot] Aug 14, 2026
6be0212
codegen metadata
stainless-app[bot] Aug 14, 2026
c8830ba
codegen metadata
stainless-app[bot] Aug 15, 2026
72ea2b8
codegen metadata
stainless-app[bot] Aug 17, 2026
cdb260c
codegen metadata
stainless-app[bot] Aug 18, 2026
a13bd23
codegen metadata
stainless-app[bot] Aug 18, 2026
549bffd
codegen metadata
stainless-app[bot] Aug 18, 2026
91c466f
codegen metadata
stainless-app[bot] Aug 18, 2026
6417f25
codegen metadata
stainless-app[bot] Aug 19, 2026
908dc4e
codegen metadata
stainless-app[bot] Aug 19, 2026
65353a9
codegen metadata
stainless-app[bot] Aug 19, 2026
870df3f
feat(api): api update
stainless-app[bot] Aug 19, 2026
2fd0be2
codegen metadata
stainless-app[bot] Aug 19, 2026
8921d6c
codegen metadata
stainless-app[bot] Aug 19, 2026
b6f9858
codegen metadata
stainless-app[bot] Aug 19, 2026
a041692
codegen metadata
stainless-app[bot] Aug 20, 2026
c923941
codegen metadata
stainless-app[bot] Aug 20, 2026
5caa048
codegen metadata
stainless-app[bot] Aug 20, 2026
f1d105b
codegen metadata
stainless-app[bot] Aug 20, 2026
3a7e9f1
feat(api): api update
stainless-app[bot] Aug 21, 2026
a3a4880
codegen metadata
stainless-app[bot] Aug 21, 2026
94ebdec
codegen metadata
stainless-app[bot] Aug 21, 2026
781b4a4
codegen metadata
stainless-app[bot] Aug 21, 2026
bf1ca49
codegen metadata
stainless-app[bot] Aug 24, 2026
5668c70
codegen metadata
stainless-app[bot] Aug 24, 2026
0f4a4d0
codegen metadata
stainless-app[bot] Aug 24, 2026
985d76a
codegen metadata
stainless-app[bot] Aug 25, 2026
40e53ec
codegen metadata
stainless-app[bot] Aug 25, 2026
9cd5f1d
codegen metadata
stainless-app[bot] Aug 25, 2026
0fabce8
codegen metadata
stainless-app[bot] Aug 25, 2026
7a776a1
codegen metadata
stainless-app[bot] Aug 25, 2026
9e7c936
codegen metadata
stainless-app[bot] Aug 25, 2026
8842a6f
codegen metadata
stainless-app[bot] Aug 25, 2026
f4a62e1
codegen metadata
stainless-app[bot] Aug 26, 2026
97f57f0
codegen metadata
stainless-app[bot] Aug 26, 2026
dd3f693
codegen metadata
stainless-app[bot] Aug 26, 2026
24ab5f6
codegen metadata
stainless-app[bot] Aug 26, 2026
9b3a747
codegen metadata
stainless-app[bot] Aug 26, 2026
9ad9ca5
codegen metadata
stainless-app[bot] Aug 26, 2026
11f2cae
codegen metadata
stainless-app[bot] Aug 26, 2026
42efbb0
codegen metadata
stainless-app[bot] Aug 26, 2026
bc6bc2a
feat(api): api update
stainless-app[bot] Aug 26, 2026
2d27130
codegen metadata
stainless-app[bot] Aug 26, 2026
70fd0ce
codegen metadata
stainless-app[bot] Aug 27, 2026
c8b57bf
codegen metadata
stainless-app[bot] Aug 27, 2026
3452617
codegen metadata
stainless-app[bot] Aug 27, 2026
ecf14ac
feat(api): api update
stainless-app[bot] Aug 27, 2026
65de3ca
codegen metadata
stainless-app[bot] Aug 27, 2026
a2dab47
feat(api): api update
stainless-app[bot] Aug 27, 2026
d4d16e9
codegen metadata
stainless-app[bot] Aug 28, 2026
f8e4265
codegen metadata
stainless-app[bot] Aug 28, 2026
8e6f2ea
codegen metadata
stainless-app[bot] Aug 28, 2026
70b662b
feat(api): api update
stainless-app[bot] Aug 28, 2026
55f3322
codegen metadata
stainless-app[bot] Aug 28, 2026
db7a68c
codegen metadata
stainless-app[bot] Aug 28, 2026
bd2f797
codegen metadata
stainless-app[bot] Aug 28, 2026
a6c8d46
codegen metadata
stainless-app[bot] Aug 29, 2026
71950f2
codegen metadata
stainless-app[bot] Aug 31, 2026
fe26fe7
codegen metadata
stainless-app[bot] Aug 31, 2026
815fc37
codegen metadata
stainless-app[bot] Aug 31, 2026
3696614
codegen metadata
stainless-app[bot] Aug 31, 2026
0e55ae9
codegen metadata
stainless-app[bot] Aug 31, 2026
4d2f1e8
codegen metadata
stainless-app[bot] Aug 31, 2026
b2e1bd0
codegen metadata
stainless-app[bot] Sep 1, 2026
8c3bfbd
feat(api): api update
stainless-app[bot] Sep 1, 2026
9d22cc2
codegen metadata
stainless-app[bot] Sep 1, 2026
4071f36
feat(api): api update
stainless-app[bot] Sep 1, 2026
7ce1f21
codegen metadata
stainless-app[bot] Sep 1, 2026
e1d4488
codegen metadata
stainless-app[bot] Sep 1, 2026
905f95b
codegen metadata
stainless-app[bot] Sep 1, 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
14 changes: 7 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@ jobs:
lint:
timeout-minutes: 10
name: lint
runs-on: ${{ github.repository == 'stainless-sdks/reductoai-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
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
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Install Rye
run: |
Expand All @@ -44,9 +44,9 @@ jobs:
permissions:
contents: read
id-token: write
runs-on: ${{ github.repository == 'stainless-sdks/reductoai-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Install Rye
run: |
Expand All @@ -67,7 +67,7 @@ jobs:
github.repository == 'stainless-sdks/reductoai-python' &&
!startsWith(github.ref, 'refs/heads/stl/')
id: github-oidc
uses: actions/github-script@v8
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
with:
script: core.setOutput('github_token', await core.getIDToken());

Expand All @@ -84,10 +84,10 @@ jobs:
test:
timeout-minutes: 10
name: test
runs-on: ${{ github.repository == 'stainless-sdks/reductoai-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
runs-on: ${{ startsWith(github.repository, 'stainless-sdks/') && 'depot-ubuntu-24.04' || 'ubuntu-latest' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.fork
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Install Rye
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish-pypi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Install Rye
run: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release-doctor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:
if: github.repository == 'reductoai/reducto-python-sdk' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next')

steps:
- uses: actions/checkout@v6
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Check release environment
run: |
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.20.0"
".": "0.21.0"
}
6 changes: 3 additions & 3 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 17
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/reducto%2Freductoai-1b16fbf5337f188d0b66a5992f0d241be80c46c45412ef9830cb19b11437d1c6.yml
openapi_spec_hash: 88f89b5803058bfa20d5da05c2bcf754
config_hash: 9dd1f73da997aefc8516b226e0e7fed7
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/reducto/reductoai-0b85aa178335ea32bbc0813606fd8583f117ea653cc336cff17b0386564253d3.yml
openapi_spec_hash: 18cd0b55acc9185cc25398a75e82d91a
config_hash: 9fa10baf03f994be027bf73b29ac8572
26 changes: 26 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,15 @@ and offers both synchronous and asynchronous clients powered by [httpx](https://

It is generated with [Stainless](https://www.stainless.com/).

## MCP Server

Use the Reducto MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.

[![Add to Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en-US/install-mcp?name=reductoai-mcp&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsInJlZHVjdG9haS1tY3AiXSwiZW52Ijp7IlJFRFVDVE9fQVBJX0tFWSI6Ik15IEFQSSBLZXkifX0)
[![Install in VS Code](https://img.shields.io/badge/_-Add_to_VS_Code-blue?style=for-the-badge&logo=data:image/svg%2bxml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZmlsbD0iI0VFRSIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMzAuMjM1IDM5Ljg4NGEyLjQ5MSAyLjQ5MSAwIDAgMS0xLjc4MS0uNzNMMTIuNyAyNC43OGwtMy40NiAyLjYyNC0zLjQwNiAyLjU4MmExLjY2NSAxLjY2NSAwIDAgMS0xLjA4Mi4zMzggMS42NjQgMS42NjQgMCAwIDEtMS4wNDYtLjQzMWwtMi4yLTJhMS42NjYgMS42NjYgMCAwIDEgMC0yLjQ2M0w3LjQ1OCAyMCA0LjY3IDE3LjQ1MyAxLjUwNyAxNC41N2ExLjY2NSAxLjY2NSAwIDAgMSAwLTIuNDYzbDIuMi0yYTEuNjY1IDEuNjY1IDAgMCAxIDIuMTMtLjA5N2w2Ljg2MyA1LjIwOUwyOC40NTIuODQ0YTIuNDg4IDIuNDg4IDAgMCAxIDEuODQxLS43MjljLjM1MS4wMDkuNjk5LjA5MSAxLjAxOS4yNDVsOC4yMzYgMy45NjFhMi41IDIuNSAwIDAgMSAxLjQxNSAyLjI1M3YuMDk5LS4wNDVWMzMuMzd2LS4wNDUuMDk1YTIuNTAxIDIuNTAxIDAgMCAxLTEuNDE2IDIuMjU3bC04LjIzNSAzLjk2MWEyLjQ5MiAyLjQ5MiAwIDAgMS0xLjA3Ny4yNDZabS43MTYtMjguOTQ3LTExLjk0OCA5LjA2MiAxMS45NTIgOS4wNjUtLjAwNC0xOC4xMjdaIi8+PC9zdmc+)](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22reductoai-mcp%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22reductoai-mcp%22%5D%2C%22env%22%3A%7B%22REDUCTO_API_KEY%22%3A%22My%20API%20Key%22%7D%7D)

> Note: You may need to set environment variables in your MCP client.

## Documentation

The REST API documentation can be found on [docs.reductoai.com](https://docs.reductoai.com). The full API of this library can be found in [api.md](api.md).
Expand Down Expand Up @@ -129,6 +138,23 @@ response = client.parse.run(
print(response.enhance)
```

## File uploads

Request parameters that correspond to file uploads can be passed as `bytes`, or a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance or a tuple of `(filename, contents, media type)`.

```python
from pathlib import Path
from reducto import Reducto

client = Reducto()

client.upload(
file=Path("/path/to/file"),
)
```

The async client uses the exact same interface. If you pass a [`PathLike`](https://docs.python.org/3/library/os.html#os.PathLike) instance, the file contents will be read asynchronously automatically.

## Handling errors

When the library is unable to connect to the API (for example, due to network connection problems or a timeout), a subclass of `reducto.APIConnectionError` is raised.
Expand Down
66 changes: 36 additions & 30 deletions api.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,29 @@
# Shared Types

```python
from reducto.types import Upload
from reducto.types import (
AsyncEditResponse,
AsyncExtractResponse,
AsyncParseResponse,
AsyncPipelineResponse,
AsyncSplitResponse,
Chunking,
ClassifyResponse,
DirectWebhookConfig,
EditResponse,
ExtractResponse,
FigureAgentic,
PageRange,
ParseResponse,
PipelineResponse,
SplitLargeTables,
SplitResponse,
SvixWebhookConfig,
TableAgentic,
TextAgentic,
Upload,
WebhookConfigNew,
)
```

# Reducto
Expand All @@ -25,10 +47,8 @@ Types:
from reducto.types import (
AsyncConfigV3,
AsyncParseConfig,
AsyncParseResponse,
Enhance,
Formatting,
ParseResponse,
Retrieval,
Settings,
Spreadsheet,
Expand All @@ -39,7 +59,7 @@ from reducto.types import (
Methods:

- <code title="post /parse">client.parse.<a href="./src/reducto/resources/parse.py">run</a>(\*\*<a href="src/reducto/types/parse_run_params.py">params</a>) -> <a href="./src/reducto/types/parse_run_response.py">ParseRunResponse</a></code>
- <code title="post /parse_async">client.parse.<a href="./src/reducto/resources/parse.py">run_job</a>(\*\*<a href="src/reducto/types/parse_run_job_params.py">params</a>) -> <a href="./src/reducto/types/async_parse_response.py">AsyncParseResponse</a></code>
- <code title="post /parse_async">client.parse.<a href="./src/reducto/resources/parse.py">run_job</a>(\*\*<a href="src/reducto/types/parse_run_job_params.py">params</a>) -> <a href="./src/reducto/types/shared/async_parse_response.py">AsyncParseResponse</a></code>

# Extract

Expand All @@ -48,7 +68,6 @@ Types:
```python
from reducto.types import (
AsyncExtractConfig,
AsyncExtractResponse,
ExtractSettings,
ExtractUsage,
Instructions,
Expand All @@ -61,65 +80,52 @@ from reducto.types import (
Methods:

- <code title="post /extract">client.extract.<a href="./src/reducto/resources/extract.py">run</a>(\*\*<a href="src/reducto/types/extract_run_params.py">params</a>) -> <a href="./src/reducto/types/extract_run_response.py">ExtractRunResponse</a></code>
- <code title="post /extract_async">client.extract.<a href="./src/reducto/resources/extract.py">run_job</a>(\*\*<a href="src/reducto/types/extract_run_job_params.py">params</a>) -> <a href="./src/reducto/types/async_extract_response.py">AsyncExtractResponse</a></code>
- <code title="post /extract_async">client.extract.<a href="./src/reducto/resources/extract.py">run_job</a>(\*\*<a href="src/reducto/types/extract_run_job_params.py">params</a>) -> <a href="./src/reducto/types/shared/async_extract_response.py">AsyncExtractResponse</a></code>

# Split

Types:

```python
from reducto.types import (
DeepSplitPageEvidence,
ParseUsage,
SplitCategory,
SplitResponse,
SplitTableOptions,
SplitRunJobResponse,
)
from reducto.types import DeepSplitPageEvidence, ParseUsage, SplitCategory
```

Methods:

- <code title="post /split">client.split.<a href="./src/reducto/resources/split.py">run</a>(\*\*<a href="src/reducto/types/split_run_params.py">params</a>) -> <a href="./src/reducto/types/split_response.py">SplitResponse</a></code>
- <code title="post /split_async">client.split.<a href="./src/reducto/resources/split.py">run_job</a>(\*\*<a href="src/reducto/types/split_run_job_params.py">params</a>) -> <a href="./src/reducto/types/split_run_job_response.py">SplitRunJobResponse</a></code>
- <code title="post /split">client.split.<a href="./src/reducto/resources/split.py">run</a>(\*\*<a href="src/reducto/types/split_run_params.py">params</a>) -> <a href="./src/reducto/types/shared/split_response.py">SplitResponse</a></code>
- <code title="post /split_async">client.split.<a href="./src/reducto/resources/split.py">run_job</a>(\*\*<a href="src/reducto/types/split_run_job_params.py">params</a>) -> <a href="./src/reducto/types/shared/async_split_response.py">AsyncSplitResponse</a></code>

# Edit

Types:

```python
from reducto.types import BoundingBox, EditOptions, EditResponse, EditWidget, EditRunJobResponse
from reducto.types import BoundingBox, EditOptions, EditWidget
```

Methods:

- <code title="post /edit">client.edit.<a href="./src/reducto/resources/edit.py">run</a>(\*\*<a href="src/reducto/types/edit_run_params.py">params</a>) -> <a href="./src/reducto/types/edit_response.py">EditResponse</a></code>
- <code title="post /edit_async">client.edit.<a href="./src/reducto/resources/edit.py">run_job</a>(\*\*<a href="src/reducto/types/edit_run_job_params.py">params</a>) -> <a href="./src/reducto/types/edit_run_job_response.py">EditRunJobResponse</a></code>
- <code title="post /edit">client.edit.<a href="./src/reducto/resources/edit.py">run</a>(\*\*<a href="src/reducto/types/edit_run_params.py">params</a>) -> <a href="./src/reducto/types/shared/edit_response.py">EditResponse</a></code>
- <code title="post /edit_async">client.edit.<a href="./src/reducto/resources/edit.py">run_job</a>(\*\*<a href="src/reducto/types/edit_run_job_params.py">params</a>) -> <a href="./src/reducto/types/shared/async_edit_response.py">AsyncEditResponse</a></code>

# Pipeline

Types:

```python
from reducto.types import PipelineResponse, PipelineSettings, PipelineRunJobResponse
from reducto.types import PipelineSettings
```

Methods:

- <code title="post /pipeline">client.pipeline.<a href="./src/reducto/resources/pipeline.py">run</a>(\*\*<a href="src/reducto/types/pipeline_run_params.py">params</a>) -> <a href="./src/reducto/types/pipeline_response.py">PipelineResponse</a></code>
- <code title="post /pipeline_async">client.pipeline.<a href="./src/reducto/resources/pipeline.py">run_job</a>(\*\*<a href="src/reducto/types/pipeline_run_job_params.py">params</a>) -> <a href="./src/reducto/types/pipeline_run_job_response.py">PipelineRunJobResponse</a></code>
- <code title="post /pipeline">client.pipeline.<a href="./src/reducto/resources/pipeline.py">run</a>(\*\*<a href="src/reducto/types/pipeline_run_params.py">params</a>) -> <a href="./src/reducto/types/shared/pipeline_response.py">PipelineResponse</a></code>
- <code title="post /pipeline_async">client.pipeline.<a href="./src/reducto/resources/pipeline.py">run_job</a>(\*\*<a href="src/reducto/types/pipeline_run_job_params.py">params</a>) -> <a href="./src/reducto/types/shared/async_pipeline_response.py">AsyncPipelineResponse</a></code>

# Classify

Types:

```python
from reducto.types import ClassifyResponse, PageRange
```

Methods:

- <code title="post /classify">client.classify.<a href="./src/reducto/resources/classify.py">run</a>(\*\*<a href="src/reducto/types/classify_run_params.py">params</a>) -> <a href="./src/reducto/types/classify_response.py">ClassifyResponse</a></code>
- <code title="post /classify">client.classify.<a href="./src/reducto/resources/classify.py">run</a>(\*\*<a href="src/reducto/types/classify_run_params.py">params</a>) -> <a href="./src/reducto/types/shared/classify_response.py">ClassifyResponse</a></code>

# Webhook

Expand All @@ -138,7 +144,7 @@ Methods:
Types:

```python
from reducto.types import ExtractResponse, JobGetResponse, JobGetAllResponse
from reducto.types import JobGetResponse, JobGetAllResponse
```

Methods:
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 = "reductoai"
version = "0.20.0"
version = "0.21.0"
description = "The official Python library for the reducto API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down Expand Up @@ -168,7 +168,7 @@ show_error_codes = true
#
# We also exclude our `tests` as mypy doesn't always infer
# types correctly and Pyright will still catch any type errors.
exclude = ['src/reducto/_files.py', '_dev/.*.py', 'tests/.*']
exclude = ["src/reducto/_files.py", "_dev/.*.py", "tests/.*"]

strict_equality = true
implicit_reexport = true
Expand Down
2 changes: 1 addition & 1 deletion scripts/bootstrap
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ set -e

cd "$(dirname "$0")/.."

if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "$SKIP_BREW" != "1" ] && [ -t 0 ]; then
if [ -f "Brewfile" ] && [ "$(uname -s)" = "Darwin" ] && [ "${SKIP_BREW:-}" != "1" ] && [ -t 0 ]; then
brew bundle check >/dev/null 2>&1 || {
echo -n "==> Install Homebrew dependencies? (y/N): "
read -r response
Expand Down
4 changes: 4 additions & 0 deletions src/reducto/_base_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -558,6 +558,10 @@ def _build_request(
files = cast(HttpxRequestFiles, ForceMultipartDict())

prepared_url = self._prepare_url(options.url)
# preserve hard-coded query params from the url
if params and prepared_url.query:
params = {**dict(prepared_url.params.items()), **params}
prepared_url = prepared_url.copy_with(raw_path=prepared_url.raw_path.split(b"?", 1)[0])
if "_" in prepared_url.host:
# work around https://github.com/encode/httpx/discussions/2880
kwargs["extensions"] = {"sni_hostname": prepared_url.host.replace("_", "-")}
Expand Down
Loading