From dfda92581d2186e74561ccdbca64935bf2d46351 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Sat, 30 May 2026 01:04:27 +0000 Subject: [PATCH 1/2] =?UTF-8?q?##=20Python=20SDK=20Changes:=20*=20`dub.eve?= =?UTF-8?q?nts.list()`:=20=20=20*=20=20`request.partner=5Ftag=5Fid`=20**Ad?= =?UTF-8?q?ded**=20=20=20*=20=20`response.[].union(sale).sale.payment=5Fpr?= =?UTF-8?q?ocessor`=20**Changed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20?= =?UTF-8?q?`dub.partner=5Fapplications.reject()`:=20=20`request`=20**Chang?= =?UTF-8?q?ed**=20(Breaking=20=E2=9A=A0=EF=B8=8F)=20*=20`dub.commissions.l?= =?UTF-8?q?ist()`:=20=20=20*=20=20`request`=20**Changed**=20=20=20*=20=20`?= =?UTF-8?q?response.[].type.enum(referral)`=20**Added**=20(Breaking=20?= =?UTF-8?q?=E2=9A=A0=EF=B8=8F)=20*=20`dub.commissions.update()`:=20=20`res?= =?UTF-8?q?ponse.type.enum(referral)`=20**Added**=20(Breaking=20=E2=9A=A0?= =?UTF-8?q?=EF=B8=8F)=20*=20`dub.analytics.retrieve()`:=20=20`request`=20*?= =?UTF-8?q?*Changed**=20*=20`dub.folders.update()`:=20=20=20*=20=20`reques?= =?UTF-8?q?t=5Fbody.access=5Flevel`=20**Changed**=20*=20`dub.track.sale()`?= =?UTF-8?q?:=20=20=20*=20=20`request.payment=5Fprocessor`=20**Changed**=20?= =?UTF-8?q?*=20`dub.partners.list()`:=20=20`response.[]`=20**Changed**=20*?= =?UTF-8?q?=20`dub.partners.create()`:=20=20`response`=20**Changed**?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .speakeasy/gen.lock | 360 +++++++++++------- .speakeasy/gen.yaml | 2 +- .speakeasy/workflow.lock | 12 +- RELEASES.md | 12 +- codeSamples.yaml | 6 +- .../components/commissioncreatedeventtype.md | 13 +- docs/models/components/networkstatus.md | 22 ++ .../components/partnerenrolledeventdata.md | 10 +- docs/models/components/tags.md | 9 + ...> approvepartnerapplicationrequestbody.md} | 2 +- ... approvepartnerapplicationresponsebody.md} | 2 +- .../operations/createpartnernetworkstatus.md | 22 ++ .../operations/createpartnerresponsebody.md | 10 +- docs/models/operations/createpartnertags.md | 9 + .../operations/listcommissionsrequest.md | 41 +- docs/models/operations/listcommissionstype.md | 13 +- docs/models/operations/listeventsrequest.md | 1 + .../operations/listpartnersresponsebody.md | 10 +- docs/models/operations/networkstatus.md | 22 ++ docs/models/operations/paymentprocessor.md | 2 + docs/models/operations/queryparamgroupby.md | 57 +-- .../operations/reapplicationtimeframe.md | 20 + .../rejectpartnerapplicationrequestbody.md | 13 + ...> rejectpartnerapplicationresponsebody.md} | 2 +- .../operations/rejectpartnerrequestbody.md | 11 - .../responsebodypaymentprocessor.md | 2 + .../operations/retrieveanalyticsrequest.md | 1 + ...uest.md => retrievepartnerlinksrequest.md} | 2 +- ...md => retrievepartnerlinksresponsebody.md} | 2 +- docs/models/operations/tags.md | 9 + docs/models/operations/type.md | 15 +- .../models/operations/updatecommissiontype.md | 13 +- docs/sdks/partnerapplications/README.md | 24 +- docs/sdks/partners/README.md | 12 +- pyproject.toml | 2 +- src/dub/_version.py | 6 +- src/dub/commissions.py | 2 + src/dub/domains.py | 8 +- src/dub/links.py | 8 +- src/dub/models/components/__init__.py | 9 + .../components/commissioncreatedevent.py | 1 + .../models/components/partnerenrolledevent.py | 74 +++- src/dub/models/operations/__init__.py | 103 +++-- ...artner.py => approvepartnerapplication.py} | 12 +- src/dub/models/operations/createpartner.py | 76 +++- src/dub/models/operations/listcommissions.py | 24 +- src/dub/models/operations/listevents.py | 12 + src/dub/models/operations/listpartners.py | 74 +++- src/dub/models/operations/rejectpartner.py | 91 ----- .../operations/rejectpartnerapplication.py | 119 ++++++ .../models/operations/retrieveanalytics.py | 11 + ...trievelinks.py => retrievepartnerlinks.py} | 10 +- src/dub/models/operations/tracksale.py | 2 + src/dub/models/operations/updatecommission.py | 1 + src/dub/models/operations/updatefolder.py | 8 +- src/dub/partner_applications.py | 88 +++-- src/dub/partners.py | 26 +- src/dub/sdk.py | 4 +- src/dub/types/__init__.py | 3 + src/dub/types/base64fileinput.py | 39 ++ 60 files changed, 1076 insertions(+), 500 deletions(-) create mode 100644 docs/models/components/networkstatus.md create mode 100644 docs/models/components/tags.md rename docs/models/operations/{approvepartnerrequestbody.md => approvepartnerapplicationrequestbody.md} (98%) rename docs/models/operations/{approvepartnerresponsebody.md => approvepartnerapplicationresponsebody.md} (91%) create mode 100644 docs/models/operations/createpartnernetworkstatus.md create mode 100644 docs/models/operations/createpartnertags.md create mode 100644 docs/models/operations/networkstatus.md create mode 100644 docs/models/operations/reapplicationtimeframe.md create mode 100644 docs/models/operations/rejectpartnerapplicationrequestbody.md rename docs/models/operations/{rejectpartnerresponsebody.md => rejectpartnerapplicationresponsebody.md} (91%) delete mode 100644 docs/models/operations/rejectpartnerrequestbody.md rename docs/models/operations/{retrievelinksrequest.md => retrievepartnerlinksrequest.md} (98%) rename docs/models/operations/{retrievelinksresponsebody.md => retrievepartnerlinksresponsebody.md} (99%) create mode 100644 docs/models/operations/tags.md rename src/dub/models/operations/{approvepartner.py => approvepartnerapplication.py} (85%) delete mode 100644 src/dub/models/operations/rejectpartner.py create mode 100644 src/dub/models/operations/rejectpartnerapplication.py rename src/dub/models/operations/{retrievelinks.py => retrievepartnerlinks.py} (94%) create mode 100644 src/dub/types/base64fileinput.py diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock index c3aefe9..3c1ea7a 100755 --- a/.speakeasy/gen.lock +++ b/.speakeasy/gen.lock @@ -1,30 +1,30 @@ lockVersion: 2.0.0 id: ab657d60-207e-43a4-8cc8-692a672950ed management: - docChecksum: 3c99a7dcfe0f7e784b8e12ec1e0f615b + docChecksum: c3af06f4aa4a0f715926cc2eddf0e8a6 docVersion: 0.0.1 - speakeasyVersion: 1.761.9 - generationVersion: 2.881.4 - releaseVersion: 0.35.7 - configChecksum: 7568ecbb9c6b5c0586b5d385afddca3a + speakeasyVersion: 1.768.2 + generationVersion: 2.889.1 + releaseVersion: 0.35.8 + configChecksum: 48cfed3f5d1ffd4bb61dab1c9e5478a8 repoURL: https://github.com/dubinc/dub-python.git installationURL: https://github.com/dubinc/dub-python.git published: true persistentEdits: - generation_id: 487f860e-6369-4070-a43b-5e53aac8125d - pristine_commit_hash: 2b0274f02998997a8e83da1d6f88b91d9f5bf82a - pristine_tree_hash: d09240e2aaeab2c3900b4e1530b3d56a0ccf71fe + generation_id: 450fbbca-59d5-4dd3-a738-62fd8ca633e0 + pristine_commit_hash: 55c2fecf1303be82fc4a56e1c143639c2f0f74ee + pristine_tree_hash: 5cb798e0c0f45be9ffe3b1a90f454bbb56f6fc46 features: python: additionalDependencies: 1.0.0 constsAndDefaults: 1.0.7 - core: 6.0.21 + core: 6.0.23 defaultEnabledRetries: 0.2.0 deprecations: 3.0.2 enumUnions: 0.1.1 - envVarSecurityUsage: 0.3.2 + envVarSecurityUsage: 0.3.3 errors: 3.3.6 - examples: 3.0.3 + examples: 3.0.4 flattening: 3.1.1 globalSecurity: 3.0.7 globalSecurityCallbacks: 1.0.0 @@ -34,11 +34,11 @@ features: includes: 3.0.0 nameOverrides: 3.0.3 nullables: 1.0.2 - pagination: 3.0.9 + pagination: 3.0.10 responseFormat: 1.1.0 retries: 3.0.5 sdkHooks: 1.2.1 - unions: 3.1.4 + unions: 3.1.5 trackedFiles: .gitattributes: id: 24139dae6567 @@ -174,8 +174,8 @@ trackedFiles: pristine_git_object: aae5d3676b6c844331f4cbfeaee6a92a2dbe1ae2 docs/models/components/commissioncreatedeventtype.md: id: ddc7eee92ee4 - last_write_checksum: sha1:dc0300b0f243a520f16d04af005158f798a21461 - pristine_git_object: d704aff5cd9e50d19141ada114434e5a70e44dd2 + last_write_checksum: sha1:a2b60ff8ee7e5504e56d5e104c15ed0480275f1a + pristine_git_object: c5edddd687f731634264a0d21627799a26dd189a docs/models/components/constraints.md: id: 160675bd035c last_write_checksum: sha1:21cd5561971d403d4f5454634be4eba5f191c186 @@ -324,6 +324,10 @@ trackedFiles: id: 2842030da4b7 last_write_checksum: sha1:ba76b9d682378ffb6c3019ae76a326a19cbebb42 pristine_git_object: 9374fbdfa5ba93e1d42aefedacb36da4ac6aa874 + docs/models/components/networkstatus.md: + id: 93522867ab71 + last_write_checksum: sha1:9d314e65474ac517ee7d9864b00105b81e587f1b + pristine_git_object: 93a92878db784970a6a76762bdd1701a602b6b6f docs/models/components/one.md: id: f29ed309679e last_write_checksum: sha1:4a71fdd1e6b2f28d835ece16cf5880e6269be2ed @@ -374,8 +378,8 @@ trackedFiles: pristine_git_object: 491c40556703b738d7430a2b9a29e705a21a5685 docs/models/components/partnerenrolledeventdata.md: id: 505d7bbbf137 - last_write_checksum: sha1:00ffaabcd129e6ebf1e5a7cff577c61fc4526336 - pristine_git_object: fa4792b2dff565cfaae0d85378d9c268843c6230 + last_write_checksum: sha1:9e3b0e4e511a859b6054cae18c0ab23b0f639406 + pristine_git_object: 0e608c1fad434f2d71a0d4e330e67ce7c614668b docs/models/components/partnerenrolledeventevent.md: id: 2e4e0307fc74 last_write_checksum: sha1:c6f25e24c6562e32d162bd2247aa84215b256b51 @@ -476,6 +480,10 @@ trackedFiles: id: e26b2fe7f53e last_write_checksum: sha1:c64608e5a37c315ba8ff1fa96cfa6fdb43aaba1b pristine_git_object: 40e20a4943676d7febef9d0ad2323d9ab2554ac6 + docs/models/components/tags.md: + id: b81c2153553c + last_write_checksum: sha1:37b3b179e13e2c947b07b4ba92081ca8bfc76b94 + pristine_git_object: d8db47d96207901cb725361bccd674cd4486a808 docs/models/components/testvariants.md: id: bb118266f3ed last_write_checksum: sha1:2ba034d74826fdefe25b55f0d401567d26d01efe @@ -640,14 +648,14 @@ trackedFiles: id: 8322200a0483 last_write_checksum: sha1:c03a09d2b38d11b72e85e10855462b91bdab7a1b pristine_git_object: 65ed93d11084164e07a591187cef0614fa5fde74 - docs/models/operations/approvepartnerrequestbody.md: - id: ad6d47e6ff88 - last_write_checksum: sha1:cca4296b8d411a0247983c51032b59c9e8ec92f4 - pristine_git_object: c8da6381758e9b8612658cc9dbca0324a6c38fc9 - docs/models/operations/approvepartnerresponsebody.md: - id: 6685c4fa6e7e - last_write_checksum: sha1:836a70023025bae669f0407002451c0f245679e9 - pristine_git_object: 1e80c4c7bec8b15fdbd88bc52aa945bf62cbfd8f + docs/models/operations/approvepartnerapplicationrequestbody.md: + id: 98ed0d62dfa1 + last_write_checksum: sha1:cafa0deb36af4be2166fc189a4ba19efb44d2174 + pristine_git_object: 763917db3a58ecf4230ff23a8823d81f2d189b26 + docs/models/operations/approvepartnerapplicationresponsebody.md: + id: 6fad95b01afc + last_write_checksum: sha1:a05b267609ccf997f7c4e1f594723a3e18dc088d + pristine_git_object: 44445f0ce5c4bcd5413a58e0276f30481639f975 docs/models/operations/bannedreason.md: id: 63e2b4b788c0 last_write_checksum: sha1:0ee940e77b93e657569f6e551cd7eed7ed23cb56 @@ -852,6 +860,10 @@ trackedFiles: id: 94561f3a1bf4 last_write_checksum: sha1:f3fdcd80739306ef7c40d6f76456863491e76f3c pristine_git_object: 2a9b8b946ca6f3712f3abc7828f0be7fa90a479f + docs/models/operations/createpartnernetworkstatus.md: + id: 804e2707c65b + last_write_checksum: sha1:2024027af04467dc75e94e85291b5d34080bb8e1 + pristine_git_object: dc415b539e43e6ef669bad266c674f6970a8c001 docs/models/operations/createpartnerreferralformdata.md: id: 362283d4aaac last_write_checksum: sha1:2744b81c17975d94744dfc0fa63e93bc151cb5b5 @@ -866,8 +878,8 @@ trackedFiles: pristine_git_object: 43005e3df9fe2a6fb96284b44e19c660f76a6d92 docs/models/operations/createpartnerresponsebody.md: id: 918e4dce0185 - last_write_checksum: sha1:ef7249ebbb213e15ff6880e5cb66a43f5132e277 - pristine_git_object: f570ae9aa03d627465920ba9050388720233ec54 + last_write_checksum: sha1:7b95f412e901186c7e028a42d03e6fcf0dca9ce5 + pristine_git_object: f1d32b1168f1209716949388c6ee246c8f6157ed docs/models/operations/createpartnerstatus.md: id: ca5d508da415 last_write_checksum: sha1:f565fe01cff33af4b72ca67095b09e85eea2cdcf @@ -880,6 +892,10 @@ trackedFiles: id: e040d2db4304 last_write_checksum: sha1:480df0b54bd3c96bde52fcce80dec4a02ce553a4 pristine_git_object: a95624ad908494fab937251cc81bafab7f31687f + docs/models/operations/createpartnertags.md: + id: bd596ecb4099 + last_write_checksum: sha1:f8a1044ad6c565341eb3f5ff0e5b0f00fdcb1203 + pristine_git_object: 063aa7885499b9dacf36a502cffd9c121b203df4 docs/models/operations/createpartnertestvariants.md: id: "296310277342" last_write_checksum: sha1:7bc34a7830230943071666bf40161d0d017b7885 @@ -1222,8 +1238,8 @@ trackedFiles: pristine_git_object: 2ae770ffc88df22a7d91642a4e55b70009cf77b0 docs/models/operations/listcommissionsrequest.md: id: 3db2f1c49f34 - last_write_checksum: sha1:4b0ca3558d31dd96263a7d13fda01fb37c3783dc - pristine_git_object: 52c76a56344ccab43c702121503e8788d0d5bf6a + last_write_checksum: sha1:4358412a9b0e01cf1d42e26e6a0f0007c728e40f + pristine_git_object: 83eb2983b3203191ddc89dcf72abebcac5fb349b docs/models/operations/listcommissionsresponse.md: id: 6de464f720eb last_write_checksum: sha1:c4dbf265a81bbe2f55bff665719e90d616884df0 @@ -1238,8 +1254,8 @@ trackedFiles: pristine_git_object: 4f84dedfda61d55a1cac2f4437eac15e1b8ada47 docs/models/operations/listcommissionstype.md: id: a21b21168f76 - last_write_checksum: sha1:514a26a227de3bd48f16db9cfdf99456d4d013a1 - pristine_git_object: dcdfa3879241b1f99f5e8cb8e31e51a057dd12ea + last_write_checksum: sha1:894b2599b60d33b1f50ac304fd0d4fd544a931e8 + pristine_git_object: c121fb32c19e68fc10ade969a58d3ed91d1a4dce docs/models/operations/listdomainsrequest.md: id: 67bb29884839 last_write_checksum: sha1:e3c9e44e386032cf60afe130225b5ddfca629e1c @@ -1250,8 +1266,8 @@ trackedFiles: pristine_git_object: 60511544138301cdb1128f78446ab1adab4f78ef docs/models/operations/listeventsrequest.md: id: 4c63e4d672e2 - last_write_checksum: sha1:79b805c076d6ec5cc469dfd6de3a5d62a72327dc - pristine_git_object: ce088070a34c3630116d7a30bbbda8e280dc9ed6 + last_write_checksum: sha1:f46995bd9142096db015dc931f3f4d1b96cd9d23 + pristine_git_object: a9b0f93cfbd68ecc8bf14780a518c5831cf159b1 docs/models/operations/listeventsresponsebody.md: id: 30e04cb250d3 last_write_checksum: sha1:9cfdd7f0ab2fd5268752f2f55b7a46efd5813095 @@ -1362,8 +1378,8 @@ trackedFiles: pristine_git_object: 8d55395af69519521075a0dc3ad83153c2a8131d docs/models/operations/listpartnersresponsebody.md: id: e60469e13fe9 - last_write_checksum: sha1:d2681b24b51fc9abfa13a3fe07b744bf2531a611 - pristine_git_object: 2a323d9e259ed83b84b46bd8c68eeeb4980e7256 + last_write_checksum: sha1:46debe516d41d9ac1f81b1f1cf06545342e1e07b + pristine_git_object: 6097df9543d30fbe8524581b8d23d720cf5e2bc9 docs/models/operations/listpartnersstatus.md: id: 952f16385320 last_write_checksum: sha1:002a6881c3e12bd7311b9489b9d6f30d7f320664 @@ -1412,6 +1428,10 @@ trackedFiles: id: 5895da0fc5be last_write_checksum: sha1:711a3c40fdb749592dd45287d363dd192f716f32 pristine_git_object: cbbbbefef34729e8072fd0b92b7c1447529e226e + docs/models/operations/networkstatus.md: + id: 3d0ac3f64916 + last_write_checksum: sha1:672fd2589e15d12918dec269a0afb7f2839a9c3f + pristine_git_object: a28451f147afd7e8032a72543768430655ef9944 docs/models/operations/one.md: id: b4b6bf675469 last_write_checksum: sha1:5fb28c4f6b47abd8cdd98661f7dfc56b1e00bd70 @@ -1430,16 +1450,16 @@ trackedFiles: pristine_git_object: c260a79574f41f6ab0a44f7c48843403015f9522 docs/models/operations/paymentprocessor.md: id: 9aa57ef1a35a - last_write_checksum: sha1:b2cab85eb9a3776b1743b05b8b7911dcb2cab3f0 - pristine_git_object: 73714d3f9a50d8a86db305567a8a511b0f62d139 + last_write_checksum: sha1:ff41c9ba4efd0f9c3b8da6a2dc08e96e1c8e1038 + pristine_git_object: 0fca3a35fd6cffa9a22c3b13e550eb40dc31db84 docs/models/operations/queryparamevent.md: id: 14c9960f646c last_write_checksum: sha1:1572182a207481c81d43c3671fed0885e5a86067 pristine_git_object: 9acfcade05fab7a62543e8f25ad349596e4f367a docs/models/operations/queryparamgroupby.md: id: 941bf4ea3b85 - last_write_checksum: sha1:31abe3a38441cb249868367a06164b40bc3148e3 - pristine_git_object: a80b4638d39c05fd351807eb0bd0482ff8f15c10 + last_write_checksum: sha1:66f818b815de44a3630d89930455472496ba8ff3 + pristine_git_object: eb9d4f9d12e9ca394c5ceeccc4991b6882ee5e1e docs/models/operations/queryparaminterval.md: id: 716f157e6a18 last_write_checksum: sha1:f887304f8c8600c10a7608352664266c66ee2d09 @@ -1468,6 +1488,10 @@ trackedFiles: id: 04a8f8ee6f9b last_write_checksum: sha1:4eae523c5bf1e61e34ba4b23f4863c7c26324d73 pristine_git_object: 2aa04e192ad929231919a77a3b77c90798d1d7f7 + docs/models/operations/reapplicationtimeframe.md: + id: e71c1c4708bb + last_write_checksum: sha1:31152f07f1570f7dc1e93deec6c450014a8b1223 + pristine_git_object: cce71f40e378687d4a646dd76755f5e527f25bf7 docs/models/operations/reason.md: id: f06a2dda70b9 last_write_checksum: sha1:1472c59b1916a3b9eaa2b744fa9a7eb5d0a58d2c @@ -1512,14 +1536,14 @@ trackedFiles: id: 99a67fae384a last_write_checksum: sha1:23fa7f6ea8d8e8ad4e68c9db806f3d2d29d88d83 pristine_git_object: 695803b54d10db435a435939d0259afea9e9ad5f - docs/models/operations/rejectpartnerrequestbody.md: - id: 66069b0de975 - last_write_checksum: sha1:d4c4bb0eeb54c2f90996491b22fcc528456c1176 - pristine_git_object: dfe42d285be5634443da1dd6a9057ec1df3db8b3 - docs/models/operations/rejectpartnerresponsebody.md: - id: d58165da49ce - last_write_checksum: sha1:70b30c5f48a23cbe2b4108c403040bd655c71855 - pristine_git_object: 84b34aa6e967089d8ca6d10c1831e2a83db02466 + docs/models/operations/rejectpartnerapplicationrequestbody.md: + id: e2d454aa9e3b + last_write_checksum: sha1:0fb8a2cbb576436d1a427ff63524a98706f14a76 + pristine_git_object: 3ef975d6e4c6a531f45343e9bc0b1fd5d171c263 + docs/models/operations/rejectpartnerapplicationresponsebody.md: + id: 0123c0d1a744 + last_write_checksum: sha1:faf8407acedee85c77f28273c35ae752b9b81b61 + pristine_git_object: 358d73f77d930968d2ddbc435df0c8f5a12f30e1 docs/models/operations/requestbody.md: id: f78af0833126 last_write_checksum: sha1:2154702b907d669977ca702d3239f08cf3d6ef16 @@ -1546,8 +1570,8 @@ trackedFiles: pristine_git_object: 30fb11375cbf58672746e8473098180601da19e3 docs/models/operations/responsebodypaymentprocessor.md: id: b6fe3aac607d - last_write_checksum: sha1:183e7a4b6bacde7a4954177df782e1bafa006ef6 - pristine_git_object: e6e7053afd2595d63d83647355669a4e07dc181f + last_write_checksum: sha1:2cb59373f164499e0e1763f9d73cd7347a4781c4 + pristine_git_object: a5123819dcd3b8845c892e1c164fd69105dc77b7 docs/models/operations/responsebodysale.md: id: 04737e13a9e2 last_write_checksum: sha1:fa030b0a6ebc14060840b8d05bbd5d6388cd143f @@ -1558,20 +1582,12 @@ trackedFiles: pristine_git_object: 2cee6c27f2c59a6b254d0b93b4190afe3e62ef76 docs/models/operations/retrieveanalyticsrequest.md: id: bfa89ce61897 - last_write_checksum: sha1:e6fc98aa2fd3c722d0b3e00432182b28b3460f26 - pristine_git_object: c6aaea34b814cd77a0895800e8c615c8ce9779f0 + last_write_checksum: sha1:f0b09482a7dae716851fe19c697dfec17d59edb3 + pristine_git_object: 310d7e6ce8904cf82eb20f7727a5433c526e0e4b docs/models/operations/retrieveanalyticsresponsebody.md: id: 41386a0b3f46 last_write_checksum: sha1:93b8446d11aef2ec918ef1164b5dec8fe6c18661 pristine_git_object: 86247580ed979f70dfb20ab8f990f1c02a6b4bc4 - docs/models/operations/retrievelinksrequest.md: - id: 4b6e2662a103 - last_write_checksum: sha1:3d4867ddbcedd65ee7b1705bd082e1aa4f068de3 - pristine_git_object: 2ae01d4042c780597b1f0095155e4a730661811c - docs/models/operations/retrievelinksresponsebody.md: - id: df985675c9ad - last_write_checksum: sha1:f470a98dc21319f6ffb90accaa2d5e5aac4ca1de - pristine_git_object: 4fb3e7e00f3f45c5f1b251bdb1fbb0b9966b67bd docs/models/operations/retrievepartneranalyticsqueryparamgroupby.md: id: 50b1890d9697 last_write_checksum: sha1:1e0dfe84bc5ede07dbe9c67760a3912b1780f9fa @@ -1588,6 +1604,14 @@ trackedFiles: id: c49f6ba7e40e last_write_checksum: sha1:fa33f082cbf0e59b4147a3cac788ca25a1237abd pristine_git_object: fa557aa07c94dffca907496bd912bcd9c0fc403f + docs/models/operations/retrievepartnerlinksrequest.md: + id: 7c94726a71eb + last_write_checksum: sha1:44991a6944ab4ae00bf647ef2381e1f5fca20d19 + pristine_git_object: 993f7f5385c20799a53add076cc37fd231d6b405 + docs/models/operations/retrievepartnerlinksresponsebody.md: + id: e92074320c7a + last_write_checksum: sha1:d60dbe82e7deb7fd39d2c02d7e048a43082f1e02 + pristine_git_object: f3ba4c3e951017b0ef3ebeaa12e18550645d54a6 docs/models/operations/sale.md: id: 3e9ba36ec88c last_write_checksum: sha1:88d244d27ba703e1bea30bdca9a4c700c9ad8f7c @@ -1632,6 +1656,10 @@ trackedFiles: id: 664353f587d6 last_write_checksum: sha1:2e1c20657b37b756a99e97b76f3e48e946a54a7f pristine_git_object: 4fe52be34e0bd36b583508abc8e64c48ed811448 + docs/models/operations/tags.md: + id: 2453382de5da + last_write_checksum: sha1:37b3b179e13e2c947b07b4ba92081ca8bfc76b94 + pristine_git_object: d8db47d96207901cb725361bccd674cd4486a808 docs/models/operations/testvariants.md: id: 4d6d8f98c81e last_write_checksum: sha1:2ba034d74826fdefe25b55f0d401567d26d01efe @@ -1666,8 +1694,8 @@ trackedFiles: pristine_git_object: 024ab2970d1a03d45bfd01fd03dcd1fa6a3b0dc6 docs/models/operations/type.md: id: 8e39682ca85e - last_write_checksum: sha1:a9f0a5e2d00d7d6d42ccdce8bb43bf2f1236404f - pristine_git_object: 8d2a2a7f2346c89481fbb1dbbaf45785a9707f52 + last_write_checksum: sha1:5b75236e7563c6651b31b4d60c8461152a2262ee + pristine_git_object: e9de83f0c33eda8012e2385bc373f11c09972e2e docs/models/operations/updatecommissioncustomer.md: id: 19d4c8993860 last_write_checksum: sha1:4d2241106da302f47ca130e557124d3de0e5054a @@ -1694,8 +1722,8 @@ trackedFiles: pristine_git_object: b8b2ab4c05668a1bdc7db7d4d85f40108953aa29 docs/models/operations/updatecommissiontype.md: id: 62a460f0fff7 - last_write_checksum: sha1:bd087b5d874cea98556883670a349747f1cd3237 - pristine_git_object: 9137991363dd33503161561491e3a0ac8e32a270 + last_write_checksum: sha1:b585402e7efd10f63c1280018a6750939b51689f + pristine_git_object: 108d51e16604e6725b626afce2b3f39c6b1354d4 docs/models/operations/updatecustomerdiscount.md: id: 03e62b20b568 last_write_checksum: sha1:501e28168c6e2de23a4d30d97c1593eafb3a52a4 @@ -1858,12 +1886,12 @@ trackedFiles: pristine_git_object: 9069cf970555683c5b3fa528113f10e97f33a121 docs/sdks/partnerapplications/README.md: id: 6cf37e16d4c1 - last_write_checksum: sha1:0263d8d6c7821aeef2c024383110a74031539cee - pristine_git_object: e52ca3d0122fa750228acf8e8b8bbb226f0ad28e + last_write_checksum: sha1:3578c5ee07ffb4515ea1a803151025a49f335e85 + pristine_git_object: 60f64ec4ff10645d4eb486e92e358274925ed378 docs/sdks/partners/README.md: id: 85ac19d13270 - last_write_checksum: sha1:7785b184f8222bbe6707c752b0ffb0e2f6671d02 - pristine_git_object: 0aa3cf71b46d53db0ed699f73b9c1ca2090d092b + last_write_checksum: sha1:e822fe93ad5fe817421f4c3239821de3de036e85 + pristine_git_object: 15896f2e6571d4c8c8e9c7694360e49081046ea2 docs/sdks/payouts/README.md: id: 184ed4a74471 last_write_checksum: sha1:34ab994bcbde69a61c3d864c52dcd1b876870420 @@ -1894,8 +1922,8 @@ trackedFiles: pristine_git_object: d722e610557dc0704b6ece9349e7f41fc2cf4546 pyproject.toml: id: 5d07e7d72637 - last_write_checksum: sha1:03d54d1c21ba50faa1a37ca8637d79b1845ea321 - pristine_git_object: 7c93bbb2ad28d97b4baa22a9b49e8a5d2f7f654c + last_write_checksum: sha1:323f48d668f11add0ca4c9fe02953f76b6ee4ca0 + pristine_git_object: 4a8c989efbc3d20580ccb47d3d195f7f7d45f6ca scripts/prepare_readme.py: id: e0c5957a6035 last_write_checksum: sha1:98ab0adc36f1ccd31422544b0dd94e008aa47804 @@ -1922,8 +1950,8 @@ trackedFiles: pristine_git_object: 350406f1a5b2eabd1ca7e8ea2621fdca5096e0e5 src/dub/_version.py: id: 2e88e1f01047 - last_write_checksum: sha1:d4059f10b2fcf406ff091bd517d5647de13b648c - pristine_git_object: 3880b6cf23c9270d29e8e91e95bfba76f7f7e2ab + last_write_checksum: sha1:c5855e44161bcef10dd17c05635e9e04e493fe0d + pristine_git_object: e29145eaa8d371015e4e5afa54482ef49ba4b928 src/dub/analytics.py: id: b7a4fa47e744 last_write_checksum: sha1:c3472d9c8213cee91d855a2463e364c27dcc2956 @@ -1938,16 +1966,16 @@ trackedFiles: pristine_git_object: 1233862cf9a2b1828c9bef3942f77490b9f5f4a6 src/dub/commissions.py: id: 4d162906099e - last_write_checksum: sha1:fb3ee45e3cd8a234b6f89d032274f52d802e8f42 - pristine_git_object: 19a0f47bf947ac7d929e3114dfeaefe0069d1daf + last_write_checksum: sha1:21f669c00e26d093c86ec7933df02f307e5970f2 + pristine_git_object: f8f241ac378ccc54905689458ec1818e135fefaa src/dub/customers.py: id: 4a816dd98656 last_write_checksum: sha1:71e11c911c8d00fbf415cae4e47409c005c2a26e pristine_git_object: e66b268b4152f2d9e6fe8e59cf112a25c7c6cd29 src/dub/domains.py: id: 09f896d00e5c - last_write_checksum: sha1:2f47265ddc14e1edccbe208d0132f900e7a41eca - pristine_git_object: 319ca8801a4108b64dc8fb0e5dca41878e521562 + last_write_checksum: sha1:5d6ecb13870499146e64c8a1c3285509280a292b + pristine_git_object: 33e12842ebf55d7a53a8e4480b8abd1c47265672 src/dub/embed_tokens.py: id: bd0796c6f961 last_write_checksum: sha1:3782bdb45f94912b285dd569ddab68e71a2ffc17 @@ -1966,16 +1994,16 @@ trackedFiles: pristine_git_object: 89560b566073785535643e694c112bedbd3db13d src/dub/links.py: id: 28d2ed488c1a - last_write_checksum: sha1:94ef102472aa7009524e8dd977f225237e7a097f - pristine_git_object: ad6b5e0458b2860e65a3f9f4b7ecb9689e97d6e4 + last_write_checksum: sha1:b6874e8b72c6e9cd6d051e4bb50a81d13c91bea1 + pristine_git_object: 7e33c1fc2f5606f97cfea94c3c744369ffd7bdef src/dub/models/__init__.py: id: 31596861c2a1 last_write_checksum: sha1:9fcf8371021be56f3cea00eebcebb7f0f80fb131 pristine_git_object: a8ba3e636207fe13ab7e1d1790061c0cb9cfa83e src/dub/models/components/__init__.py: id: cfa9c231496c - last_write_checksum: sha1:32c0516322715712a33822595b63cc59a149de72 - pristine_git_object: ceaead466eb0653999900ff7609006d12aa92320 + last_write_checksum: sha1:7b0fedaa2a2b55e06440069fb623d59b4f69eec6 + pristine_git_object: 486b71f0f7fa2675710603aa06108c54f7e2c8f9 src/dub/models/components/analyticsbrowsers.py: id: 2d7aed63032d last_write_checksum: sha1:242eff9c4d633d958c2d5b8cab336ec9e3d906c0 @@ -2034,8 +2062,8 @@ trackedFiles: pristine_git_object: aa84354d71f3872288504601aadca30702e0d441 src/dub/models/components/commissioncreatedevent.py: id: b2f4948f1e5a - last_write_checksum: sha1:1ba17b8c3bf38cd028a3bd1ec911c608941add98 - pristine_git_object: dbbced4427ee06a81b6ac00720962a77686af7ac + last_write_checksum: sha1:557185224f98117026ca7d9da29ab7e54b861362 + pristine_git_object: d9de6b92c2b1d0b6ffefae0063b3f37018d89eb0 src/dub/models/components/domainschema.py: id: b6034ff0c3c8 last_write_checksum: sha1:11548fc2e146c8c6f3380d190628ed468cb5bd61 @@ -2090,8 +2118,8 @@ trackedFiles: pristine_git_object: e7ab48ffb634603c44e6fe853b533d6576a2711f src/dub/models/components/partnerenrolledevent.py: id: 3f120ef09957 - last_write_checksum: sha1:a78d7a33e1df875a62a23917437a45c2bdf64772 - pristine_git_object: 24f3daa138a5d5d5521f682a7a3120940589b268 + last_write_checksum: sha1:f19dd9410f9cb24c9c3b2c734b0a2d576143be26 + pristine_git_object: 443d0e231b7138cee92dae09b2179118b2e1c003 src/dub/models/components/salecreatedevent.py: id: 216d1319967a last_write_checksum: sha1:f150bbef98893ffeb25877df2f3f576ab0089eb9 @@ -2162,16 +2190,16 @@ trackedFiles: pristine_git_object: a4d3bb4339a522ec90dcd859c74a4a4473f10e1f src/dub/models/operations/__init__.py: id: 933db6318765 - last_write_checksum: sha1:0805797451a0f21eeee0b9d3f07cd41d0b632289 - pristine_git_object: 531b102e54fade0eaccbb822f463698794342824 + last_write_checksum: sha1:5148688df38fe3349e83277601d0281446b9cc7d + pristine_git_object: c394335b2715b5ab44ff418d1e28e0609b1d4f29 src/dub/models/operations/approvebountysubmission.py: id: bb43baeb1a3f last_write_checksum: sha1:3226de576000c54c280fcd3dc85e468946fa7f93 pristine_git_object: 6e22a40d1077f4571f8dcfdb846ff4e9c841cfe1 - src/dub/models/operations/approvepartner.py: - id: 0c91462b31a2 - last_write_checksum: sha1:87c236bfe934c2ed1f2b8fd92758a9f31423a378 - pristine_git_object: cc23dfca8ed3c2eae49a131d6c45447bbf8580ca + src/dub/models/operations/approvepartnerapplication.py: + id: 14b2de7a6716 + last_write_checksum: sha1:87ef552d3c446d33cb5bfb79959a0c17df7c511d + pristine_git_object: a827bd5bd0733fb06fc346115dbcc561efb7cf49 src/dub/models/operations/banpartner.py: id: 444fc7f56f49 last_write_checksum: sha1:f1628d27d4ddabe424c357d565ef363f41e99ec8 @@ -2210,8 +2238,8 @@ trackedFiles: pristine_git_object: 9a9fa3b63b1f1ae93f68fa393ab6ac2b277a767a src/dub/models/operations/createpartner.py: id: 06fa07938a1b - last_write_checksum: sha1:73fb5b616e9f8be9fc47d806438e0df5acdc0fdd - pristine_git_object: b1e7118e3884e877ac8ab564f2f79fdedeab4a24 + last_write_checksum: sha1:986b82f14526433e7d5ee2bda2a8fbb6e67ee5a2 + pristine_git_object: 3e0c57132d525f4163f11ca78396dbabaa16635e src/dub/models/operations/createpartnerlink.py: id: 8c33637a6d5d last_write_checksum: sha1:b7aafa4c3967634327b9b293ff60715aee9acda1 @@ -2282,16 +2310,16 @@ trackedFiles: pristine_git_object: 542271b059e73aa560a573c34f8dcc3ec494acc1 src/dub/models/operations/listcommissions.py: id: 992f4436b681 - last_write_checksum: sha1:61707d793fc345cc20192f5bd9ff3e7b02189116 - pristine_git_object: aeb51652d718b2ad6675680372b2b038e5cc2081 + last_write_checksum: sha1:8ae9034c9eca3fc53f2d86594263bdddb3c0b1c6 + pristine_git_object: 284244a14c2310c1dab25f68478c1b40be405ee6 src/dub/models/operations/listdomains.py: id: d32b3e207565 last_write_checksum: sha1:d51ab77dc9cf5174a7c002bd7478b800f92cbf06 pristine_git_object: 2b1047289ac8171c7cbcbfe72a9a2620424d5d6d src/dub/models/operations/listevents.py: id: e65c95de179b - last_write_checksum: sha1:6fd565bbd4b927891d3d52e9076635ba604cb648 - pristine_git_object: 41c7228623407b23dcdb88cb081b0243365f86d2 + last_write_checksum: sha1:160807132fb6aa3e30fe1f1e40c31d49f36beda3 + pristine_git_object: 7bfd613e35fc1b27d14a2880152de0e116da4753 src/dub/models/operations/listfolders.py: id: 42dbcd5bbad8 last_write_checksum: sha1:354dcb51fcbf90e8e41a07d3e2abf5ecf58349cb @@ -2302,8 +2330,8 @@ trackedFiles: pristine_git_object: 209fe43782da49da46e69934bc3176583a548498 src/dub/models/operations/listpartners.py: id: f5459d336462 - last_write_checksum: sha1:eadedd34e56866bf291a49a158aeb745531b4771 - pristine_git_object: 3d18cf8c3e5fb3eff3d7c00db98e34dda58cbe73 + last_write_checksum: sha1:90a715cc75d658bf8418cbc140e42e4aecc08ca9 + pristine_git_object: 9f3d4b84be176c7e7f4fc5c6cdfea8b98175bed9 src/dub/models/operations/listpayouts.py: id: d5cd6d0e4a39 last_write_checksum: sha1:12d6e97adcecd11befe182f085b8856d8482eb80 @@ -2316,34 +2344,34 @@ trackedFiles: id: 417e94427b88 last_write_checksum: sha1:6d32cb2f93a8cabb336a04b5509eeb18e8d47a05 pristine_git_object: d1925c46736b6e450a4f8088a749f8bc2824468c - src/dub/models/operations/rejectpartner.py: - id: 5172d0198c97 - last_write_checksum: sha1:d853c72f24217b6b791c08d9b9cbb36e1b537724 - pristine_git_object: 6d8964b31cd430f5bf781c91a311ac84582bf1c5 + src/dub/models/operations/rejectpartnerapplication.py: + id: 61375af08c5b + last_write_checksum: sha1:f0b25ad1e9df8e8d87b5fcd174555ef515bb7db6 + pristine_git_object: dbacacfe950fffaea9e5c6b62bd2229b25e9702e src/dub/models/operations/retrieveanalytics.py: id: d4bcf92cd8c8 - last_write_checksum: sha1:702d3e32cf8c0bd6f0dd597154991393aafa4da9 - pristine_git_object: 569e3802f23431dc5f57a29da91bfa6b9e336e85 - src/dub/models/operations/retrievelinks.py: - id: 06b94f642966 - last_write_checksum: sha1:c2bdfe80e323177e29ec83c9bf73e072766e495d - pristine_git_object: 62cd6799c60a93af7c6bda6de1902399b07f3e0c + last_write_checksum: sha1:4b8661a6f584654e1647f85bbcb56ad6c2cc8a5e + pristine_git_object: 060490f004379465ca9c7de278f324a2e1cbfc5c src/dub/models/operations/retrievepartneranalytics.py: id: 8889428b71f1 last_write_checksum: sha1:10ad01c72d6943ce1ad41d9df68e53afe2a1855b pristine_git_object: c5cc6b155c687234710e163dae8b4350c662fb9e + src/dub/models/operations/retrievepartnerlinks.py: + id: c72f7fa74edd + last_write_checksum: sha1:ed5c57ecba04c5b6f31044280dd9ae552873fb24 + pristine_git_object: 43bb0d42835f1be2d98cebf29b25186aaaa366f4 src/dub/models/operations/tracklead.py: id: 973525c261fc last_write_checksum: sha1:542698fe0cb1087831971f6019627e97f055586a pristine_git_object: 3e67398da33bf5b4da30b2e5d723f5245bf6e70d src/dub/models/operations/tracksale.py: id: 9a199b0a5b7f - last_write_checksum: sha1:1f960f6b67c50554f4767a44dd6153e36101e28c - pristine_git_object: 3b4fd45c891b896f09a4faa85d7735cac13dc72e + last_write_checksum: sha1:d6e9ccb591cfef168f4888b2b92e7f260496e478 + pristine_git_object: acc1f10741edea231a3a31f38004de2798733c7f src/dub/models/operations/updatecommission.py: id: 5efb92f68d93 - last_write_checksum: sha1:0d86673a637b2f76667eac62342e3066adbc1c52 - pristine_git_object: d5e5fe4f5d9a85c559af4785f323c151271d15f7 + last_write_checksum: sha1:a08b0f28448464d9bd9c9e10bb419a2307433745 + pristine_git_object: 26bbf762991965fa72326de6b455330a8c514a92 src/dub/models/operations/updatecustomer.py: id: 5487589e4e19 last_write_checksum: sha1:edbffd4a24bdc64737a1b646bb3bdd6a2e108ea5 @@ -2354,8 +2382,8 @@ trackedFiles: pristine_git_object: 2705d64a35caee2a0dbef6381d2411fb4f246ca7 src/dub/models/operations/updatefolder.py: id: 4c4099e4ee43 - last_write_checksum: sha1:2a511b60ad8e8aad704ab1993e8942d8d8758a2f - pristine_git_object: 82d1d586a8f568d77c1796b85e7f76c951896159 + last_write_checksum: sha1:e4dcab24d0e86701a802d29f5de1416ad08eeee6 + pristine_git_object: 21884af1725a9b19deb41d79ed23e78ddad93c0e src/dub/models/operations/updatelink.py: id: ddb2b605f252 last_write_checksum: sha1:1f43100ea60ae4b09a993355c9a7f0f4f2f5e85f @@ -2374,12 +2402,12 @@ trackedFiles: pristine_git_object: b7590da8b61f6598e03f3face67255570a7fe4e6 src/dub/partner_applications.py: id: bb23ca342d44 - last_write_checksum: sha1:94a0035bc34c4bacd4cd5fb20085ebbcae81d893 - pristine_git_object: ad4370cf206e7e42301212722d5e7c3f12d0e0b3 + last_write_checksum: sha1:cd0ef645aded15b02e9b17cb45f9c9ee58a442fe + pristine_git_object: 7029ad45e79fd56752294047a969e6e0564b1df6 src/dub/partners.py: id: eb45bbf562e5 - last_write_checksum: sha1:7e34b15d672c655a8af1524749c20d58ed0254bf - pristine_git_object: 553542f432718b689769633f87a0c002ddcd9649 + last_write_checksum: sha1:6fadd84dda986e31ca1288c72ea25da94977e819 + pristine_git_object: 879418723bba96b370765522706f15df05dabc79 src/dub/payouts.py: id: 4f948a5d29de last_write_checksum: sha1:4a1d7425f2c5773d5f6f544a3b4545392a6ce1a6 @@ -2394,8 +2422,8 @@ trackedFiles: pristine_git_object: 7fe14d4e3d09b861aac628f556d1b9c01014cc95 src/dub/sdk.py: id: 5d28a0e32a00 - last_write_checksum: sha1:77f9d2ab06391d02a6716dcf86925a6ddb6f0e25 - pristine_git_object: 3d174d2bed160142246894a5ff1f69901782f109 + last_write_checksum: sha1:5711657396ee48c8256925874ee99b6a0fa42fe7 + pristine_git_object: bf5cd028e8e6c27495318131674b5fd8d2b54411 src/dub/sdkconfiguration.py: id: fa9f969a69de last_write_checksum: sha1:22402c25c87674d65277af59eb3239f2e9744db3 @@ -2410,8 +2438,12 @@ trackedFiles: pristine_git_object: 1a47f7774d9276efbb4584a63ec567002100dda9 src/dub/types/__init__.py: id: 832f75d3cfba - last_write_checksum: sha1:140ebdd01a46f92ffc710c52c958c4eba3cf68ed - pristine_git_object: fc76fe0c5505e29859b5d2bb707d48fd27661b8c + last_write_checksum: sha1:f9ad14217f832e74f594285960125add50324be9 + pristine_git_object: faa268137bc01c9d08cfadc4797017db48747a96 + src/dub/types/base64fileinput.py: + id: 566dfc2364ac + last_write_checksum: sha1:4780e893d3853b5a6e28d9a6ca3ee102ce0f502d + pristine_git_object: 25fc53989ed497649363f983219fc58705c8bf87 src/dub/types/basemodel.py: id: 6050aa35f024 last_write_checksum: sha1:10d84aedeb9d35edfdadf2c3020caa1d24d8b584 @@ -3336,7 +3368,7 @@ examples: application/json: {"email": "Summer50@yahoo.com", "linkProps": {"externalId": "123456", "tagIds": ["clux0rgak00011..."], "testVariants": [{"url": "https://example.com/variant-1", "percentage": 50}, {"url": "https://example.com/variant-2", "percentage": 50}]}} responses: "201": - application/json: {"id": "", "name": "", "companyName": "Schowalter, Hauck and Bradtke", "email": "Jan9@yahoo.com", "image": "https://loremflickr.com/2599/3934?lock=3607054824535492", "country": "Equatorial Guinea", "defaultPayoutMethod": "paypal", "paypalEmail": "", "stripeConnectId": "", "payoutsEnabledAt": "", "trustedAt": "", "identityVerifiedAt": "", "programId": "", "partnerId": "", "tenantId": "", "createdAt": "1736363459872", "status": "banned", "links": [], "totalCommissions": 0, "totalClicks": 0, "totalLeads": 0, "totalConversions": 0, "totalSales": 0, "totalSaleAmount": 0, "netRevenue": 0} + application/json: {"id": "", "name": "", "username": "Summer50", "email": "Jan9@yahoo.com", "image": "https://loremflickr.com/2599/3934?lock=3607054824535492", "country": "Equatorial Guinea", "companyName": "Schowalter, Hauck and Bradtke", "networkStatus": "approved", "defaultPayoutMethod": "paypal", "paypalEmail": "", "stripeConnectId": "", "payoutsEnabledAt": "", "identityVerifiedAt": "", "programId": "", "partnerId": "", "tenantId": "", "createdAt": "1736363459872", "status": "banned", "links": [], "totalCommissions": 0, "totalClicks": 0, "totalLeads": 0, "totalConversions": 0, "totalSales": 0, "totalSaleAmount": 0, "netRevenue": 0} "400": application/json: {"error": {"code": "bad_request", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#bad-request"}} "401": @@ -3719,7 +3751,7 @@ examples: groupId: "grp_123" responses: "200": - application/json: [{"id": "", "name": "", "companyName": "Pacocha, McClure and Kuvalis", "email": "Korey.Corkery26@hotmail.com", "image": "https://picsum.photos/seed/X7WjNI/969/1620", "country": "Paraguay", "defaultPayoutMethod": "paypal", "paypalEmail": "", "stripeConnectId": "", "payoutsEnabledAt": "", "trustedAt": "", "identityVerifiedAt": "", "programId": "", "partnerId": "", "tenantId": "", "createdAt": "1715609832325", "status": "rejected", "links": [{"id": "", "domain": "perky-tributary.biz", "key": "", "shortLink": "https://neighboring-draft.biz/", "url": "https://unsightly-nectarine.biz/", "clicks": 0, "leads": 0, "conversions": 0, "sales": 0, "saleAmount": 0}], "totalCommissions": 0, "totalClicks": 0, "totalLeads": 0, "totalConversions": 0, "totalSales": 0, "totalSaleAmount": 0, "netRevenue": 0}] + application/json: [{"id": "", "name": "", "username": "Nikko_McClure14", "email": "Korey.Corkery26@hotmail.com", "image": "https://picsum.photos/seed/X7WjNI/969/1620", "country": "Paraguay", "companyName": "Pacocha, McClure and Kuvalis", "networkStatus": "submitted", "defaultPayoutMethod": "paypal", "paypalEmail": "", "stripeConnectId": "", "payoutsEnabledAt": "", "identityVerifiedAt": "", "programId": "", "partnerId": "", "tenantId": "", "createdAt": "1715609832325", "status": "rejected", "links": [{"id": "", "domain": "perky-tributary.biz", "key": "", "shortLink": "https://neighboring-draft.biz/", "url": "https://unsightly-nectarine.biz/", "clicks": 0, "leads": 0, "conversions": 0, "sales": 0, "saleAmount": 0}], "totalCommissions": 0, "totalClicks": 0, "totalLeads": 0, "totalConversions": 0, "totalSales": 0, "totalSaleAmount": 0, "netRevenue": 0, "trustedAt": ""}] "400": application/json: {"error": {"code": "bad_request", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#bad-request"}} "401": @@ -4000,16 +4032,82 @@ examples: application/json: {"error": {"code": "rate_limit_exceeded", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#rate-limit_exceeded"}} "500": application/json: {"error": {"code": "internal_server_error", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#internal-server_error"}} + retrievePartnerLinks: + speakeasy-default-retrieve-partner-links: + responses: + "200": + application/json: [{"id": "", "domain": "deadly-bonfire.name", "key": "", "shortLink": "https://simplistic-birdbath.org/", "url": "https://usable-hello.name/", "clicks": 0, "leads": 0, "conversions": 0, "sales": 0, "saleAmount": 0}] + "400": + application/json: {"error": {"code": "bad_request", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#bad-request"}} + "401": + application/json: {"error": {"code": "unauthorized", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#unauthorized"}} + "403": + application/json: {"error": {"code": "forbidden", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#forbidden"}} + "404": + application/json: {"error": {"code": "not_found", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#not-found"}} + "409": + application/json: {"error": {"code": "conflict", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#conflict"}} + "410": + application/json: {"error": {"code": "invite_expired", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#invite-expired"}} + "422": + application/json: {"error": {"code": "unprocessable_entity", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#unprocessable-entity"}} + "429": + application/json: {"error": {"code": "rate_limit_exceeded", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#rate-limit_exceeded"}} + "500": + application/json: {"error": {"code": "internal_server_error", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#internal-server_error"}} + approvePartnerApplication: + speakeasy-default-approve-partner-application: + requestBody: + application/json: {"partnerId": ""} + responses: + "200": + application/json: {"partnerId": ""} + "400": + application/json: {"error": {"code": "bad_request", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#bad-request"}} + "401": + application/json: {"error": {"code": "unauthorized", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#unauthorized"}} + "403": + application/json: {"error": {"code": "forbidden", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#forbidden"}} + "404": + application/json: {"error": {"code": "not_found", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#not-found"}} + "409": + application/json: {"error": {"code": "conflict", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#conflict"}} + "410": + application/json: {"error": {"code": "invite_expired", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#invite-expired"}} + "422": + application/json: {"error": {"code": "unprocessable_entity", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#unprocessable-entity"}} + "429": + application/json: {"error": {"code": "rate_limit_exceeded", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#rate-limit_exceeded"}} + "500": + application/json: {"error": {"code": "internal_server_error", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#internal-server_error"}} + rejectPartnerApplication: + speakeasy-default-reject-partner-application: + requestBody: + application/json: {"partnerId": "", "reapplicationTimeframe": "standard"} + responses: + "200": + application/json: {"partnerId": ""} + "400": + application/json: {"error": {"code": "bad_request", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#bad-request"}} + "401": + application/json: {"error": {"code": "unauthorized", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#unauthorized"}} + "403": + application/json: {"error": {"code": "forbidden", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#forbidden"}} + "404": + application/json: {"error": {"code": "not_found", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#not-found"}} + "409": + application/json: {"error": {"code": "conflict", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#conflict"}} + "410": + application/json: {"error": {"code": "invite_expired", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#invite-expired"}} + "422": + application/json: {"error": {"code": "unprocessable_entity", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#unprocessable-entity"}} + "429": + application/json: {"error": {"code": "rate_limit_exceeded", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#rate-limit_exceeded"}} + "500": + application/json: {"error": {"code": "internal_server_error", "message": "The requested resource was not found.", "doc_url": "https://dub.co/docs/api-reference/errors#internal-server_error"}} examplesVersion: 1.0.2 generatedTests: {} -releaseNotes: | - ## Python SDK Changes: - * `dub.partner_applications.list()`: **Added** - * `dub.partner_applications.approve()`: **Added** - * `dub.partner_applications.reject()`: **Added** - * `dub.events.list()`: `response.[].union(sale).sale.currency` **Added** - * `dub.partners.list()`: `response.[].identity_verified_at` **Added** - * `dub.partners.create()`: `response.identity_verified_at` **Added** +releaseNotes: "## Python SDK Changes:\n* `dub.events.list()`: \n * `request.partner_tag_id` **Added**\n * `response.[].union(sale).sale.payment_processor` **Changed** (Breaking ⚠️)\n* `dub.partner_applications.reject()`: `request` **Changed** (Breaking ⚠️)\n* `dub.commissions.list()`: \n * `request` **Changed**\n * `response.[].type.enum(referral)` **Added** (Breaking ⚠️)\n* `dub.commissions.update()`: `response.type.enum(referral)` **Added** (Breaking ⚠️)\n* `dub.analytics.retrieve()`: `request` **Changed**\n* `dub.folders.update()`: \n * `request_body.access_level` **Changed**\n* `dub.track.sale()`: \n * `request.payment_processor` **Changed**\n* `dub.partners.list()`: `response.[]` **Changed**\n* `dub.partners.create()`: `response` **Changed**\n" generatedFiles: - .gitattributes - .vscode/settings.json diff --git a/.speakeasy/gen.yaml b/.speakeasy/gen.yaml index c9d9d89..5095266 100755 --- a/.speakeasy/gen.yaml +++ b/.speakeasy/gen.yaml @@ -29,7 +29,7 @@ generation: generateNewTests: false skipResponseBodyAssertions: false python: - version: 0.35.7 + version: 0.35.8 additionalDependencies: dev: {} main: {} diff --git a/.speakeasy/workflow.lock b/.speakeasy/workflow.lock index 16ed356..1e421c6 100644 --- a/.speakeasy/workflow.lock +++ b/.speakeasy/workflow.lock @@ -1,9 +1,9 @@ -speakeasyVersion: 1.761.9 +speakeasyVersion: 1.768.2 sources: dub: sourceNamespace: dub - sourceRevisionDigest: sha256:d86df3c9bd604448c34853ed39872f00710adf94a49e28edb6969c2e69b3bcaf - sourceBlobDigest: sha256:e9f74dc104cf7ecd005a5bb81c2895fb57fc66b4781fea1c72750b7a3e1793b3 + sourceRevisionDigest: sha256:ea136b23f93fdd5742b6080678049b581259c6e814186c18cce1e166f9d75251 + sourceBlobDigest: sha256:52884c13f927c2f52c00f617898bea446f8bc55d8568c047d5f86b05510f9cdf tags: - latest - 0.0.1 @@ -11,10 +11,10 @@ targets: my-first-target: source: dub sourceNamespace: dub - sourceRevisionDigest: sha256:d86df3c9bd604448c34853ed39872f00710adf94a49e28edb6969c2e69b3bcaf - sourceBlobDigest: sha256:e9f74dc104cf7ecd005a5bb81c2895fb57fc66b4781fea1c72750b7a3e1793b3 + sourceRevisionDigest: sha256:ea136b23f93fdd5742b6080678049b581259c6e814186c18cce1e166f9d75251 + sourceBlobDigest: sha256:52884c13f927c2f52c00f617898bea446f8bc55d8568c047d5f86b05510f9cdf codeSamplesNamespace: code-samples-python-my-first-target - codeSamplesRevisionDigest: sha256:0632b8446052d67e5b3081429d995751095c4553926d6ff4cc3ac86de32565d9 + codeSamplesRevisionDigest: sha256:7c242b113ff05e6df93fe552f1fab6cced0d8f29ebc59595473b118b93b867b8 workflow: workflowVersion: 1.0.0 speakeasyVersion: latest diff --git a/RELEASES.md b/RELEASES.md index 14b4847..5c691b1 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1536,4 +1536,14 @@ Based on: ### Generated - [python v0.35.7] . ### Releases -- [PyPI v0.35.7] https://pypi.org/project/dub/0.35.7 - . \ No newline at end of file +- [PyPI v0.35.7] https://pypi.org/project/dub/0.35.7 - . + +## 2026-05-30 01:03:00 +### Changes +Based on: +- OpenAPI Doc +- Speakeasy CLI 1.768.2 (2.889.1) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v0.35.8] . +### Releases +- [PyPI v0.35.8] https://pypi.org/project/dub/0.35.8 - . \ No newline at end of file diff --git a/codeSamples.yaml b/codeSamples.yaml index 48c2752..e48cfc4 100644 --- a/codeSamples.yaml +++ b/codeSamples.yaml @@ -842,7 +842,7 @@ actions: update: x-codeSamples: - lang: python - label: approvePartner + label: approvePartnerApplication source: |- from dub import Dub @@ -861,7 +861,7 @@ actions: update: x-codeSamples: - lang: python - label: rejectPartner + label: rejectPartnerApplication source: |- from dub import Dub @@ -914,7 +914,7 @@ actions: update: x-codeSamples: - lang: python - label: retrieveLinks + label: retrievePartnerLinks source: |- from dub import Dub diff --git a/docs/models/components/commissioncreatedeventtype.md b/docs/models/components/commissioncreatedeventtype.md index d704aff..c5edddd 100644 --- a/docs/models/components/commissioncreatedeventtype.md +++ b/docs/models/components/commissioncreatedeventtype.md @@ -11,9 +11,10 @@ value = CommissionCreatedEventType.CLICK ## Values -| Name | Value | -| -------- | -------- | -| `CLICK` | click | -| `LEAD` | lead | -| `SALE` | sale | -| `CUSTOM` | custom | \ No newline at end of file +| Name | Value | +| ---------- | ---------- | +| `CLICK` | click | +| `LEAD` | lead | +| `SALE` | sale | +| `REFERRAL` | referral | +| `CUSTOM` | custom | \ No newline at end of file diff --git a/docs/models/components/networkstatus.md b/docs/models/components/networkstatus.md new file mode 100644 index 0000000..93a9287 --- /dev/null +++ b/docs/models/components/networkstatus.md @@ -0,0 +1,22 @@ +# NetworkStatus + +The partner's network status on Dub. + +## Example Usage + +```python +from dub.models.components import NetworkStatus + +value = NetworkStatus.DRAFT +``` + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `DRAFT` | draft | +| `SUBMITTED` | submitted | +| `APPROVED` | approved | +| `REJECTED` | rejected | +| `TRUSTED` | trusted | \ No newline at end of file diff --git a/docs/models/components/partnerenrolledeventdata.md b/docs/models/components/partnerenrolledeventdata.md index fa4792b..0e608c1 100644 --- a/docs/models/components/partnerenrolledeventdata.md +++ b/docs/models/components/partnerenrolledeventdata.md @@ -7,16 +7,17 @@ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `id` | *str* | :heavy_check_mark: | The partner's unique ID on Dub. | | `name` | *str* | :heavy_check_mark: | The partner's full legal name. | -| `company_name` | *Nullable[str]* | :heavy_check_mark: | If the partner profile type is a company, this is the partner's legal company name. | +| `username` | *Nullable[str]* | :heavy_check_mark: | The partner's unique username on Dub. | | `email` | *Nullable[str]* | :heavy_check_mark: | The partner's email address. Should be a unique value across Dub. | | `image` | *Nullable[str]* | :heavy_check_mark: | The partner's avatar image. | | `description` | *OptionalNullable[str]* | :heavy_minus_sign: | A brief description of the partner and their background. | | `country` | *Nullable[str]* | :heavy_check_mark: | The partner's country (required for tax purposes). | +| `company_name` | *Nullable[str]* | :heavy_check_mark: | If the partner profile type is a company, this is the partner's legal company name. | +| `network_status` | [components.NetworkStatus](../../models/components/networkstatus.md) | :heavy_check_mark: | The partner's network status on Dub. | | `default_payout_method` | [Nullable[components.DefaultPayoutMethod]](../../models/components/defaultpayoutmethod.md) | :heavy_check_mark: | The partner's default payout method. Connect: Bank account payouts via Stripe Connect; Stablecoin: USDC payouts directly to a crypto wallet; PayPal: Payouts via PayPal | | `paypal_email` | *Nullable[str]* | :heavy_check_mark: | The partner's PayPal email (for receiving payouts via PayPal). | | `stripe_connect_id` | *Nullable[str]* | :heavy_check_mark: | The partner's Stripe Connect ID (for receiving payouts via Stripe). | | `payouts_enabled_at` | *Nullable[str]* | :heavy_check_mark: | The date when the partner enabled payouts. | -| `trusted_at` | *Nullable[str]* | :heavy_check_mark: | The date when the partner received the trusted badge in the partner network. | | `identity_verified_at` | *Nullable[str]* | :heavy_check_mark: | The date when the partner's identity was verified. | | `program_id` | *str* | :heavy_check_mark: | The program's unique ID on Dub. | | `group_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's group ID on Dub. | @@ -29,12 +30,14 @@ | `click_reward_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | `lead_reward_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | `sale_reward_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | +| `referral_reward_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | `discount_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | `application_id` | *OptionalNullable[str]* | :heavy_minus_sign: | If the partner submitted an application to join the program, this is the ID of the application. | | `banned_at` | *OptionalNullable[str]* | :heavy_minus_sign: | If the partner was banned from the program, this is the date of the ban. | | `banned_reason` | [OptionalNullable[components.BannedReason]](../../models/components/bannedreason.md) | :heavy_minus_sign: | If the partner was banned from the program, this is the reason for the ban. | | `referral_form_data` | [OptionalNullable[components.ReferralFormData]](../../models/components/referralformdata.md) | :heavy_minus_sign: | N/A | | `application` | [OptionalNullable[components.Application]](../../models/components/application.md) | :heavy_minus_sign: | Linked program application, including review outcome when applicable. | +| `tags` | List[[components.Tags](../../models/components/tags.md)] | :heavy_minus_sign: | The tags associated with the partner. | | `total_clicks` | *Optional[float]* | :heavy_minus_sign: | The total number of clicks on the partner's links | | `total_leads` | *Optional[float]* | :heavy_minus_sign: | The total number of leads generated by the partner's links | | `total_conversions` | *Optional[float]* | :heavy_minus_sign: | The total number of leads that converted to paying customers | @@ -52,4 +55,5 @@ | `twitter` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's Twitter username (e.g. `johndoe`). | | `linkedin` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's LinkedIn username (e.g. `johndoe`). | | `instagram` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's Instagram username (e.g. `johndoe`). | -| `tiktok` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's TikTok username (e.g. `johndoe`). | \ No newline at end of file +| `tiktok` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's TikTok username (e.g. `johndoe`). | +| ~~`trusted_at`~~ | *OptionalNullable[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

DEPRECATED: Use `networkStatus` instead. | \ No newline at end of file diff --git a/docs/models/components/tags.md b/docs/models/components/tags.md new file mode 100644 index 0000000..d8db47d --- /dev/null +++ b/docs/models/components/tags.md @@ -0,0 +1,9 @@ +# Tags + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | N/A | +| `name` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/approvepartnerrequestbody.md b/docs/models/operations/approvepartnerapplicationrequestbody.md similarity index 98% rename from docs/models/operations/approvepartnerrequestbody.md rename to docs/models/operations/approvepartnerapplicationrequestbody.md index c8da638..763917d 100644 --- a/docs/models/operations/approvepartnerrequestbody.md +++ b/docs/models/operations/approvepartnerapplicationrequestbody.md @@ -1,4 +1,4 @@ -# ApprovePartnerRequestBody +# ApprovePartnerApplicationRequestBody ## Fields diff --git a/docs/models/operations/approvepartnerresponsebody.md b/docs/models/operations/approvepartnerapplicationresponsebody.md similarity index 91% rename from docs/models/operations/approvepartnerresponsebody.md rename to docs/models/operations/approvepartnerapplicationresponsebody.md index 1e80c4c..44445f0 100644 --- a/docs/models/operations/approvepartnerresponsebody.md +++ b/docs/models/operations/approvepartnerapplicationresponsebody.md @@ -1,4 +1,4 @@ -# ApprovePartnerResponseBody +# ApprovePartnerApplicationResponseBody The approved partner diff --git a/docs/models/operations/createpartnernetworkstatus.md b/docs/models/operations/createpartnernetworkstatus.md new file mode 100644 index 0000000..dc415b5 --- /dev/null +++ b/docs/models/operations/createpartnernetworkstatus.md @@ -0,0 +1,22 @@ +# CreatePartnerNetworkStatus + +The partner's network status on Dub. + +## Example Usage + +```python +from dub.models.operations import CreatePartnerNetworkStatus + +value = CreatePartnerNetworkStatus.DRAFT +``` + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `DRAFT` | draft | +| `SUBMITTED` | submitted | +| `APPROVED` | approved | +| `REJECTED` | rejected | +| `TRUSTED` | trusted | \ No newline at end of file diff --git a/docs/models/operations/createpartnerresponsebody.md b/docs/models/operations/createpartnerresponsebody.md index f570ae9..f1d32b1 100644 --- a/docs/models/operations/createpartnerresponsebody.md +++ b/docs/models/operations/createpartnerresponsebody.md @@ -9,16 +9,17 @@ The created or updated partner | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `id` | *str* | :heavy_check_mark: | The partner's unique ID on Dub. | | `name` | *str* | :heavy_check_mark: | The partner's full legal name. | -| `company_name` | *Nullable[str]* | :heavy_check_mark: | If the partner profile type is a company, this is the partner's legal company name. | +| `username` | *Nullable[str]* | :heavy_check_mark: | The partner's unique username on Dub. | | `email` | *Nullable[str]* | :heavy_check_mark: | The partner's email address. Should be a unique value across Dub. | | `image` | *Nullable[str]* | :heavy_check_mark: | The partner's avatar image. | | `description` | *OptionalNullable[str]* | :heavy_minus_sign: | A brief description of the partner and their background. | | `country` | *Nullable[str]* | :heavy_check_mark: | The partner's country (required for tax purposes). | +| `company_name` | *Nullable[str]* | :heavy_check_mark: | If the partner profile type is a company, this is the partner's legal company name. | +| `network_status` | [operations.CreatePartnerNetworkStatus](../../models/operations/createpartnernetworkstatus.md) | :heavy_check_mark: | The partner's network status on Dub. | | `default_payout_method` | [Nullable[operations.CreatePartnerDefaultPayoutMethod]](../../models/operations/createpartnerdefaultpayoutmethod.md) | :heavy_check_mark: | The partner's default payout method. Connect: Bank account payouts via Stripe Connect; Stablecoin: USDC payouts directly to a crypto wallet; PayPal: Payouts via PayPal | | `paypal_email` | *Nullable[str]* | :heavy_check_mark: | The partner's PayPal email (for receiving payouts via PayPal). | | `stripe_connect_id` | *Nullable[str]* | :heavy_check_mark: | The partner's Stripe Connect ID (for receiving payouts via Stripe). | | `payouts_enabled_at` | *Nullable[str]* | :heavy_check_mark: | The date when the partner enabled payouts. | -| `trusted_at` | *Nullable[str]* | :heavy_check_mark: | The date when the partner received the trusted badge in the partner network. | | `identity_verified_at` | *Nullable[str]* | :heavy_check_mark: | The date when the partner's identity was verified. | | `program_id` | *str* | :heavy_check_mark: | The program's unique ID on Dub. | | `group_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's group ID on Dub. | @@ -31,12 +32,14 @@ The created or updated partner | `click_reward_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | `lead_reward_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | `sale_reward_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | +| `referral_reward_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | `discount_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | `application_id` | *OptionalNullable[str]* | :heavy_minus_sign: | If the partner submitted an application to join the program, this is the ID of the application. | | `banned_at` | *OptionalNullable[str]* | :heavy_minus_sign: | If the partner was banned from the program, this is the date of the ban. | | `banned_reason` | [OptionalNullable[operations.CreatePartnerBannedReason]](../../models/operations/createpartnerbannedreason.md) | :heavy_minus_sign: | If the partner was banned from the program, this is the reason for the ban. | | `referral_form_data` | [OptionalNullable[operations.CreatePartnerReferralFormData]](../../models/operations/createpartnerreferralformdata.md) | :heavy_minus_sign: | N/A | | `application` | [OptionalNullable[operations.CreatePartnerApplication]](../../models/operations/createpartnerapplication.md) | :heavy_minus_sign: | Linked program application, including review outcome when applicable. | +| `tags` | List[[operations.CreatePartnerTags](../../models/operations/createpartnertags.md)] | :heavy_minus_sign: | The tags associated with the partner. | | `total_clicks` | *Optional[float]* | :heavy_minus_sign: | The total number of clicks on the partner's links | | `total_leads` | *Optional[float]* | :heavy_minus_sign: | The total number of leads generated by the partner's links | | `total_conversions` | *Optional[float]* | :heavy_minus_sign: | The total number of leads that converted to paying customers | @@ -54,4 +57,5 @@ The created or updated partner | `twitter` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's Twitter username (e.g. `johndoe`). | | `linkedin` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's LinkedIn username (e.g. `johndoe`). | | `instagram` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's Instagram username (e.g. `johndoe`). | -| `tiktok` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's TikTok username (e.g. `johndoe`). | \ No newline at end of file +| `tiktok` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's TikTok username (e.g. `johndoe`). | +| ~~`trusted_at`~~ | *OptionalNullable[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

DEPRECATED: Use `networkStatus` instead. | \ No newline at end of file diff --git a/docs/models/operations/createpartnertags.md b/docs/models/operations/createpartnertags.md new file mode 100644 index 0000000..063aa78 --- /dev/null +++ b/docs/models/operations/createpartnertags.md @@ -0,0 +1,9 @@ +# CreatePartnerTags + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | N/A | +| `name` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/listcommissionsrequest.md b/docs/models/operations/listcommissionsrequest.md index 52c76a5..83eb298 100644 --- a/docs/models/operations/listcommissionsrequest.md +++ b/docs/models/operations/listcommissionsrequest.md @@ -3,23 +3,24 @@ ## Fields -| Field | Type | Required | Description | Example | -| ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `type` | [Optional[operations.Type]](../../models/operations/type.md) | :heavy_minus_sign: | N/A | | -| `customer_id` | *Optional[str]* | :heavy_minus_sign: | Filter the list of commissions by the associated customer. | | -| `payout_id` | *Optional[str]* | :heavy_minus_sign: | Filter the list of commissions by the associated payout. | | -| `partner_id` | *Optional[str]* | :heavy_minus_sign: | Filter the list of commissions by the associated partner. When specified, takes precedence over `tenantId`. | | -| `tenant_id` | *Optional[str]* | :heavy_minus_sign: | Filter the list of commissions by the associated partner's `tenantId` (their unique ID within your database). | | -| `group_id` | *Optional[str]* | :heavy_minus_sign: | Filter the list of commissions by the associated partner group. | | -| `invoice_id` | *Optional[str]* | :heavy_minus_sign: | Filter the list of commissions by the associated invoice. Since invoiceId is unique on a per-program basis, this will only return one commission per invoice. | | -| `status` | [Optional[operations.QueryParamStatus]](../../models/operations/queryparamstatus.md) | :heavy_minus_sign: | Filter the list of commissions by their corresponding status. | | -| `sort_by` | [Optional[operations.ListCommissionsQueryParamSortBy]](../../models/operations/listcommissionsqueryparamsortby.md) | :heavy_minus_sign: | The field to sort the list of commissions by. | | -| `sort_order` | [Optional[operations.ListCommissionsQueryParamSortOrder]](../../models/operations/listcommissionsqueryparamsortorder.md) | :heavy_minus_sign: | The sort order for the list of commissions. | | -| `interval` | [Optional[operations.ListCommissionsQueryParamInterval]](../../models/operations/listcommissionsqueryparaminterval.md) | :heavy_minus_sign: | The interval to retrieve commissions for. | | -| `start` | *Optional[str]* | :heavy_minus_sign: | The start date of the date range to filter the commissions by. | | -| `end` | *Optional[str]* | :heavy_minus_sign: | The end date of the date range to filter the commissions by. | | -| `timezone` | *Optional[str]* | :heavy_minus_sign: | N/A | | -| `ending_before` | *Optional[str]* | :heavy_minus_sign: | If specified, the query only searches for results before this cursor. Mutually exclusive with `startingAfter`. | cm_1KAP4CGN2Z5TPYYQ1W4JEYD56 | -| `starting_after` | *Optional[str]* | :heavy_minus_sign: | If specified, the query only searches for results after this cursor. Mutually exclusive with `endingBefore`. | cm_1KAP4CGN2Z5TPYYQ1W4JEYD56 | -| `page` | *Optional[float]* | :heavy_minus_sign: | DEPRECATED. Use `startingAfter` instead. | 1 | -| `page_size` | *Optional[float]* | :heavy_minus_sign: | The number of items per page. | 50 | \ No newline at end of file +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `type` | [Optional[operations.Type]](../../models/operations/type.md) | :heavy_minus_sign: | Filter the list of commissions by type. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `sale`, `sale,lead`, `-click`. | | +| `customer_id` | *Optional[str]* | :heavy_minus_sign: | Filter the list of commissions by the associated customer. | | +| `payout_id` | *Optional[str]* | :heavy_minus_sign: | Filter the list of commissions by the associated payout. | | +| `partner_id` | *Optional[str]* | :heavy_minus_sign: | Filter the list of commissions by the associated partner. When specified, takes precedence over `tenantId`. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `partner_abc`, `partner_abc,partner_xyz`, `-partner_abc`. | | +| `tenant_id` | *Optional[str]* | :heavy_minus_sign: | Filter the list of commissions by the associated partner's `tenantId` (their unique ID within your database). | | +| `group_id` | *Optional[str]* | :heavy_minus_sign: | Filter the list of commissions by the associated partner group. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `group_abc`, `group_abc,group_xyz`, `-group_abc`. | | +| `partner_tag_id` | *Optional[str]* | :heavy_minus_sign: | Filter the list of commissions by the associated partner tag. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_abc`, `ptag_abc,ptag_xyz`, `-ptag_abc`. | | +| `invoice_id` | *Optional[str]* | :heavy_minus_sign: | Filter the list of commissions by the associated invoice. Since invoiceId is unique on a per-program basis, this will only return one commission per invoice. | | +| `status` | [Optional[operations.QueryParamStatus]](../../models/operations/queryparamstatus.md) | :heavy_minus_sign: | Filter the list of commissions by their corresponding status. | | +| `sort_by` | [Optional[operations.ListCommissionsQueryParamSortBy]](../../models/operations/listcommissionsqueryparamsortby.md) | :heavy_minus_sign: | The field to sort the list of commissions by. | | +| `sort_order` | [Optional[operations.ListCommissionsQueryParamSortOrder]](../../models/operations/listcommissionsqueryparamsortorder.md) | :heavy_minus_sign: | The sort order for the list of commissions. | | +| `interval` | [Optional[operations.ListCommissionsQueryParamInterval]](../../models/operations/listcommissionsqueryparaminterval.md) | :heavy_minus_sign: | The interval to retrieve commissions for. | | +| `start` | *Optional[str]* | :heavy_minus_sign: | The start date of the date range to filter the commissions by. | | +| `end` | *Optional[str]* | :heavy_minus_sign: | The end date of the date range to filter the commissions by. | | +| `timezone` | *Optional[str]* | :heavy_minus_sign: | N/A | | +| `ending_before` | *Optional[str]* | :heavy_minus_sign: | If specified, the query only searches for results before this cursor. Mutually exclusive with `startingAfter`. | cm_1KAP4CGN2Z5TPYYQ1W4JEYD56 | +| `starting_after` | *Optional[str]* | :heavy_minus_sign: | If specified, the query only searches for results after this cursor. Mutually exclusive with `endingBefore`. | cm_1KAP4CGN2Z5TPYYQ1W4JEYD56 | +| `page` | *Optional[float]* | :heavy_minus_sign: | DEPRECATED. Use `startingAfter` instead. | 1 | +| `page_size` | *Optional[float]* | :heavy_minus_sign: | The number of items per page. | 50 | \ No newline at end of file diff --git a/docs/models/operations/listcommissionstype.md b/docs/models/operations/listcommissionstype.md index dcdfa38..c121fb3 100644 --- a/docs/models/operations/listcommissionstype.md +++ b/docs/models/operations/listcommissionstype.md @@ -11,9 +11,10 @@ value = ListCommissionsType.CLICK ## Values -| Name | Value | -| -------- | -------- | -| `CLICK` | click | -| `LEAD` | lead | -| `SALE` | sale | -| `CUSTOM` | custom | \ No newline at end of file +| Name | Value | +| ---------- | ---------- | +| `CLICK` | click | +| `LEAD` | lead | +| `SALE` | sale | +| `REFERRAL` | referral | +| `CUSTOM` | custom | \ No newline at end of file diff --git a/docs/models/operations/listeventsrequest.md b/docs/models/operations/listeventsrequest.md index ce08807..a9b0f93 100644 --- a/docs/models/operations/listeventsrequest.md +++ b/docs/models/operations/listeventsrequest.md @@ -13,6 +13,7 @@ | `tenant_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the tenant that created the link inside your system. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `tenant_123`, `tenant_123,tenant_456`, `-tenant_789`. | | | `tag_id` | *Optional[str]* | :heavy_minus_sign: | The tag ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `tag_123`, `tag_123,tag_456`, `-tag_789`. | | | `folder_id` | *Optional[str]* | :heavy_minus_sign: | The folder ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `folder_123`, `folder_123,folder_456`, `-folder_789`. If not provided, return analytics for all links. | | +| `partner_tag_id` | *Optional[str]* | :heavy_minus_sign: | The partner tag ID(s) to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_123`, `ptag_123,ptag_456`, `-ptag_789`. | | | `group_id` | *Optional[str]* | :heavy_minus_sign: | The group ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `grp_123`, `grp_123,grp_456`, `-grp_789`. | | | `partner_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the partner to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `pn_123`, `pn_123,pn_456`, `-pn_789`. | | | `customer_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the customer to retrieve analytics for. | | diff --git a/docs/models/operations/listpartnersresponsebody.md b/docs/models/operations/listpartnersresponsebody.md index 2a323d9..6097df9 100644 --- a/docs/models/operations/listpartnersresponsebody.md +++ b/docs/models/operations/listpartnersresponsebody.md @@ -7,16 +7,17 @@ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `id` | *str* | :heavy_check_mark: | The partner's unique ID on Dub. | | `name` | *str* | :heavy_check_mark: | The partner's full legal name. | -| `company_name` | *Nullable[str]* | :heavy_check_mark: | If the partner profile type is a company, this is the partner's legal company name. | +| `username` | *Nullable[str]* | :heavy_check_mark: | The partner's unique username on Dub. | | `email` | *Nullable[str]* | :heavy_check_mark: | The partner's email address. Should be a unique value across Dub. | | `image` | *Nullable[str]* | :heavy_check_mark: | The partner's avatar image. | | `description` | *OptionalNullable[str]* | :heavy_minus_sign: | A brief description of the partner and their background. | | `country` | *Nullable[str]* | :heavy_check_mark: | The partner's country (required for tax purposes). | +| `company_name` | *Nullable[str]* | :heavy_check_mark: | If the partner profile type is a company, this is the partner's legal company name. | +| `network_status` | [operations.NetworkStatus](../../models/operations/networkstatus.md) | :heavy_check_mark: | The partner's network status on Dub. | | `default_payout_method` | [Nullable[operations.DefaultPayoutMethod]](../../models/operations/defaultpayoutmethod.md) | :heavy_check_mark: | The partner's default payout method. Connect: Bank account payouts via Stripe Connect; Stablecoin: USDC payouts directly to a crypto wallet; PayPal: Payouts via PayPal | | `paypal_email` | *Nullable[str]* | :heavy_check_mark: | The partner's PayPal email (for receiving payouts via PayPal). | | `stripe_connect_id` | *Nullable[str]* | :heavy_check_mark: | The partner's Stripe Connect ID (for receiving payouts via Stripe). | | `payouts_enabled_at` | *Nullable[str]* | :heavy_check_mark: | The date when the partner enabled payouts. | -| `trusted_at` | *Nullable[str]* | :heavy_check_mark: | The date when the partner received the trusted badge in the partner network. | | `identity_verified_at` | *Nullable[str]* | :heavy_check_mark: | The date when the partner's identity was verified. | | `program_id` | *str* | :heavy_check_mark: | The program's unique ID on Dub. | | `group_id` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's group ID on Dub. | @@ -29,12 +30,14 @@ | `click_reward_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | `lead_reward_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | `sale_reward_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | +| `referral_reward_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | `discount_id` | *OptionalNullable[str]* | :heavy_minus_sign: | N/A | | `application_id` | *OptionalNullable[str]* | :heavy_minus_sign: | If the partner submitted an application to join the program, this is the ID of the application. | | `banned_at` | *OptionalNullable[str]* | :heavy_minus_sign: | If the partner was banned from the program, this is the date of the ban. | | `banned_reason` | [OptionalNullable[operations.BannedReason]](../../models/operations/bannedreason.md) | :heavy_minus_sign: | If the partner was banned from the program, this is the reason for the ban. | | `referral_form_data` | [OptionalNullable[operations.ReferralFormData]](../../models/operations/referralformdata.md) | :heavy_minus_sign: | N/A | | `application` | [OptionalNullable[operations.Application]](../../models/operations/application.md) | :heavy_minus_sign: | Linked program application, including review outcome when applicable. | +| `tags` | List[[operations.Tags](../../models/operations/tags.md)] | :heavy_minus_sign: | The tags associated with the partner. | | `total_clicks` | *Optional[float]* | :heavy_minus_sign: | The total number of clicks on the partner's links | | `total_leads` | *Optional[float]* | :heavy_minus_sign: | The total number of leads generated by the partner's links | | `total_conversions` | *Optional[float]* | :heavy_minus_sign: | The total number of leads that converted to paying customers | @@ -52,4 +55,5 @@ | `twitter` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's Twitter username (e.g. `johndoe`). | | `linkedin` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's LinkedIn username (e.g. `johndoe`). | | `instagram` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's Instagram username (e.g. `johndoe`). | -| `tiktok` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's TikTok username (e.g. `johndoe`). | \ No newline at end of file +| `tiktok` | *OptionalNullable[str]* | :heavy_minus_sign: | The partner's TikTok username (e.g. `johndoe`). | +| ~~`trusted_at`~~ | *OptionalNullable[str]* | :heavy_minus_sign: | : warning: ** DEPRECATED **: This will be removed in a future release, please migrate away from it as soon as possible.

DEPRECATED: Use `networkStatus` instead. | \ No newline at end of file diff --git a/docs/models/operations/networkstatus.md b/docs/models/operations/networkstatus.md new file mode 100644 index 0000000..a28451f --- /dev/null +++ b/docs/models/operations/networkstatus.md @@ -0,0 +1,22 @@ +# NetworkStatus + +The partner's network status on Dub. + +## Example Usage + +```python +from dub.models.operations import NetworkStatus + +value = NetworkStatus.DRAFT +``` + + +## Values + +| Name | Value | +| ----------- | ----------- | +| `DRAFT` | draft | +| `SUBMITTED` | submitted | +| `APPROVED` | approved | +| `REJECTED` | rejected | +| `TRUSTED` | trusted | \ No newline at end of file diff --git a/docs/models/operations/paymentprocessor.md b/docs/models/operations/paymentprocessor.md index 73714d3..0fca3a3 100644 --- a/docs/models/operations/paymentprocessor.md +++ b/docs/models/operations/paymentprocessor.md @@ -19,5 +19,7 @@ value = PaymentProcessor.STRIPE | `SHOPIFY` | shopify | | `POLAR` | polar | | `PADDLE` | paddle | +| `APPLE` | apple | | `REVENUECAT` | revenuecat | +| `DUB` | dub | | `CUSTOM` | custom | \ No newline at end of file diff --git a/docs/models/operations/queryparamgroupby.md b/docs/models/operations/queryparamgroupby.md index a80b463..eb9d4f9 100644 --- a/docs/models/operations/queryparamgroupby.md +++ b/docs/models/operations/queryparamgroupby.md @@ -13,31 +13,32 @@ value = QueryParamGroupBy.COUNT ## Values -| Name | Value | -| --------------- | --------------- | -| `COUNT` | count | -| `TIMESERIES` | timeseries | -| `CONTINENTS` | continents | -| `REGIONS` | regions | -| `COUNTRIES` | countries | -| `CITIES` | cities | -| `DEVICES` | devices | -| `BROWSERS` | browsers | -| `OS` | os | -| `TRIGGER` | trigger | -| `TRIGGERS` | triggers | -| `REFERERS` | referers | -| `REFERER_URLS` | referer_urls | -| `TOP_FOLDERS` | top_folders | -| `TOP_LINK_TAGS` | top_link_tags | -| `TOP_DOMAINS` | top_domains | -| `TOP_LINKS` | top_links | -| `TOP_URLS` | top_urls | -| `TOP_BASE_URLS` | top_base_urls | -| `TOP_PARTNERS` | top_partners | -| `TOP_GROUPS` | top_groups | -| `UTM_SOURCES` | utm_sources | -| `UTM_MEDIUMS` | utm_mediums | -| `UTM_CAMPAIGNS` | utm_campaigns | -| `UTM_TERMS` | utm_terms | -| `UTM_CONTENTS` | utm_contents | \ No newline at end of file +| Name | Value | +| ------------------ | ------------------ | +| `COUNT` | count | +| `TIMESERIES` | timeseries | +| `CONTINENTS` | continents | +| `REGIONS` | regions | +| `COUNTRIES` | countries | +| `CITIES` | cities | +| `DEVICES` | devices | +| `BROWSERS` | browsers | +| `OS` | os | +| `TRIGGER` | trigger | +| `TRIGGERS` | triggers | +| `REFERERS` | referers | +| `REFERER_URLS` | referer_urls | +| `TOP_FOLDERS` | top_folders | +| `TOP_LINK_TAGS` | top_link_tags | +| `TOP_DOMAINS` | top_domains | +| `TOP_LINKS` | top_links | +| `TOP_URLS` | top_urls | +| `TOP_BASE_URLS` | top_base_urls | +| `TOP_PARTNERS` | top_partners | +| `TOP_GROUPS` | top_groups | +| `TOP_PARTNER_TAGS` | top_partner_tags | +| `UTM_SOURCES` | utm_sources | +| `UTM_MEDIUMS` | utm_mediums | +| `UTM_CAMPAIGNS` | utm_campaigns | +| `UTM_TERMS` | utm_terms | +| `UTM_CONTENTS` | utm_contents | \ No newline at end of file diff --git a/docs/models/operations/reapplicationtimeframe.md b/docs/models/operations/reapplicationtimeframe.md new file mode 100644 index 0000000..cce71f4 --- /dev/null +++ b/docs/models/operations/reapplicationtimeframe.md @@ -0,0 +1,20 @@ +# ReapplicationTimeframe + +The mode for reapplying for the program. `instant`: The partner can reapply immediately. `standard`: The partner can reapply after 30 days. `never`: The partner can never reapply for the program. Defaults to `standard` if undefined. + +## Example Usage + +```python +from dub.models.operations import ReapplicationTimeframe + +value = ReapplicationTimeframe.INSTANT +``` + + +## Values + +| Name | Value | +| ---------- | ---------- | +| `INSTANT` | instant | +| `STANDARD` | standard | +| `NEVER` | never | \ No newline at end of file diff --git a/docs/models/operations/rejectpartnerapplicationrequestbody.md b/docs/models/operations/rejectpartnerapplicationrequestbody.md new file mode 100644 index 0000000..3ef975d --- /dev/null +++ b/docs/models/operations/rejectpartnerapplicationrequestbody.md @@ -0,0 +1,13 @@ +# RejectPartnerApplicationRequestBody + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `partner_id` | *str* | :heavy_check_mark: | The ID of the partner to reject. | +| `rejection_reason` | [Optional[operations.RejectionReason]](../../models/operations/rejectionreason.md) | :heavy_minus_sign: | The reason for rejecting the partner application. This will be shared with the partner via email. | +| `rejection_note` | *Optional[str]* | :heavy_minus_sign: | Additional details about the rejection. This will be shared with the partner via email. | +| `reapplication_timeframe` | [Optional[operations.ReapplicationTimeframe]](../../models/operations/reapplicationtimeframe.md) | :heavy_minus_sign: | The mode for reapplying for the program. `instant`: The partner can reapply immediately. `standard`: The partner can reapply after 30 days. `never`: The partner can never reapply for the program. Defaults to `standard` if undefined. | +| `flag_for_fraud` | *Optional[bool]* | :heavy_minus_sign: | Whether to flag the partner for fraud review by the Dub team. Cannot be combined with `reapplicationTimeframe: instant`. | +| `flag_for_fraud_reason` | *Optional[str]* | :heavy_minus_sign: | The reason for flagging the partner for fraud. Required when flagForFraud is true. | \ No newline at end of file diff --git a/docs/models/operations/rejectpartnerresponsebody.md b/docs/models/operations/rejectpartnerapplicationresponsebody.md similarity index 91% rename from docs/models/operations/rejectpartnerresponsebody.md rename to docs/models/operations/rejectpartnerapplicationresponsebody.md index 84b34aa..358d73f 100644 --- a/docs/models/operations/rejectpartnerresponsebody.md +++ b/docs/models/operations/rejectpartnerapplicationresponsebody.md @@ -1,4 +1,4 @@ -# RejectPartnerResponseBody +# RejectPartnerApplicationResponseBody The rejected partner diff --git a/docs/models/operations/rejectpartnerrequestbody.md b/docs/models/operations/rejectpartnerrequestbody.md deleted file mode 100644 index dfe42d2..0000000 --- a/docs/models/operations/rejectpartnerrequestbody.md +++ /dev/null @@ -1,11 +0,0 @@ -# RejectPartnerRequestBody - - -## Fields - -| Field | Type | Required | Description | -| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | -| `partner_id` | *str* | :heavy_check_mark: | The ID of the partner to reject. | -| `rejection_reason` | [Optional[operations.RejectionReason]](../../models/operations/rejectionreason.md) | :heavy_minus_sign: | The reason for rejecting the partner application. This will be shared with the partner via email. | -| `rejection_note` | *Optional[str]* | :heavy_minus_sign: | Additional details about the rejection. This will be shared with the partner via email. | -| `allow_immediate_reapply` | *Optional[bool]* | :heavy_minus_sign: | When true, pending enrollment is removed so the partner can submit a new application immediately. | \ No newline at end of file diff --git a/docs/models/operations/responsebodypaymentprocessor.md b/docs/models/operations/responsebodypaymentprocessor.md index e6e7053..a512381 100644 --- a/docs/models/operations/responsebodypaymentprocessor.md +++ b/docs/models/operations/responsebodypaymentprocessor.md @@ -19,5 +19,7 @@ value = ResponseBodyPaymentProcessor.STRIPE | `SHOPIFY` | shopify | | `POLAR` | polar | | `PADDLE` | paddle | +| `APPLE` | apple | | `REVENUECAT` | revenuecat | +| `DUB` | dub | | `CUSTOM` | custom | \ No newline at end of file diff --git a/docs/models/operations/retrieveanalyticsrequest.md b/docs/models/operations/retrieveanalyticsrequest.md index c6aaea3..310d7e6 100644 --- a/docs/models/operations/retrieveanalyticsrequest.md +++ b/docs/models/operations/retrieveanalyticsrequest.md @@ -14,6 +14,7 @@ | `tenant_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the tenant that created the link inside your system. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `tenant_123`, `tenant_123,tenant_456`, `-tenant_789`. | | | `tag_id` | *Optional[str]* | :heavy_minus_sign: | The tag ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `tag_123`, `tag_123,tag_456`, `-tag_789`. | | | `folder_id` | *Optional[str]* | :heavy_minus_sign: | The folder ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `folder_123`, `folder_123,folder_456`, `-folder_789`. If not provided, return analytics for all links. | | +| `partner_tag_id` | *Optional[str]* | :heavy_minus_sign: | The partner tag ID(s) to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_123`, `ptag_123,ptag_456`, `-ptag_789`. | | | `group_id` | *Optional[str]* | :heavy_minus_sign: | The group ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `grp_123`, `grp_123,grp_456`, `-grp_789`. | | | `partner_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the partner to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `pn_123`, `pn_123,pn_456`, `-pn_789`. | | | `customer_id` | *Optional[str]* | :heavy_minus_sign: | The ID of the customer to retrieve analytics for. | | diff --git a/docs/models/operations/retrievelinksrequest.md b/docs/models/operations/retrievepartnerlinksrequest.md similarity index 98% rename from docs/models/operations/retrievelinksrequest.md rename to docs/models/operations/retrievepartnerlinksrequest.md index 2ae01d4..993f7f5 100644 --- a/docs/models/operations/retrievelinksrequest.md +++ b/docs/models/operations/retrievepartnerlinksrequest.md @@ -1,4 +1,4 @@ -# RetrieveLinksRequest +# RetrievePartnerLinksRequest ## Fields diff --git a/docs/models/operations/retrievelinksresponsebody.md b/docs/models/operations/retrievepartnerlinksresponsebody.md similarity index 99% rename from docs/models/operations/retrievelinksresponsebody.md rename to docs/models/operations/retrievepartnerlinksresponsebody.md index 4fb3e7e..f3ba4c3 100644 --- a/docs/models/operations/retrievelinksresponsebody.md +++ b/docs/models/operations/retrievepartnerlinksresponsebody.md @@ -1,4 +1,4 @@ -# RetrieveLinksResponseBody +# RetrievePartnerLinksResponseBody ## Fields diff --git a/docs/models/operations/tags.md b/docs/models/operations/tags.md new file mode 100644 index 0000000..d8db47d --- /dev/null +++ b/docs/models/operations/tags.md @@ -0,0 +1,9 @@ +# Tags + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *str* | :heavy_check_mark: | N/A | +| `name` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/operations/type.md b/docs/models/operations/type.md index 8d2a2a7..e9de83f 100644 --- a/docs/models/operations/type.md +++ b/docs/models/operations/type.md @@ -1,5 +1,7 @@ # Type +Filter the list of commissions by type. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `sale`, `sale,lead`, `-click`. + ## Example Usage ```python @@ -11,9 +13,10 @@ value = Type.CLICK ## Values -| Name | Value | -| -------- | -------- | -| `CLICK` | click | -| `LEAD` | lead | -| `SALE` | sale | -| `CUSTOM` | custom | \ No newline at end of file +| Name | Value | +| ---------- | ---------- | +| `CLICK` | click | +| `LEAD` | lead | +| `SALE` | sale | +| `REFERRAL` | referral | +| `CUSTOM` | custom | \ No newline at end of file diff --git a/docs/models/operations/updatecommissiontype.md b/docs/models/operations/updatecommissiontype.md index 9137991..108d51e 100644 --- a/docs/models/operations/updatecommissiontype.md +++ b/docs/models/operations/updatecommissiontype.md @@ -11,9 +11,10 @@ value = UpdateCommissionType.CLICK ## Values -| Name | Value | -| -------- | -------- | -| `CLICK` | click | -| `LEAD` | lead | -| `SALE` | sale | -| `CUSTOM` | custom | \ No newline at end of file +| Name | Value | +| ---------- | ---------- | +| `CLICK` | click | +| `LEAD` | lead | +| `SALE` | sale | +| `REFERRAL` | referral | +| `CUSTOM` | custom | \ No newline at end of file diff --git a/docs/sdks/partnerapplications/README.md b/docs/sdks/partnerapplications/README.md index e52ca3d..60f64ec 100644 --- a/docs/sdks/partnerapplications/README.md +++ b/docs/sdks/partnerapplications/README.md @@ -67,7 +67,7 @@ Approve a pending partner application to your program. The partner will be enrol ### Example Usage - + ```python from dub import Dub @@ -87,14 +87,14 @@ with Dub( ### Parameters -| Parameter | Type | Required | Description | -| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| `request` | [operations.ApprovePartnerRequestBody](../../models/operations/approvepartnerrequestbody.md) | :heavy_check_mark: | The request object to use for the request. | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `request` | [operations.ApprovePartnerApplicationRequestBody](../../models/operations/approvepartnerapplicationrequestbody.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response -**[operations.ApprovePartnerResponseBody](../../models/operations/approvepartnerresponsebody.md)** +**[operations.ApprovePartnerApplicationResponseBody](../../models/operations/approvepartnerapplicationresponsebody.md)** ### Errors @@ -117,7 +117,7 @@ Reject a pending partner application to your program. The partner will be notifi ### Example Usage - + ```python from dub import Dub @@ -137,14 +137,14 @@ with Dub( ### Parameters -| Parameter | Type | Required | Description | -| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | -| `request` | [operations.RejectPartnerRequestBody](../../models/operations/rejectpartnerrequestbody.md) | :heavy_check_mark: | The request object to use for the request. | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `request` | [operations.RejectPartnerApplicationRequestBody](../../models/operations/rejectpartnerapplicationrequestbody.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response -**[operations.RejectPartnerResponseBody](../../models/operations/rejectpartnerresponsebody.md)** +**[operations.RejectPartnerApplicationResponseBody](../../models/operations/rejectpartnerapplicationresponsebody.md)** ### Errors diff --git a/docs/sdks/partners/README.md b/docs/sdks/partners/README.md index 0aa3cf7..15896f2 100644 --- a/docs/sdks/partners/README.md +++ b/docs/sdks/partners/README.md @@ -143,7 +143,7 @@ Retrieve a partner's links by their partner ID or tenant ID. ### Example Usage - + ```python from dub import Dub @@ -161,14 +161,14 @@ with Dub( ### Parameters -| Parameter | Type | Required | Description | -| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -| `request` | [operations.RetrieveLinksRequest](../../models/operations/retrievelinksrequest.md) | :heavy_check_mark: | The request object to use for the request. | -| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `request` | [operations.RetrievePartnerLinksRequest](../../models/operations/retrievepartnerlinksrequest.md) | :heavy_check_mark: | The request object to use for the request. | +| `retries` | [Optional[utils.RetryConfig]](../../models/utils/retryconfig.md) | :heavy_minus_sign: | Configuration to override the default retry behavior of the client. | ### Response -**[List[operations.RetrieveLinksResponseBody]](../../models/.md)** +**[List[operations.RetrievePartnerLinksResponseBody]](../../models/.md)** ### Errors diff --git a/pyproject.toml b/pyproject.toml index 7c93bbb..4a8c989 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,7 +1,7 @@ [project] name = "dub" -version = "0.35.7" +version = "0.35.8" description = "Python Client SDK Generated by Speakeasy" authors = [{ name = "Speakeasy" },] readme = "README-PYPI.md" diff --git a/src/dub/_version.py b/src/dub/_version.py index 3880b6c..e29145e 100644 --- a/src/dub/_version.py +++ b/src/dub/_version.py @@ -3,10 +3,10 @@ import importlib.metadata __title__: str = "dub" -__version__: str = "0.35.7" +__version__: str = "0.35.8" __openapi_doc_version__: str = "0.0.1" -__gen_version__: str = "2.881.4" -__user_agent__: str = "speakeasy-sdk/python 0.35.7 2.881.4 0.0.1 dub" +__gen_version__: str = "2.889.1" +__user_agent__: str = "speakeasy-sdk/python 0.35.8 2.889.1 0.0.1 dub" try: if __package__ is not None: diff --git a/src/dub/commissions.py b/src/dub/commissions.py index 19a0f47..f8f241a 100644 --- a/src/dub/commissions.py +++ b/src/dub/commissions.py @@ -104,6 +104,7 @@ def next_func() -> Optional[operations.ListCommissionsResponse]: partner_id=request.partner_id, tenant_id=request.tenant_id, group_id=request.group_id, + partner_tag_id=request.partner_tag_id, invoice_id=request.invoice_id, status=request.status, sort_by=request.sort_by, @@ -266,6 +267,7 @@ def next_func() -> Optional[operations.ListCommissionsResponse]: partner_id=request.partner_id, tenant_id=request.tenant_id, group_id=request.group_id, + partner_tag_id=request.partner_tag_id, invoice_id=request.invoice_id, status=request.status, sort_by=request.sort_by, diff --git a/src/dub/domains.py b/src/dub/domains.py index 319ca88..33e1284 100644 --- a/src/dub/domains.py +++ b/src/dub/domains.py @@ -94,8 +94,8 @@ def next_func() -> Optional[operations.ListDomainsResponse]: results = JSONPath("$").parse(body) if len(results) == 0 or len(results[0]) == 0: return None - limit = request.page_size if isinstance(request.page_size, int) else 50 - if len(results[0]) < limit: + limit_ = request.page_size if isinstance(request.page_size, int) else 50 + if len(results[0]) < limit_: return None return self.list( @@ -242,8 +242,8 @@ def next_func() -> Optional[operations.ListDomainsResponse]: results = JSONPath("$").parse(body) if len(results) == 0 or len(results[0]) == 0: return None - limit = request.page_size if isinstance(request.page_size, int) else 50 - if len(results[0]) < limit: + limit_ = request.page_size if isinstance(request.page_size, int) else 50 + if len(results[0]) < limit_: return None return self.list( diff --git a/src/dub/links.py b/src/dub/links.py index ad6b5e0..7e33c1f 100644 --- a/src/dub/links.py +++ b/src/dub/links.py @@ -92,8 +92,8 @@ def next_func() -> Optional[operations.GetLinksResponse]: results = JSONPath("$").parse(body) if len(results) == 0 or len(results[0]) == 0: return None - limit = request.page_size if isinstance(request.page_size, int) else 100 - if len(results[0]) < limit: + limit_ = request.page_size if isinstance(request.page_size, int) else 100 + if len(results[0]) < limit_: return None return self.list( @@ -251,8 +251,8 @@ def next_func() -> Optional[operations.GetLinksResponse]: results = JSONPath("$").parse(body) if len(results) == 0 or len(results[0]) == 0: return None - limit = request.page_size if isinstance(request.page_size, int) else 100 - if len(results[0]) < limit: + limit_ = request.page_size if isinstance(request.page_size, int) else 100 + if len(results[0]) < limit_: return None return self.list( diff --git a/src/dub/models/components/__init__.py b/src/dub/models/components/__init__.py index ceaead4..486b71f 100644 --- a/src/dub/models/components/__init__.py +++ b/src/dub/models/components/__init__.py @@ -169,6 +169,7 @@ FourTypedDict, Links, LinksTypedDict, + NetworkStatus, Options, OptionsTypedDict, PartnerEnrolledEvent, @@ -191,6 +192,8 @@ Six, SixTypedDict, Status, + Tags, + TagsTypedDict, ) from .salecreatedevent import ( Sale, @@ -336,6 +339,7 @@ "LinkWebhookEventTypedDict", "Links", "LinksTypedDict", + "NetworkStatus", "One", "Options", "OptionsTypedDict", @@ -397,6 +401,8 @@ "Six", "SixTypedDict", "Status", + "Tags", + "TagsTypedDict", "TestVariants", "TestVariantsTypedDict", "Three", @@ -555,6 +561,7 @@ "FourTypedDict": ".partnerenrolledevent", "Links": ".partnerenrolledevent", "LinksTypedDict": ".partnerenrolledevent", + "NetworkStatus": ".partnerenrolledevent", "Options": ".partnerenrolledevent", "OptionsTypedDict": ".partnerenrolledevent", "PartnerEnrolledEvent": ".partnerenrolledevent", @@ -577,6 +584,8 @@ "Six": ".partnerenrolledevent", "SixTypedDict": ".partnerenrolledevent", "Status": ".partnerenrolledevent", + "Tags": ".partnerenrolledevent", + "TagsTypedDict": ".partnerenrolledevent", "Sale": ".salecreatedevent", "SaleCreatedEvent": ".salecreatedevent", "SaleCreatedEventClick": ".salecreatedevent", diff --git a/src/dub/models/components/commissioncreatedevent.py b/src/dub/models/components/commissioncreatedevent.py index dbbced4..d9de6b9 100644 --- a/src/dub/models/components/commissioncreatedevent.py +++ b/src/dub/models/components/commissioncreatedevent.py @@ -17,6 +17,7 @@ class CommissionCreatedEventType(str, Enum): CLICK = "click" LEAD = "lead" SALE = "sale" + REFERRAL = "referral" CUSTOM = "custom" diff --git a/src/dub/models/components/partnerenrolledevent.py b/src/dub/models/components/partnerenrolledevent.py index 24f3daa..443d0e2 100644 --- a/src/dub/models/components/partnerenrolledevent.py +++ b/src/dub/models/components/partnerenrolledevent.py @@ -14,6 +14,16 @@ class PartnerEnrolledEventEvent(str, Enum): PARTNER_ENROLLED = "partner.enrolled" +class NetworkStatus(str, Enum): + r"""The partner's network status on Dub.""" + + DRAFT = "draft" + SUBMITTED = "submitted" + APPROVED = "approved" + REJECTED = "rejected" + TRUSTED = "trusted" + + class DefaultPayoutMethod(str, Enum): r"""The partner's default payout method. Connect: Bank account payouts via Stripe Connect; Stablecoin: USDC payouts directly to a crypto wallet; PayPal: Payouts via PayPal""" @@ -537,19 +547,34 @@ def serialize_model(self, handler): return m +class TagsTypedDict(TypedDict): + id: str + name: str + + +class Tags(BaseModel): + id: str + + name: str + + class PartnerEnrolledEventDataTypedDict(TypedDict): id: str r"""The partner's unique ID on Dub.""" name: str r"""The partner's full legal name.""" - company_name: Nullable[str] - r"""If the partner profile type is a company, this is the partner's legal company name.""" + username: Nullable[str] + r"""The partner's unique username on Dub.""" email: Nullable[str] r"""The partner's email address. Should be a unique value across Dub.""" image: Nullable[str] r"""The partner's avatar image.""" country: Nullable[str] r"""The partner's country (required for tax purposes).""" + company_name: Nullable[str] + r"""If the partner profile type is a company, this is the partner's legal company name.""" + network_status: NetworkStatus + r"""The partner's network status on Dub.""" default_payout_method: Nullable[DefaultPayoutMethod] r"""The partner's default payout method. Connect: Bank account payouts via Stripe Connect; Stablecoin: USDC payouts directly to a crypto wallet; PayPal: Payouts via PayPal""" paypal_email: Nullable[str] @@ -558,8 +583,6 @@ class PartnerEnrolledEventDataTypedDict(TypedDict): r"""The partner's Stripe Connect ID (for receiving payouts via Stripe).""" payouts_enabled_at: Nullable[str] r"""The date when the partner enabled payouts.""" - trusted_at: Nullable[str] - r"""The date when the partner received the trusted badge in the partner network.""" identity_verified_at: Nullable[str] r"""The date when the partner's identity was verified.""" program_id: str @@ -582,6 +605,7 @@ class PartnerEnrolledEventDataTypedDict(TypedDict): click_reward_id: NotRequired[Nullable[str]] lead_reward_id: NotRequired[Nullable[str]] sale_reward_id: NotRequired[Nullable[str]] + referral_reward_id: NotRequired[Nullable[str]] discount_id: NotRequired[Nullable[str]] application_id: NotRequired[Nullable[str]] r"""If the partner submitted an application to join the program, this is the ID of the application.""" @@ -592,6 +616,8 @@ class PartnerEnrolledEventDataTypedDict(TypedDict): referral_form_data: NotRequired[Nullable[ReferralFormDataTypedDict]] application: NotRequired[Nullable[ApplicationTypedDict]] r"""Linked program application, including review outcome when applicable.""" + tags: NotRequired[List[TagsTypedDict]] + r"""The tags associated with the partner.""" total_clicks: NotRequired[float] r"""The total number of clicks on the partner's links""" total_leads: NotRequired[float] @@ -628,6 +654,8 @@ class PartnerEnrolledEventDataTypedDict(TypedDict): r"""The partner's Instagram username (e.g. `johndoe`).""" tiktok: NotRequired[Nullable[str]] r"""The partner's TikTok username (e.g. `johndoe`).""" + trusted_at: NotRequired[Nullable[str]] + r"""DEPRECATED: Use `networkStatus` instead.""" class PartnerEnrolledEventData(BaseModel): @@ -637,8 +665,8 @@ class PartnerEnrolledEventData(BaseModel): name: str r"""The partner's full legal name.""" - company_name: Annotated[Nullable[str], pydantic.Field(alias="companyName")] - r"""If the partner profile type is a company, this is the partner's legal company name.""" + username: Nullable[str] + r"""The partner's unique username on Dub.""" email: Nullable[str] r"""The partner's email address. Should be a unique value across Dub.""" @@ -649,6 +677,12 @@ class PartnerEnrolledEventData(BaseModel): country: Nullable[str] r"""The partner's country (required for tax purposes).""" + company_name: Annotated[Nullable[str], pydantic.Field(alias="companyName")] + r"""If the partner profile type is a company, this is the partner's legal company name.""" + + network_status: Annotated[NetworkStatus, pydantic.Field(alias="networkStatus")] + r"""The partner's network status on Dub.""" + default_payout_method: Annotated[ Nullable[DefaultPayoutMethod], pydantic.Field(alias="defaultPayoutMethod") ] @@ -665,9 +699,6 @@ class PartnerEnrolledEventData(BaseModel): ] r"""The date when the partner enabled payouts.""" - trusted_at: Annotated[Nullable[str], pydantic.Field(alias="trustedAt")] - r"""The date when the partner received the trusted badge in the partner network.""" - identity_verified_at: Annotated[ Nullable[str], pydantic.Field(alias="identityVerifiedAt") ] @@ -713,6 +744,10 @@ class PartnerEnrolledEventData(BaseModel): OptionalNullable[str], pydantic.Field(alias="saleRewardId") ] = UNSET + referral_reward_id: Annotated[ + OptionalNullable[str], pydantic.Field(alias="referralRewardId") + ] = UNSET + discount_id: Annotated[ OptionalNullable[str], pydantic.Field(alias="discountId") ] = UNSET @@ -739,6 +774,9 @@ class PartnerEnrolledEventData(BaseModel): application: OptionalNullable[Application] = UNSET r"""Linked program application, including review outcome when applicable.""" + tags: Optional[List[Tags]] = None + r"""The tags associated with the partner.""" + total_clicks: Annotated[Optional[float], pydantic.Field(alias="totalClicks")] = 0 r"""The total number of clicks on the partner's links""" @@ -809,6 +847,15 @@ class PartnerEnrolledEventData(BaseModel): tiktok: OptionalNullable[str] = UNSET r"""The partner's TikTok username (e.g. `johndoe`).""" + trusted_at: Annotated[ + OptionalNullable[str], + pydantic.Field( + deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible.", + alias="trustedAt", + ), + ] = UNSET + r"""DEPRECATED: Use `networkStatus` instead.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( @@ -819,12 +866,14 @@ def serialize_model(self, handler): "clickRewardId", "leadRewardId", "saleRewardId", + "referralRewardId", "discountId", "applicationId", "bannedAt", "bannedReason", "referralFormData", "application", + "tags", "totalClicks", "totalLeads", "totalConversions", @@ -843,20 +892,21 @@ def serialize_model(self, handler): "linkedin", "instagram", "tiktok", + "trustedAt", ] ) nullable_fields = set( [ - "companyName", + "username", "email", "image", "description", "country", + "companyName", "defaultPayoutMethod", "paypalEmail", "stripeConnectId", "payoutsEnabledAt", - "trustedAt", "identityVerifiedAt", "groupId", "tenantId", @@ -864,6 +914,7 @@ def serialize_model(self, handler): "clickRewardId", "leadRewardId", "saleRewardId", + "referralRewardId", "discountId", "applicationId", "bannedAt", @@ -882,6 +933,7 @@ def serialize_model(self, handler): "linkedin", "instagram", "tiktok", + "trustedAt", ] ) serialized = handler(self) diff --git a/src/dub/models/operations/__init__.py b/src/dub/models/operations/__init__.py index 531b102..c394335 100644 --- a/src/dub/models/operations/__init__.py +++ b/src/dub/models/operations/__init__.py @@ -16,11 +16,11 @@ ApproveBountySubmissionResponseBodyTypedDict, ApproveBountySubmissionStatus, ) - from .approvepartner import ( - ApprovePartnerRequestBody, - ApprovePartnerRequestBodyTypedDict, - ApprovePartnerResponseBody, - ApprovePartnerResponseBodyTypedDict, + from .approvepartnerapplication import ( + ApprovePartnerApplicationRequestBody, + ApprovePartnerApplicationRequestBodyTypedDict, + ApprovePartnerApplicationResponseBody, + ApprovePartnerApplicationResponseBodyTypedDict, ) from .banpartner import ( BanPartnerRequestBody, @@ -124,6 +124,7 @@ CreatePartnerFieldsTypedDict, CreatePartnerLinks, CreatePartnerLinksTypedDict, + CreatePartnerNetworkStatus, CreatePartnerReferralFormData, CreatePartnerReferralFormDataTypedDict, CreatePartnerRejectionReason, @@ -136,6 +137,8 @@ CreatePartnerTagIdsTypedDict, CreatePartnerTagNames, CreatePartnerTagNamesTypedDict, + CreatePartnerTags, + CreatePartnerTagsTypedDict, CreatePartnerTestVariants, CreatePartnerTestVariantsTypedDict, Fields5, @@ -420,6 +423,7 @@ ListPartnersResponseBody, ListPartnersResponseBodyTypedDict, ListPartnersStatus, + NetworkStatus, Options, OptionsTypedDict, ReferralFormData, @@ -428,6 +432,8 @@ SevenTypedDict, Six, SixTypedDict, + Tags, + TagsTypedDict, ) from .listpayouts import ( ListPayoutsDefaultPayoutMethod, @@ -464,11 +470,12 @@ RejectBountySubmissionResponseBodyTypedDict, RejectBountySubmissionStatus, ) - from .rejectpartner import ( - RejectPartnerRequestBody, - RejectPartnerRequestBodyTypedDict, - RejectPartnerResponseBody, - RejectPartnerResponseBodyTypedDict, + from .rejectpartnerapplication import ( + ReapplicationTimeframe, + RejectPartnerApplicationRequestBody, + RejectPartnerApplicationRequestBodyTypedDict, + RejectPartnerApplicationResponseBody, + RejectPartnerApplicationResponseBodyTypedDict, RejectionReason, ) from .retrieveanalytics import ( @@ -481,12 +488,6 @@ RetrieveAnalyticsResponseBodyTypedDict, SaleType, ) - from .retrievelinks import ( - RetrieveLinksRequest, - RetrieveLinksRequestTypedDict, - RetrieveLinksResponseBody, - RetrieveLinksResponseBodyTypedDict, - ) from .retrievepartneranalytics import ( RetrievePartnerAnalyticsQueryParamGroupBy, RetrievePartnerAnalyticsQueryParamInterval, @@ -495,6 +496,12 @@ RetrievePartnerAnalyticsResponseBody, RetrievePartnerAnalyticsResponseBodyTypedDict, ) + from .retrievepartnerlinks import ( + RetrievePartnerLinksRequest, + RetrievePartnerLinksRequestTypedDict, + RetrievePartnerLinksResponseBody, + RetrievePartnerLinksResponseBodyTypedDict, + ) from .tracklead import ( Click, ClickTypedDict, @@ -619,10 +626,10 @@ "ApproveBountySubmissionResponseBody", "ApproveBountySubmissionResponseBodyTypedDict", "ApproveBountySubmissionStatus", - "ApprovePartnerRequestBody", - "ApprovePartnerRequestBodyTypedDict", - "ApprovePartnerResponseBody", - "ApprovePartnerResponseBodyTypedDict", + "ApprovePartnerApplicationRequestBody", + "ApprovePartnerApplicationRequestBodyTypedDict", + "ApprovePartnerApplicationResponseBody", + "ApprovePartnerApplicationResponseBodyTypedDict", "BanPartnerRequestBody", "BanPartnerRequestBodyTypedDict", "BanPartnerResponseBody", @@ -711,6 +718,7 @@ "CreatePartnerLinkTestVariantsTypedDict", "CreatePartnerLinks", "CreatePartnerLinksTypedDict", + "CreatePartnerNetworkStatus", "CreatePartnerReferralFormData", "CreatePartnerReferralFormDataTypedDict", "CreatePartnerRejectionReason", @@ -723,6 +731,8 @@ "CreatePartnerTagIdsTypedDict", "CreatePartnerTagNames", "CreatePartnerTagNamesTypedDict", + "CreatePartnerTags", + "CreatePartnerTagsTypedDict", "CreatePartnerTestVariants", "CreatePartnerTestVariantsTypedDict", "CreateReferralsEmbedTokenLinkProps", @@ -945,6 +955,7 @@ "ListPayoutsStatus", "Method", "Mode", + "NetworkStatus", "One", "Options", "OptionsTypedDict", @@ -963,6 +974,7 @@ "QueryParamTagIdsTypedDict", "QueryParamTagNames", "QueryParamTagNamesTypedDict", + "ReapplicationTimeframe", "Reason", "ReferralFormData", "ReferralFormDataTypedDict", @@ -980,10 +992,10 @@ "RejectBountySubmissionResponseBody", "RejectBountySubmissionResponseBodyTypedDict", "RejectBountySubmissionStatus", - "RejectPartnerRequestBody", - "RejectPartnerRequestBodyTypedDict", - "RejectPartnerResponseBody", - "RejectPartnerResponseBodyTypedDict", + "RejectPartnerApplicationRequestBody", + "RejectPartnerApplicationRequestBodyTypedDict", + "RejectPartnerApplicationResponseBody", + "RejectPartnerApplicationResponseBodyTypedDict", "RejectionReason", "RequestBody", "RequestBodyTypedDict", @@ -1005,16 +1017,16 @@ "RetrieveAnalyticsRequestTypedDict", "RetrieveAnalyticsResponseBody", "RetrieveAnalyticsResponseBodyTypedDict", - "RetrieveLinksRequest", - "RetrieveLinksRequestTypedDict", - "RetrieveLinksResponseBody", - "RetrieveLinksResponseBodyTypedDict", "RetrievePartnerAnalyticsQueryParamGroupBy", "RetrievePartnerAnalyticsQueryParamInterval", "RetrievePartnerAnalyticsRequest", "RetrievePartnerAnalyticsRequestTypedDict", "RetrievePartnerAnalyticsResponseBody", "RetrievePartnerAnalyticsResponseBodyTypedDict", + "RetrievePartnerLinksRequest", + "RetrievePartnerLinksRequestTypedDict", + "RetrievePartnerLinksResponseBody", + "RetrievePartnerLinksResponseBodyTypedDict", "Sale", "SaleEvent", "SaleEventTypedDict", @@ -1032,6 +1044,8 @@ "TagIdsTypedDict", "TagNames", "TagNamesTypedDict", + "Tags", + "TagsTypedDict", "TestVariants", "TestVariantsTypedDict", "Three", @@ -1128,10 +1142,10 @@ "ApproveBountySubmissionResponseBody": ".approvebountysubmission", "ApproveBountySubmissionResponseBodyTypedDict": ".approvebountysubmission", "ApproveBountySubmissionStatus": ".approvebountysubmission", - "ApprovePartnerRequestBody": ".approvepartner", - "ApprovePartnerRequestBodyTypedDict": ".approvepartner", - "ApprovePartnerResponseBody": ".approvepartner", - "ApprovePartnerResponseBodyTypedDict": ".approvepartner", + "ApprovePartnerApplicationRequestBody": ".approvepartnerapplication", + "ApprovePartnerApplicationRequestBodyTypedDict": ".approvepartnerapplication", + "ApprovePartnerApplicationResponseBody": ".approvepartnerapplication", + "ApprovePartnerApplicationResponseBodyTypedDict": ".approvepartnerapplication", "BanPartnerRequestBody": ".banpartner", "BanPartnerRequestBodyTypedDict": ".banpartner", "BanPartnerResponseBody": ".banpartner", @@ -1218,6 +1232,7 @@ "CreatePartnerFieldsTypedDict": ".createpartner", "CreatePartnerLinks": ".createpartner", "CreatePartnerLinksTypedDict": ".createpartner", + "CreatePartnerNetworkStatus": ".createpartner", "CreatePartnerReferralFormData": ".createpartner", "CreatePartnerReferralFormDataTypedDict": ".createpartner", "CreatePartnerRejectionReason": ".createpartner", @@ -1230,6 +1245,8 @@ "CreatePartnerTagIdsTypedDict": ".createpartner", "CreatePartnerTagNames": ".createpartner", "CreatePartnerTagNamesTypedDict": ".createpartner", + "CreatePartnerTags": ".createpartner", + "CreatePartnerTagsTypedDict": ".createpartner", "CreatePartnerTestVariants": ".createpartner", "CreatePartnerTestVariantsTypedDict": ".createpartner", "Fields5": ".createpartner", @@ -1482,6 +1499,7 @@ "ListPartnersResponseBody": ".listpartners", "ListPartnersResponseBodyTypedDict": ".listpartners", "ListPartnersStatus": ".listpartners", + "NetworkStatus": ".listpartners", "Options": ".listpartners", "OptionsTypedDict": ".listpartners", "ReferralFormData": ".listpartners", @@ -1490,6 +1508,8 @@ "SevenTypedDict": ".listpartners", "Six": ".listpartners", "SixTypedDict": ".listpartners", + "Tags": ".listpartners", + "TagsTypedDict": ".listpartners", "ListPayoutsDefaultPayoutMethod": ".listpayouts", "ListPayoutsMode": ".listpayouts", "ListPayoutsPartner": ".listpayouts", @@ -1519,11 +1539,12 @@ "RejectBountySubmissionResponseBody": ".rejectbountysubmission", "RejectBountySubmissionResponseBodyTypedDict": ".rejectbountysubmission", "RejectBountySubmissionStatus": ".rejectbountysubmission", - "RejectPartnerRequestBody": ".rejectpartner", - "RejectPartnerRequestBodyTypedDict": ".rejectpartner", - "RejectPartnerResponseBody": ".rejectpartner", - "RejectPartnerResponseBodyTypedDict": ".rejectpartner", - "RejectionReason": ".rejectpartner", + "ReapplicationTimeframe": ".rejectpartnerapplication", + "RejectPartnerApplicationRequestBody": ".rejectpartnerapplication", + "RejectPartnerApplicationRequestBodyTypedDict": ".rejectpartnerapplication", + "RejectPartnerApplicationResponseBody": ".rejectpartnerapplication", + "RejectPartnerApplicationResponseBodyTypedDict": ".rejectpartnerapplication", + "RejectionReason": ".rejectpartnerapplication", "Event": ".retrieveanalytics", "Interval": ".retrieveanalytics", "QueryParamGroupBy": ".retrieveanalytics", @@ -1532,16 +1553,16 @@ "RetrieveAnalyticsResponseBody": ".retrieveanalytics", "RetrieveAnalyticsResponseBodyTypedDict": ".retrieveanalytics", "SaleType": ".retrieveanalytics", - "RetrieveLinksRequest": ".retrievelinks", - "RetrieveLinksRequestTypedDict": ".retrievelinks", - "RetrieveLinksResponseBody": ".retrievelinks", - "RetrieveLinksResponseBodyTypedDict": ".retrievelinks", "RetrievePartnerAnalyticsQueryParamGroupBy": ".retrievepartneranalytics", "RetrievePartnerAnalyticsQueryParamInterval": ".retrievepartneranalytics", "RetrievePartnerAnalyticsRequest": ".retrievepartneranalytics", "RetrievePartnerAnalyticsRequestTypedDict": ".retrievepartneranalytics", "RetrievePartnerAnalyticsResponseBody": ".retrievepartneranalytics", "RetrievePartnerAnalyticsResponseBodyTypedDict": ".retrievepartneranalytics", + "RetrievePartnerLinksRequest": ".retrievepartnerlinks", + "RetrievePartnerLinksRequestTypedDict": ".retrievepartnerlinks", + "RetrievePartnerLinksResponseBody": ".retrievepartnerlinks", + "RetrievePartnerLinksResponseBodyTypedDict": ".retrievepartnerlinks", "Click": ".tracklead", "ClickTypedDict": ".tracklead", "Customer": ".tracklead", diff --git a/src/dub/models/operations/approvepartner.py b/src/dub/models/operations/approvepartnerapplication.py similarity index 85% rename from src/dub/models/operations/approvepartner.py rename to src/dub/models/operations/approvepartnerapplication.py index cc23dfc..a827bd5 100644 --- a/src/dub/models/operations/approvepartner.py +++ b/src/dub/models/operations/approvepartnerapplication.py @@ -7,14 +7,14 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class ApprovePartnerRequestBodyTypedDict(TypedDict): +class ApprovePartnerApplicationRequestBodyTypedDict(TypedDict): partner_id: str r"""The ID of the partner to approve.""" group_id: NotRequired[Nullable[str]] r"""The ID of the group to assign the partner to. If not provided, the partner will be assigned to the group they applied to, or the program's default group if no application group is set.""" -class ApprovePartnerRequestBody(BaseModel): +class ApprovePartnerApplicationRequestBody(BaseModel): partner_id: Annotated[str, pydantic.Field(alias="partnerId")] r"""The ID of the partner to approve.""" @@ -47,14 +47,14 @@ def serialize_model(self, handler): return m -class ApprovePartnerResponseBodyTypedDict(TypedDict): +class ApprovePartnerApplicationResponseBodyTypedDict(TypedDict): r"""The approved partner""" partner_id: str r"""The ID of the approved partner.""" -class ApprovePartnerResponseBody(BaseModel): +class ApprovePartnerApplicationResponseBody(BaseModel): r"""The approved partner""" partner_id: Annotated[str, pydantic.Field(alias="partnerId")] @@ -62,10 +62,10 @@ class ApprovePartnerResponseBody(BaseModel): try: - ApprovePartnerRequestBody.model_rebuild() + ApprovePartnerApplicationRequestBody.model_rebuild() except NameError: pass try: - ApprovePartnerResponseBody.model_rebuild() + ApprovePartnerApplicationResponseBody.model_rebuild() except NameError: pass diff --git a/src/dub/models/operations/createpartner.py b/src/dub/models/operations/createpartner.py index b1e7118..3e0c571 100644 --- a/src/dub/models/operations/createpartner.py +++ b/src/dub/models/operations/createpartner.py @@ -333,6 +333,16 @@ def serialize_model(self, handler): return m +class CreatePartnerNetworkStatus(str, Enum): + r"""The partner's network status on Dub.""" + + DRAFT = "draft" + SUBMITTED = "submitted" + APPROVED = "approved" + REJECTED = "rejected" + TRUSTED = "trusted" + + class CreatePartnerDefaultPayoutMethod(str, Enum): r"""The partner's default payout method. Connect: Bank account payouts via Stripe Connect; Stablecoin: USDC payouts directly to a crypto wallet; PayPal: Payouts via PayPal""" @@ -860,6 +870,17 @@ def serialize_model(self, handler): return m +class CreatePartnerTagsTypedDict(TypedDict): + id: str + name: str + + +class CreatePartnerTags(BaseModel): + id: str + + name: str + + class CreatePartnerResponseBodyTypedDict(TypedDict): r"""The created or updated partner""" @@ -867,14 +888,18 @@ class CreatePartnerResponseBodyTypedDict(TypedDict): r"""The partner's unique ID on Dub.""" name: str r"""The partner's full legal name.""" - company_name: Nullable[str] - r"""If the partner profile type is a company, this is the partner's legal company name.""" + username: Nullable[str] + r"""The partner's unique username on Dub.""" email: Nullable[str] r"""The partner's email address. Should be a unique value across Dub.""" image: Nullable[str] r"""The partner's avatar image.""" country: Nullable[str] r"""The partner's country (required for tax purposes).""" + company_name: Nullable[str] + r"""If the partner profile type is a company, this is the partner's legal company name.""" + network_status: CreatePartnerNetworkStatus + r"""The partner's network status on Dub.""" default_payout_method: Nullable[CreatePartnerDefaultPayoutMethod] r"""The partner's default payout method. Connect: Bank account payouts via Stripe Connect; Stablecoin: USDC payouts directly to a crypto wallet; PayPal: Payouts via PayPal""" paypal_email: Nullable[str] @@ -883,8 +908,6 @@ class CreatePartnerResponseBodyTypedDict(TypedDict): r"""The partner's Stripe Connect ID (for receiving payouts via Stripe).""" payouts_enabled_at: Nullable[str] r"""The date when the partner enabled payouts.""" - trusted_at: Nullable[str] - r"""The date when the partner received the trusted badge in the partner network.""" identity_verified_at: Nullable[str] r"""The date when the partner's identity was verified.""" program_id: str @@ -907,6 +930,7 @@ class CreatePartnerResponseBodyTypedDict(TypedDict): click_reward_id: NotRequired[Nullable[str]] lead_reward_id: NotRequired[Nullable[str]] sale_reward_id: NotRequired[Nullable[str]] + referral_reward_id: NotRequired[Nullable[str]] discount_id: NotRequired[Nullable[str]] application_id: NotRequired[Nullable[str]] r"""If the partner submitted an application to join the program, this is the ID of the application.""" @@ -917,6 +941,8 @@ class CreatePartnerResponseBodyTypedDict(TypedDict): referral_form_data: NotRequired[Nullable[CreatePartnerReferralFormDataTypedDict]] application: NotRequired[Nullable[CreatePartnerApplicationTypedDict]] r"""Linked program application, including review outcome when applicable.""" + tags: NotRequired[List[CreatePartnerTagsTypedDict]] + r"""The tags associated with the partner.""" total_clicks: NotRequired[float] r"""The total number of clicks on the partner's links""" total_leads: NotRequired[float] @@ -953,6 +979,8 @@ class CreatePartnerResponseBodyTypedDict(TypedDict): r"""The partner's Instagram username (e.g. `johndoe`).""" tiktok: NotRequired[Nullable[str]] r"""The partner's TikTok username (e.g. `johndoe`).""" + trusted_at: NotRequired[Nullable[str]] + r"""DEPRECATED: Use `networkStatus` instead.""" class CreatePartnerResponseBody(BaseModel): @@ -964,8 +992,8 @@ class CreatePartnerResponseBody(BaseModel): name: str r"""The partner's full legal name.""" - company_name: Annotated[Nullable[str], pydantic.Field(alias="companyName")] - r"""If the partner profile type is a company, this is the partner's legal company name.""" + username: Nullable[str] + r"""The partner's unique username on Dub.""" email: Nullable[str] r"""The partner's email address. Should be a unique value across Dub.""" @@ -976,6 +1004,14 @@ class CreatePartnerResponseBody(BaseModel): country: Nullable[str] r"""The partner's country (required for tax purposes).""" + company_name: Annotated[Nullable[str], pydantic.Field(alias="companyName")] + r"""If the partner profile type is a company, this is the partner's legal company name.""" + + network_status: Annotated[ + CreatePartnerNetworkStatus, pydantic.Field(alias="networkStatus") + ] + r"""The partner's network status on Dub.""" + default_payout_method: Annotated[ Nullable[CreatePartnerDefaultPayoutMethod], pydantic.Field(alias="defaultPayoutMethod"), @@ -993,9 +1029,6 @@ class CreatePartnerResponseBody(BaseModel): ] r"""The date when the partner enabled payouts.""" - trusted_at: Annotated[Nullable[str], pydantic.Field(alias="trustedAt")] - r"""The date when the partner received the trusted badge in the partner network.""" - identity_verified_at: Annotated[ Nullable[str], pydantic.Field(alias="identityVerifiedAt") ] @@ -1041,6 +1074,10 @@ class CreatePartnerResponseBody(BaseModel): OptionalNullable[str], pydantic.Field(alias="saleRewardId") ] = UNSET + referral_reward_id: Annotated[ + OptionalNullable[str], pydantic.Field(alias="referralRewardId") + ] = UNSET + discount_id: Annotated[ OptionalNullable[str], pydantic.Field(alias="discountId") ] = UNSET @@ -1069,6 +1106,9 @@ class CreatePartnerResponseBody(BaseModel): application: OptionalNullable[CreatePartnerApplication] = UNSET r"""Linked program application, including review outcome when applicable.""" + tags: Optional[List[CreatePartnerTags]] = None + r"""The tags associated with the partner.""" + total_clicks: Annotated[Optional[float], pydantic.Field(alias="totalClicks")] = 0 r"""The total number of clicks on the partner's links""" @@ -1139,6 +1179,15 @@ class CreatePartnerResponseBody(BaseModel): tiktok: OptionalNullable[str] = UNSET r"""The partner's TikTok username (e.g. `johndoe`).""" + trusted_at: Annotated[ + OptionalNullable[str], + pydantic.Field( + deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible.", + alias="trustedAt", + ), + ] = UNSET + r"""DEPRECATED: Use `networkStatus` instead.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( @@ -1149,12 +1198,14 @@ def serialize_model(self, handler): "clickRewardId", "leadRewardId", "saleRewardId", + "referralRewardId", "discountId", "applicationId", "bannedAt", "bannedReason", "referralFormData", "application", + "tags", "totalClicks", "totalLeads", "totalConversions", @@ -1173,20 +1224,21 @@ def serialize_model(self, handler): "linkedin", "instagram", "tiktok", + "trustedAt", ] ) nullable_fields = set( [ - "companyName", + "username", "email", "image", "description", "country", + "companyName", "defaultPayoutMethod", "paypalEmail", "stripeConnectId", "payoutsEnabledAt", - "trustedAt", "identityVerifiedAt", "groupId", "tenantId", @@ -1194,6 +1246,7 @@ def serialize_model(self, handler): "clickRewardId", "leadRewardId", "saleRewardId", + "referralRewardId", "discountId", "applicationId", "bannedAt", @@ -1212,6 +1265,7 @@ def serialize_model(self, handler): "linkedin", "instagram", "tiktok", + "trustedAt", ] ) serialized = handler(self) diff --git a/src/dub/models/operations/listcommissions.py b/src/dub/models/operations/listcommissions.py index aeb5165..284244a 100644 --- a/src/dub/models/operations/listcommissions.py +++ b/src/dub/models/operations/listcommissions.py @@ -11,9 +11,12 @@ class Type(str, Enum): + r"""Filter the list of commissions by type. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `sale`, `sale,lead`, `-click`.""" + CLICK = "click" LEAD = "lead" SALE = "sale" + REFERRAL = "referral" CUSTOM = "custom" @@ -59,16 +62,19 @@ class ListCommissionsQueryParamInterval(str, Enum): class ListCommissionsRequestTypedDict(TypedDict): type: NotRequired[Type] + r"""Filter the list of commissions by type. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `sale`, `sale,lead`, `-click`.""" customer_id: NotRequired[str] r"""Filter the list of commissions by the associated customer.""" payout_id: NotRequired[str] r"""Filter the list of commissions by the associated payout.""" partner_id: NotRequired[str] - r"""Filter the list of commissions by the associated partner. When specified, takes precedence over `tenantId`.""" + r"""Filter the list of commissions by the associated partner. When specified, takes precedence over `tenantId`. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `partner_abc`, `partner_abc,partner_xyz`, `-partner_abc`.""" tenant_id: NotRequired[str] r"""Filter the list of commissions by the associated partner's `tenantId` (their unique ID within your database).""" group_id: NotRequired[str] - r"""Filter the list of commissions by the associated partner group.""" + r"""Filter the list of commissions by the associated partner group. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `group_abc`, `group_abc,group_xyz`, `-group_abc`.""" + partner_tag_id: NotRequired[str] + r"""Filter the list of commissions by the associated partner tag. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_abc`, `ptag_abc,ptag_xyz`, `-ptag_abc`.""" invoice_id: NotRequired[str] r"""Filter the list of commissions by the associated invoice. Since invoiceId is unique on a per-program basis, this will only return one commission per invoice.""" status: NotRequired[QueryParamStatus] @@ -99,6 +105,7 @@ class ListCommissionsRequest(BaseModel): Optional[Type], FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), ] = None + r"""Filter the list of commissions by type. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `sale`, `sale,lead`, `-click`.""" customer_id: Annotated[ Optional[str], @@ -119,7 +126,7 @@ class ListCommissionsRequest(BaseModel): pydantic.Field(alias="partnerId"), FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), ] = None - r"""Filter the list of commissions by the associated partner. When specified, takes precedence over `tenantId`.""" + r"""Filter the list of commissions by the associated partner. When specified, takes precedence over `tenantId`. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `partner_abc`, `partner_abc,partner_xyz`, `-partner_abc`.""" tenant_id: Annotated[ Optional[str], @@ -133,7 +140,14 @@ class ListCommissionsRequest(BaseModel): pydantic.Field(alias="groupId"), FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), ] = None - r"""Filter the list of commissions by the associated partner group.""" + r"""Filter the list of commissions by the associated partner group. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `group_abc`, `group_abc,group_xyz`, `-group_abc`.""" + + partner_tag_id: Annotated[ + Optional[str], + pydantic.Field(alias="partnerTagId"), + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""Filter the list of commissions by the associated partner tag. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_abc`, `ptag_abc,ptag_xyz`, `-ptag_abc`.""" invoice_id: Annotated[ Optional[str], @@ -222,6 +236,7 @@ def serialize_model(self, handler): "partnerId", "tenantId", "groupId", + "partnerTagId", "invoiceId", "status", "sortBy", @@ -254,6 +269,7 @@ class ListCommissionsType(str, Enum): CLICK = "click" LEAD = "lead" SALE = "sale" + REFERRAL = "referral" CUSTOM = "custom" diff --git a/src/dub/models/operations/listevents.py b/src/dub/models/operations/listevents.py index 41c7228..7bfd613 100644 --- a/src/dub/models/operations/listevents.py +++ b/src/dub/models/operations/listevents.py @@ -86,6 +86,8 @@ class ListEventsRequestTypedDict(TypedDict): r"""The tag ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `tag_123`, `tag_123,tag_456`, `-tag_789`.""" folder_id: NotRequired[str] r"""The folder ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `folder_123`, `folder_123,folder_456`, `-folder_789`. If not provided, return analytics for all links.""" + partner_tag_id: NotRequired[str] + r"""The partner tag ID(s) to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_123`, `ptag_123,ptag_456`, `-ptag_789`.""" group_id: NotRequired[str] r"""The group ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `grp_123`, `grp_123,grp_456`, `-grp_789`.""" partner_id: NotRequired[str] @@ -208,6 +210,13 @@ class ListEventsRequest(BaseModel): ] = None r"""The folder ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `folder_123`, `folder_123,folder_456`, `-folder_789`. If not provided, return analytics for all links.""" + partner_tag_id: Annotated[ + Optional[str], + pydantic.Field(alias="partnerTagId"), + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""The partner tag ID(s) to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_123`, `ptag_123,ptag_456`, `-ptag_789`.""" + group_id: Annotated[ Optional[str], pydantic.Field(alias="groupId"), @@ -431,6 +440,7 @@ def serialize_model(self, handler): "tenantId", "tagId", "folderId", + "partnerTagId", "groupId", "partnerId", "customerId", @@ -492,7 +502,9 @@ class ResponseBodyPaymentProcessor(str, Enum): SHOPIFY = "shopify" POLAR = "polar" PADDLE = "paddle" + APPLE = "apple" REVENUECAT = "revenuecat" + DUB = "dub" CUSTOM = "custom" diff --git a/src/dub/models/operations/listpartners.py b/src/dub/models/operations/listpartners.py index 3d18cf8..9f3d4b8 100644 --- a/src/dub/models/operations/listpartners.py +++ b/src/dub/models/operations/listpartners.py @@ -167,6 +167,16 @@ def serialize_model(self, handler): return m +class NetworkStatus(str, Enum): + r"""The partner's network status on Dub.""" + + DRAFT = "draft" + SUBMITTED = "submitted" + APPROVED = "approved" + REJECTED = "rejected" + TRUSTED = "trusted" + + class DefaultPayoutMethod(str, Enum): r"""The partner's default payout method. Connect: Bank account payouts via Stripe Connect; Stablecoin: USDC payouts directly to a crypto wallet; PayPal: Payouts via PayPal""" @@ -692,19 +702,34 @@ def serialize_model(self, handler): return m +class TagsTypedDict(TypedDict): + id: str + name: str + + +class Tags(BaseModel): + id: str + + name: str + + class ListPartnersResponseBodyTypedDict(TypedDict): id: str r"""The partner's unique ID on Dub.""" name: str r"""The partner's full legal name.""" - company_name: Nullable[str] - r"""If the partner profile type is a company, this is the partner's legal company name.""" + username: Nullable[str] + r"""The partner's unique username on Dub.""" email: Nullable[str] r"""The partner's email address. Should be a unique value across Dub.""" image: Nullable[str] r"""The partner's avatar image.""" country: Nullable[str] r"""The partner's country (required for tax purposes).""" + company_name: Nullable[str] + r"""If the partner profile type is a company, this is the partner's legal company name.""" + network_status: NetworkStatus + r"""The partner's network status on Dub.""" default_payout_method: Nullable[DefaultPayoutMethod] r"""The partner's default payout method. Connect: Bank account payouts via Stripe Connect; Stablecoin: USDC payouts directly to a crypto wallet; PayPal: Payouts via PayPal""" paypal_email: Nullable[str] @@ -713,8 +738,6 @@ class ListPartnersResponseBodyTypedDict(TypedDict): r"""The partner's Stripe Connect ID (for receiving payouts via Stripe).""" payouts_enabled_at: Nullable[str] r"""The date when the partner enabled payouts.""" - trusted_at: Nullable[str] - r"""The date when the partner received the trusted badge in the partner network.""" identity_verified_at: Nullable[str] r"""The date when the partner's identity was verified.""" program_id: str @@ -737,6 +760,7 @@ class ListPartnersResponseBodyTypedDict(TypedDict): click_reward_id: NotRequired[Nullable[str]] lead_reward_id: NotRequired[Nullable[str]] sale_reward_id: NotRequired[Nullable[str]] + referral_reward_id: NotRequired[Nullable[str]] discount_id: NotRequired[Nullable[str]] application_id: NotRequired[Nullable[str]] r"""If the partner submitted an application to join the program, this is the ID of the application.""" @@ -747,6 +771,8 @@ class ListPartnersResponseBodyTypedDict(TypedDict): referral_form_data: NotRequired[Nullable[ReferralFormDataTypedDict]] application: NotRequired[Nullable[ApplicationTypedDict]] r"""Linked program application, including review outcome when applicable.""" + tags: NotRequired[List[TagsTypedDict]] + r"""The tags associated with the partner.""" total_clicks: NotRequired[float] r"""The total number of clicks on the partner's links""" total_leads: NotRequired[float] @@ -783,6 +809,8 @@ class ListPartnersResponseBodyTypedDict(TypedDict): r"""The partner's Instagram username (e.g. `johndoe`).""" tiktok: NotRequired[Nullable[str]] r"""The partner's TikTok username (e.g. `johndoe`).""" + trusted_at: NotRequired[Nullable[str]] + r"""DEPRECATED: Use `networkStatus` instead.""" class ListPartnersResponseBody(BaseModel): @@ -792,8 +820,8 @@ class ListPartnersResponseBody(BaseModel): name: str r"""The partner's full legal name.""" - company_name: Annotated[Nullable[str], pydantic.Field(alias="companyName")] - r"""If the partner profile type is a company, this is the partner's legal company name.""" + username: Nullable[str] + r"""The partner's unique username on Dub.""" email: Nullable[str] r"""The partner's email address. Should be a unique value across Dub.""" @@ -804,6 +832,12 @@ class ListPartnersResponseBody(BaseModel): country: Nullable[str] r"""The partner's country (required for tax purposes).""" + company_name: Annotated[Nullable[str], pydantic.Field(alias="companyName")] + r"""If the partner profile type is a company, this is the partner's legal company name.""" + + network_status: Annotated[NetworkStatus, pydantic.Field(alias="networkStatus")] + r"""The partner's network status on Dub.""" + default_payout_method: Annotated[ Nullable[DefaultPayoutMethod], pydantic.Field(alias="defaultPayoutMethod") ] @@ -820,9 +854,6 @@ class ListPartnersResponseBody(BaseModel): ] r"""The date when the partner enabled payouts.""" - trusted_at: Annotated[Nullable[str], pydantic.Field(alias="trustedAt")] - r"""The date when the partner received the trusted badge in the partner network.""" - identity_verified_at: Annotated[ Nullable[str], pydantic.Field(alias="identityVerifiedAt") ] @@ -868,6 +899,10 @@ class ListPartnersResponseBody(BaseModel): OptionalNullable[str], pydantic.Field(alias="saleRewardId") ] = UNSET + referral_reward_id: Annotated[ + OptionalNullable[str], pydantic.Field(alias="referralRewardId") + ] = UNSET + discount_id: Annotated[ OptionalNullable[str], pydantic.Field(alias="discountId") ] = UNSET @@ -894,6 +929,9 @@ class ListPartnersResponseBody(BaseModel): application: OptionalNullable[Application] = UNSET r"""Linked program application, including review outcome when applicable.""" + tags: Optional[List[Tags]] = None + r"""The tags associated with the partner.""" + total_clicks: Annotated[Optional[float], pydantic.Field(alias="totalClicks")] = 0 r"""The total number of clicks on the partner's links""" @@ -964,6 +1002,15 @@ class ListPartnersResponseBody(BaseModel): tiktok: OptionalNullable[str] = UNSET r"""The partner's TikTok username (e.g. `johndoe`).""" + trusted_at: Annotated[ + OptionalNullable[str], + pydantic.Field( + deprecated="warning: ** DEPRECATED ** - This will be removed in a future release, please migrate away from it as soon as possible.", + alias="trustedAt", + ), + ] = UNSET + r"""DEPRECATED: Use `networkStatus` instead.""" + @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set( @@ -974,12 +1021,14 @@ def serialize_model(self, handler): "clickRewardId", "leadRewardId", "saleRewardId", + "referralRewardId", "discountId", "applicationId", "bannedAt", "bannedReason", "referralFormData", "application", + "tags", "totalClicks", "totalLeads", "totalConversions", @@ -998,20 +1047,21 @@ def serialize_model(self, handler): "linkedin", "instagram", "tiktok", + "trustedAt", ] ) nullable_fields = set( [ - "companyName", + "username", "email", "image", "description", "country", + "companyName", "defaultPayoutMethod", "paypalEmail", "stripeConnectId", "payoutsEnabledAt", - "trustedAt", "identityVerifiedAt", "groupId", "tenantId", @@ -1019,6 +1069,7 @@ def serialize_model(self, handler): "clickRewardId", "leadRewardId", "saleRewardId", + "referralRewardId", "discountId", "applicationId", "bannedAt", @@ -1037,6 +1088,7 @@ def serialize_model(self, handler): "linkedin", "instagram", "tiktok", + "trustedAt", ] ) serialized = handler(self) diff --git a/src/dub/models/operations/rejectpartner.py b/src/dub/models/operations/rejectpartner.py deleted file mode 100644 index 6d8964b..0000000 --- a/src/dub/models/operations/rejectpartner.py +++ /dev/null @@ -1,91 +0,0 @@ -"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" - -from __future__ import annotations -from dub.types import BaseModel, UNSET_SENTINEL -from enum import Enum -import pydantic -from pydantic import model_serializer -from typing import Optional -from typing_extensions import Annotated, NotRequired, TypedDict - - -class RejectionReason(str, Enum): - r"""The reason for rejecting the partner application. This will be shared with the partner via email.""" - - NEEDS_MORE_DETAIL = "needsMoreDetail" - DOES_NOT_MEET_REQUIREMENTS = "doesNotMeetRequirements" - NOT_THE_RIGHT_FIT = "notTheRightFit" - OTHER = "other" - - -class RejectPartnerRequestBodyTypedDict(TypedDict): - partner_id: str - r"""The ID of the partner to reject.""" - rejection_reason: NotRequired[RejectionReason] - r"""The reason for rejecting the partner application. This will be shared with the partner via email.""" - rejection_note: NotRequired[str] - r"""Additional details about the rejection. This will be shared with the partner via email.""" - allow_immediate_reapply: NotRequired[bool] - r"""When true, pending enrollment is removed so the partner can submit a new application immediately.""" - - -class RejectPartnerRequestBody(BaseModel): - partner_id: Annotated[str, pydantic.Field(alias="partnerId")] - r"""The ID of the partner to reject.""" - - rejection_reason: Annotated[ - Optional[RejectionReason], pydantic.Field(alias="rejectionReason") - ] = None - r"""The reason for rejecting the partner application. This will be shared with the partner via email.""" - - rejection_note: Annotated[Optional[str], pydantic.Field(alias="rejectionNote")] = ( - None - ) - r"""Additional details about the rejection. This will be shared with the partner via email.""" - - allow_immediate_reapply: Annotated[ - Optional[bool], pydantic.Field(alias="allowImmediateReapply") - ] = False - r"""When true, pending enrollment is removed so the partner can submit a new application immediately.""" - - @model_serializer(mode="wrap") - def serialize_model(self, handler): - optional_fields = set( - ["rejectionReason", "rejectionNote", "allowImmediateReapply"] - ) - serialized = handler(self) - m = {} - - for n, f in type(self).model_fields.items(): - k = f.alias or n - val = serialized.get(k, serialized.get(n)) - - if val != UNSET_SENTINEL: - if val is not None or k not in optional_fields: - m[k] = val - - return m - - -class RejectPartnerResponseBodyTypedDict(TypedDict): - r"""The rejected partner""" - - partner_id: str - r"""The ID of the rejected partner.""" - - -class RejectPartnerResponseBody(BaseModel): - r"""The rejected partner""" - - partner_id: Annotated[str, pydantic.Field(alias="partnerId")] - r"""The ID of the rejected partner.""" - - -try: - RejectPartnerRequestBody.model_rebuild() -except NameError: - pass -try: - RejectPartnerResponseBody.model_rebuild() -except NameError: - pass diff --git a/src/dub/models/operations/rejectpartnerapplication.py b/src/dub/models/operations/rejectpartnerapplication.py new file mode 100644 index 0000000..dbacacf --- /dev/null +++ b/src/dub/models/operations/rejectpartnerapplication.py @@ -0,0 +1,119 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations +from dub.types import BaseModel, UNSET_SENTINEL +from enum import Enum +import pydantic +from pydantic import model_serializer +from typing import Optional +from typing_extensions import Annotated, NotRequired, TypedDict + + +class RejectionReason(str, Enum): + r"""The reason for rejecting the partner application. This will be shared with the partner via email.""" + + NEEDS_MORE_DETAIL = "needsMoreDetail" + DOES_NOT_MEET_REQUIREMENTS = "doesNotMeetRequirements" + NOT_THE_RIGHT_FIT = "notTheRightFit" + OTHER = "other" + + +class ReapplicationTimeframe(str, Enum): + r"""The mode for reapplying for the program. `instant`: The partner can reapply immediately. `standard`: The partner can reapply after 30 days. `never`: The partner can never reapply for the program. Defaults to `standard` if undefined.""" + + INSTANT = "instant" + STANDARD = "standard" + NEVER = "never" + + +class RejectPartnerApplicationRequestBodyTypedDict(TypedDict): + partner_id: str + r"""The ID of the partner to reject.""" + rejection_reason: NotRequired[RejectionReason] + r"""The reason for rejecting the partner application. This will be shared with the partner via email.""" + rejection_note: NotRequired[str] + r"""Additional details about the rejection. This will be shared with the partner via email.""" + reapplication_timeframe: NotRequired[ReapplicationTimeframe] + r"""The mode for reapplying for the program. `instant`: The partner can reapply immediately. `standard`: The partner can reapply after 30 days. `never`: The partner can never reapply for the program. Defaults to `standard` if undefined.""" + flag_for_fraud: NotRequired[bool] + r"""Whether to flag the partner for fraud review by the Dub team. Cannot be combined with `reapplicationTimeframe: instant`.""" + flag_for_fraud_reason: NotRequired[str] + r"""The reason for flagging the partner for fraud. Required when flagForFraud is true.""" + + +class RejectPartnerApplicationRequestBody(BaseModel): + partner_id: Annotated[str, pydantic.Field(alias="partnerId")] + r"""The ID of the partner to reject.""" + + rejection_reason: Annotated[ + Optional[RejectionReason], pydantic.Field(alias="rejectionReason") + ] = None + r"""The reason for rejecting the partner application. This will be shared with the partner via email.""" + + rejection_note: Annotated[Optional[str], pydantic.Field(alias="rejectionNote")] = ( + None + ) + r"""Additional details about the rejection. This will be shared with the partner via email.""" + + reapplication_timeframe: Annotated[ + Optional[ReapplicationTimeframe], pydantic.Field(alias="reapplicationTimeframe") + ] = ReapplicationTimeframe.STANDARD + r"""The mode for reapplying for the program. `instant`: The partner can reapply immediately. `standard`: The partner can reapply after 30 days. `never`: The partner can never reapply for the program. Defaults to `standard` if undefined.""" + + flag_for_fraud: Annotated[Optional[bool], pydantic.Field(alias="flagForFraud")] = ( + None + ) + r"""Whether to flag the partner for fraud review by the Dub team. Cannot be combined with `reapplicationTimeframe: instant`.""" + + flag_for_fraud_reason: Annotated[ + Optional[str], pydantic.Field(alias="flagForFraudReason") + ] = None + r"""The reason for flagging the partner for fraud. Required when flagForFraud is true.""" + + @model_serializer(mode="wrap") + def serialize_model(self, handler): + optional_fields = set( + [ + "rejectionReason", + "rejectionNote", + "reapplicationTimeframe", + "flagForFraud", + "flagForFraudReason", + ] + ) + serialized = handler(self) + m = {} + + for n, f in type(self).model_fields.items(): + k = f.alias or n + val = serialized.get(k, serialized.get(n)) + + if val != UNSET_SENTINEL: + if val is not None or k not in optional_fields: + m[k] = val + + return m + + +class RejectPartnerApplicationResponseBodyTypedDict(TypedDict): + r"""The rejected partner""" + + partner_id: str + r"""The ID of the rejected partner.""" + + +class RejectPartnerApplicationResponseBody(BaseModel): + r"""The rejected partner""" + + partner_id: Annotated[str, pydantic.Field(alias="partnerId")] + r"""The ID of the rejected partner.""" + + +try: + RejectPartnerApplicationRequestBody.model_rebuild() +except NameError: + pass +try: + RejectPartnerApplicationResponseBody.model_rebuild() +except NameError: + pass diff --git a/src/dub/models/operations/retrieveanalytics.py b/src/dub/models/operations/retrieveanalytics.py index 569e380..060490f 100644 --- a/src/dub/models/operations/retrieveanalytics.py +++ b/src/dub/models/operations/retrieveanalytics.py @@ -59,6 +59,7 @@ class QueryParamGroupBy(str, Enum): TOP_BASE_URLS = "top_base_urls" TOP_PARTNERS = "top_partners" TOP_GROUPS = "top_groups" + TOP_PARTNER_TAGS = "top_partner_tags" UTM_SOURCES = "utm_sources" UTM_MEDIUMS = "utm_mediums" UTM_CAMPAIGNS = "utm_campaigns" @@ -106,6 +107,8 @@ class RetrieveAnalyticsRequestTypedDict(TypedDict): r"""The tag ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `tag_123`, `tag_123,tag_456`, `-tag_789`.""" folder_id: NotRequired[str] r"""The folder ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `folder_123`, `folder_123,folder_456`, `-folder_789`. If not provided, return analytics for all links.""" + partner_tag_id: NotRequired[str] + r"""The partner tag ID(s) to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_123`, `ptag_123,ptag_456`, `-ptag_789`.""" group_id: NotRequired[str] r"""The group ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `grp_123`, `grp_123,grp_456`, `-grp_789`.""" partner_id: NotRequired[str] @@ -227,6 +230,13 @@ class RetrieveAnalyticsRequest(BaseModel): ] = None r"""The folder ID to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `folder_123`, `folder_123,folder_456`, `-folder_789`. If not provided, return analytics for all links.""" + partner_tag_id: Annotated[ + Optional[str], + pydantic.Field(alias="partnerTagId"), + FieldMetadata(query=QueryParamMetadata(style="form", explode=True)), + ] = None + r"""The partner tag ID(s) to retrieve analytics for. Supports advanced filtering: single value, multiple values (comma-separated), or exclusion (prefix with `-`). Examples: `ptag_123`, `ptag_123,ptag_456`, `-ptag_789`.""" + group_id: Annotated[ Optional[str], pydantic.Field(alias="groupId"), @@ -421,6 +431,7 @@ def serialize_model(self, handler): "tenantId", "tagId", "folderId", + "partnerTagId", "groupId", "partnerId", "customerId", diff --git a/src/dub/models/operations/retrievelinks.py b/src/dub/models/operations/retrievepartnerlinks.py similarity index 94% rename from src/dub/models/operations/retrievelinks.py rename to src/dub/models/operations/retrievepartnerlinks.py index 62cd679..43bb0d4 100644 --- a/src/dub/models/operations/retrievelinks.py +++ b/src/dub/models/operations/retrievepartnerlinks.py @@ -9,14 +9,14 @@ from typing_extensions import Annotated, NotRequired, TypedDict -class RetrieveLinksRequestTypedDict(TypedDict): +class RetrievePartnerLinksRequestTypedDict(TypedDict): partner_id: NotRequired[Nullable[str]] r"""The ID of the partner to create a link for. Will take precedence over `tenantId` if provided.""" tenant_id: NotRequired[Nullable[str]] r"""The ID of the partner in your system. If both `partnerId` and `tenantId` are not provided, an error will be thrown.""" -class RetrieveLinksRequest(BaseModel): +class RetrievePartnerLinksRequest(BaseModel): partner_id: Annotated[ OptionalNullable[str], pydantic.Field(alias="partnerId"), @@ -57,7 +57,7 @@ def serialize_model(self, handler): return m -class RetrieveLinksResponseBodyTypedDict(TypedDict): +class RetrievePartnerLinksResponseBodyTypedDict(TypedDict): id: str r"""The unique ID of the short link.""" domain: str @@ -80,7 +80,7 @@ class RetrieveLinksResponseBodyTypedDict(TypedDict): r"""The total dollar value of sales (in cents) generated by the short link.""" -class RetrieveLinksResponseBody(BaseModel): +class RetrievePartnerLinksResponseBody(BaseModel): id: str r"""The unique ID of the short link.""" @@ -129,6 +129,6 @@ def serialize_model(self, handler): try: - RetrieveLinksResponseBody.model_rebuild() + RetrievePartnerLinksResponseBody.model_rebuild() except NameError: pass diff --git a/src/dub/models/operations/tracksale.py b/src/dub/models/operations/tracksale.py index 3b4fd45..acc1f10 100644 --- a/src/dub/models/operations/tracksale.py +++ b/src/dub/models/operations/tracksale.py @@ -16,7 +16,9 @@ class PaymentProcessor(str, Enum): SHOPIFY = "shopify" POLAR = "polar" PADDLE = "paddle" + APPLE = "apple" REVENUECAT = "revenuecat" + DUB = "dub" CUSTOM = "custom" diff --git a/src/dub/models/operations/updatecommission.py b/src/dub/models/operations/updatecommission.py index d5e5fe4..26bbf76 100644 --- a/src/dub/models/operations/updatecommission.py +++ b/src/dub/models/operations/updatecommission.py @@ -137,6 +137,7 @@ class UpdateCommissionType(str, Enum): CLICK = "click" LEAD = "lead" SALE = "sale" + REFERRAL = "referral" CUSTOM = "custom" diff --git a/src/dub/models/operations/updatefolder.py b/src/dub/models/operations/updatefolder.py index 82d1d58..21884af 100644 --- a/src/dub/models/operations/updatefolder.py +++ b/src/dub/models/operations/updatefolder.py @@ -35,14 +35,13 @@ class UpdateFolderRequestBody(BaseModel): access_level: Annotated[ OptionalNullable[UpdateFolderAccessLevel], pydantic.Field(alias="accessLevel") - ] = None + ] = UNSET r"""The access level of the folder within the workspace.""" @model_serializer(mode="wrap") def serialize_model(self, handler): optional_fields = set(["name", "description", "accessLevel"]) nullable_fields = set(["description", "accessLevel"]) - null_default_fields = set(["accessLevel"]) serialized = handler(self) m = {} @@ -51,10 +50,7 @@ def serialize_model(self, handler): val = serialized.get(k, serialized.get(n)) is_nullable_and_explicitly_set = ( k in nullable_fields - and ( - self.__pydantic_fields_set__.intersection({n}) - or k in null_default_fields - ) # pylint: disable=no-member + and (self.__pydantic_fields_set__.intersection({n})) # pylint: disable=no-member ) if val != UNSET_SENTINEL: diff --git a/src/dub/partner_applications.py b/src/dub/partner_applications.py index ad4370c..7029ad4 100644 --- a/src/dub/partner_applications.py +++ b/src/dub/partner_applications.py @@ -260,14 +260,14 @@ def approve( self, *, request: Union[ - operations.ApprovePartnerRequestBody, - operations.ApprovePartnerRequestBodyTypedDict, + operations.ApprovePartnerApplicationRequestBody, + operations.ApprovePartnerApplicationRequestBodyTypedDict, ], retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> operations.ApprovePartnerResponseBody: + ) -> operations.ApprovePartnerApplicationResponseBody: r"""Approve a partner application Approve a pending partner application to your program. The partner will be enrolled in the specified group and notified of the approval. @@ -289,8 +289,10 @@ def approve( base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): - request = utils.unmarshal(request, operations.ApprovePartnerRequestBody) - request = cast(operations.ApprovePartnerRequestBody, request) + request = utils.unmarshal( + request, operations.ApprovePartnerApplicationRequestBody + ) + request = cast(operations.ApprovePartnerApplicationRequestBody, request) req = self._build_request( method="POST", @@ -306,7 +308,11 @@ def approve( http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( - request, False, False, "json", operations.ApprovePartnerRequestBody + request, + False, + False, + "json", + operations.ApprovePartnerApplicationRequestBody, ), allow_empty_value=None, timeout_ms=timeout_ms, @@ -324,7 +330,7 @@ def approve( hook_ctx=HookContext( config=self.sdk_configuration, base_url=base_url or "", - operation_id="approvePartner", + operation_id="approvePartnerApplication", oauth2_scopes=None, security_source=self.sdk_configuration.security, ), @@ -336,7 +342,7 @@ def approve( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response( - operations.ApprovePartnerResponseBody, http_res + operations.ApprovePartnerApplicationResponseBody, http_res ) if utils.match_response(http_res, "400", "application/json"): response_data = unmarshal_json_response(errors.BadRequestData, http_res) @@ -384,14 +390,14 @@ async def approve_async( self, *, request: Union[ - operations.ApprovePartnerRequestBody, - operations.ApprovePartnerRequestBodyTypedDict, + operations.ApprovePartnerApplicationRequestBody, + operations.ApprovePartnerApplicationRequestBodyTypedDict, ], retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> operations.ApprovePartnerResponseBody: + ) -> operations.ApprovePartnerApplicationResponseBody: r"""Approve a partner application Approve a pending partner application to your program. The partner will be enrolled in the specified group and notified of the approval. @@ -413,8 +419,10 @@ async def approve_async( base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): - request = utils.unmarshal(request, operations.ApprovePartnerRequestBody) - request = cast(operations.ApprovePartnerRequestBody, request) + request = utils.unmarshal( + request, operations.ApprovePartnerApplicationRequestBody + ) + request = cast(operations.ApprovePartnerApplicationRequestBody, request) req = self._build_request_async( method="POST", @@ -430,7 +438,11 @@ async def approve_async( http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( - request, False, False, "json", operations.ApprovePartnerRequestBody + request, + False, + False, + "json", + operations.ApprovePartnerApplicationRequestBody, ), allow_empty_value=None, timeout_ms=timeout_ms, @@ -448,7 +460,7 @@ async def approve_async( hook_ctx=HookContext( config=self.sdk_configuration, base_url=base_url or "", - operation_id="approvePartner", + operation_id="approvePartnerApplication", oauth2_scopes=None, security_source=self.sdk_configuration.security, ), @@ -460,7 +472,7 @@ async def approve_async( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response( - operations.ApprovePartnerResponseBody, http_res + operations.ApprovePartnerApplicationResponseBody, http_res ) if utils.match_response(http_res, "400", "application/json"): response_data = unmarshal_json_response(errors.BadRequestData, http_res) @@ -508,14 +520,14 @@ def reject( self, *, request: Union[ - operations.RejectPartnerRequestBody, - operations.RejectPartnerRequestBodyTypedDict, + operations.RejectPartnerApplicationRequestBody, + operations.RejectPartnerApplicationRequestBodyTypedDict, ], retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> operations.RejectPartnerResponseBody: + ) -> operations.RejectPartnerApplicationResponseBody: r"""Reject a partner application Reject a pending partner application to your program. The partner will be notified via email that their application was not approved. @@ -537,8 +549,10 @@ def reject( base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): - request = utils.unmarshal(request, operations.RejectPartnerRequestBody) - request = cast(operations.RejectPartnerRequestBody, request) + request = utils.unmarshal( + request, operations.RejectPartnerApplicationRequestBody + ) + request = cast(operations.RejectPartnerApplicationRequestBody, request) req = self._build_request( method="POST", @@ -554,7 +568,11 @@ def reject( http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( - request, False, False, "json", operations.RejectPartnerRequestBody + request, + False, + False, + "json", + operations.RejectPartnerApplicationRequestBody, ), allow_empty_value=None, timeout_ms=timeout_ms, @@ -572,7 +590,7 @@ def reject( hook_ctx=HookContext( config=self.sdk_configuration, base_url=base_url or "", - operation_id="rejectPartner", + operation_id="rejectPartnerApplication", oauth2_scopes=None, security_source=self.sdk_configuration.security, ), @@ -584,7 +602,7 @@ def reject( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response( - operations.RejectPartnerResponseBody, http_res + operations.RejectPartnerApplicationResponseBody, http_res ) if utils.match_response(http_res, "400", "application/json"): response_data = unmarshal_json_response(errors.BadRequestData, http_res) @@ -632,14 +650,14 @@ async def reject_async( self, *, request: Union[ - operations.RejectPartnerRequestBody, - operations.RejectPartnerRequestBodyTypedDict, + operations.RejectPartnerApplicationRequestBody, + operations.RejectPartnerApplicationRequestBodyTypedDict, ], retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> operations.RejectPartnerResponseBody: + ) -> operations.RejectPartnerApplicationResponseBody: r"""Reject a partner application Reject a pending partner application to your program. The partner will be notified via email that their application was not approved. @@ -661,8 +679,10 @@ async def reject_async( base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): - request = utils.unmarshal(request, operations.RejectPartnerRequestBody) - request = cast(operations.RejectPartnerRequestBody, request) + request = utils.unmarshal( + request, operations.RejectPartnerApplicationRequestBody + ) + request = cast(operations.RejectPartnerApplicationRequestBody, request) req = self._build_request_async( method="POST", @@ -678,7 +698,11 @@ async def reject_async( http_headers=http_headers, security=self.sdk_configuration.security, get_serialized_body=lambda: utils.serialize_request_body( - request, False, False, "json", operations.RejectPartnerRequestBody + request, + False, + False, + "json", + operations.RejectPartnerApplicationRequestBody, ), allow_empty_value=None, timeout_ms=timeout_ms, @@ -696,7 +720,7 @@ async def reject_async( hook_ctx=HookContext( config=self.sdk_configuration, base_url=base_url or "", - operation_id="rejectPartner", + operation_id="rejectPartnerApplication", oauth2_scopes=None, security_source=self.sdk_configuration.security, ), @@ -708,7 +732,7 @@ async def reject_async( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response( - operations.RejectPartnerResponseBody, http_res + operations.RejectPartnerApplicationResponseBody, http_res ) if utils.match_response(http_res, "400", "application/json"): response_data = unmarshal_json_response(errors.BadRequestData, http_res) diff --git a/src/dub/partners.py b/src/dub/partners.py index 553542f..8794187 100644 --- a/src/dub/partners.py +++ b/src/dub/partners.py @@ -518,13 +518,14 @@ def retrieve_links( self, *, request: Union[ - operations.RetrieveLinksRequest, operations.RetrieveLinksRequestTypedDict + operations.RetrievePartnerLinksRequest, + operations.RetrievePartnerLinksRequestTypedDict, ], retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> List[operations.RetrieveLinksResponseBody]: + ) -> List[operations.RetrievePartnerLinksResponseBody]: r"""Retrieve a partner's links. Retrieve a partner's links by their partner ID or tenant ID. @@ -546,8 +547,8 @@ def retrieve_links( base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): - request = utils.unmarshal(request, operations.RetrieveLinksRequest) - request = cast(operations.RetrieveLinksRequest, request) + request = utils.unmarshal(request, operations.RetrievePartnerLinksRequest) + request = cast(operations.RetrievePartnerLinksRequest, request) req = self._build_request( method="GET", @@ -578,7 +579,7 @@ def retrieve_links( hook_ctx=HookContext( config=self.sdk_configuration, base_url=base_url or "", - operation_id="retrieveLinks", + operation_id="retrievePartnerLinks", oauth2_scopes=None, security_source=self.sdk_configuration.security, ), @@ -590,7 +591,7 @@ def retrieve_links( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response( - List[operations.RetrieveLinksResponseBody], http_res + List[operations.RetrievePartnerLinksResponseBody], http_res ) if utils.match_response(http_res, "400", "application/json"): response_data = unmarshal_json_response(errors.BadRequestData, http_res) @@ -638,13 +639,14 @@ async def retrieve_links_async( self, *, request: Union[ - operations.RetrieveLinksRequest, operations.RetrieveLinksRequestTypedDict + operations.RetrievePartnerLinksRequest, + operations.RetrievePartnerLinksRequestTypedDict, ], retries: OptionalNullable[utils.RetryConfig] = UNSET, server_url: Optional[str] = None, timeout_ms: Optional[int] = None, http_headers: Optional[Mapping[str, str]] = None, - ) -> List[operations.RetrieveLinksResponseBody]: + ) -> List[operations.RetrievePartnerLinksResponseBody]: r"""Retrieve a partner's links. Retrieve a partner's links by their partner ID or tenant ID. @@ -666,8 +668,8 @@ async def retrieve_links_async( base_url = self._get_url(base_url, url_variables) if not isinstance(request, BaseModel): - request = utils.unmarshal(request, operations.RetrieveLinksRequest) - request = cast(operations.RetrieveLinksRequest, request) + request = utils.unmarshal(request, operations.RetrievePartnerLinksRequest) + request = cast(operations.RetrievePartnerLinksRequest, request) req = self._build_request_async( method="GET", @@ -698,7 +700,7 @@ async def retrieve_links_async( hook_ctx=HookContext( config=self.sdk_configuration, base_url=base_url or "", - operation_id="retrieveLinks", + operation_id="retrievePartnerLinks", oauth2_scopes=None, security_source=self.sdk_configuration.security, ), @@ -710,7 +712,7 @@ async def retrieve_links_async( response_data: Any = None if utils.match_response(http_res, "200", "application/json"): return unmarshal_json_response( - List[operations.RetrieveLinksResponseBody], http_res + List[operations.RetrievePartnerLinksResponseBody], http_res ) if utils.match_response(http_res, "400", "application/json"): response_data = unmarshal_json_response(errors.BadRequestData, http_res) diff --git a/src/dub/sdk.py b/src/dub/sdk.py index 3d174d2..bf5cd02 100644 --- a/src/dub/sdk.py +++ b/src/dub/sdk.py @@ -114,7 +114,9 @@ def __init__( ), "The provided async_client must implement the AsyncHttpClient protocol." security: Any = None - if callable(token): + if token is None: + security = None + elif callable(token): # pylint: disable=unnecessary-lambda-assignment security = lambda: components.Security(token=token()) else: diff --git a/src/dub/types/__init__.py b/src/dub/types/__init__.py index fc76fe0..faa2681 100644 --- a/src/dub/types/__init__.py +++ b/src/dub/types/__init__.py @@ -1,5 +1,6 @@ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" +from .base64fileinput import Base64EncodedString, Base64FileInput from .basemodel import ( BaseModel, Nullable, @@ -11,6 +12,8 @@ ) __all__ = [ + "Base64EncodedString", + "Base64FileInput", "BaseModel", "Nullable", "OptionalNullable", diff --git a/src/dub/types/base64fileinput.py b/src/dub/types/base64fileinput.py new file mode 100644 index 0000000..25fc539 --- /dev/null +++ b/src/dub/types/base64fileinput.py @@ -0,0 +1,39 @@ +"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.""" + +from __future__ import annotations + +import base64 +import io +from os import PathLike +from typing import IO, Any, Union + +from pydantic.functional_validators import BeforeValidator +from typing_extensions import Annotated + + +Base64FileInput = Union[IO[bytes], PathLike[str]] + + +def encode_base64_file_input(value: Any) -> Any: + """Convert PathLike or IO[bytes] inputs to a base64 string. All standard binary streams + that inherit from io.IOBase are handled. Other values pass through. + """ + if isinstance(value, (PathLike, io.IOBase)): + if isinstance(value, PathLike): + with open(value, "rb") as fh: + binary = fh.read() + else: + binary = value.read() + if isinstance(binary, str): + binary = binary.encode() + if not isinstance(binary, (bytes, bytearray)): + raise TypeError( + f"Base64FileInput expected binary IO returning bytes; got {type(binary).__name__}" + ) + return base64.b64encode(binary).decode("ascii") + return value + + +# Non-str inputs are converted to base64 by the BeforeValidator at construction time. +# Callers can also pass a pre-encoded base64 str. +Base64EncodedString = Annotated[str, BeforeValidator(encode_base64_file_input)] From 264a3d2fb02b897cceb0dbf977e14ecec908e500 Mon Sep 17 00:00:00 2001 From: "speakeasy-github[bot]" <128539517+speakeasy-github[bot]@users.noreply.github.com> Date: Sat, 30 May 2026 01:04:37 +0000 Subject: [PATCH 2/2] empty commit to trigger [run-tests] workflow