solvapay 0.1.0.dev4__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- solvapay/__init__.py +26 -0
- solvapay/_currencies.py +170 -0
- solvapay/_generated/__init__.py +1 -0
- solvapay/_generated/models.py +3643 -0
- solvapay/_generated/operations.py +1894 -0
- solvapay/_http.py +243 -0
- solvapay/_js.py +114 -0
- solvapay/_tax_ids.py +442 -0
- solvapay/agents/__init__.py +67 -0
- solvapay/agents/calls.py +302 -0
- solvapay/agents/identity.py +293 -0
- solvapay/agents/mcp.py +614 -0
- solvapay/agents/oauth.py +105 -0
- solvapay/business_details.py +124 -0
- solvapay/client.py +107 -0
- solvapay/errors.py +33 -0
- solvapay/mcp/__init__.py +90 -0
- solvapay/mcp/app.py +243 -0
- solvapay/mcp/auth.py +604 -0
- solvapay/mcp/bootstrap.py +494 -0
- solvapay/mcp/intent.py +474 -0
- solvapay/mcp/mcp-app.html +119 -0
- solvapay/mcp/narrate.py +1019 -0
- solvapay/mcp/response.py +220 -0
- solvapay/mcp/server.py +343 -0
- solvapay/mcp/tools.py +273 -0
- solvapay/mcp/transport.py +550 -0
- solvapay/money.py +61 -0
- solvapay/paywall/__init__.py +25 -0
- solvapay/paywall/decide.py +450 -0
- solvapay/paywall/gate.py +176 -0
- solvapay/paywall/state.py +371 -0
- solvapay/pricing.py +281 -0
- solvapay/py.typed +0 -0
- solvapay/solvapay.py +173 -0
- solvapay/webhooks.py +93 -0
- solvapay-0.1.0.dev4.dist-info/METADATA +183 -0
- solvapay-0.1.0.dev4.dist-info/RECORD +39 -0
- solvapay-0.1.0.dev4.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,1894 @@
|
|
|
1
|
+
"""GENERATED by python/scripts/generate_client.py from openapi/sdk-v1.json. Do not edit."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any
|
|
6
|
+
|
|
7
|
+
from .._http import AsyncTransport, SyncTransport, encode_body, path_segment
|
|
8
|
+
from . import models
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class AsyncSolvaPayApi:
|
|
12
|
+
"""Every SolvaPay API operation, async: one method per operation."""
|
|
13
|
+
|
|
14
|
+
def __init__(self, transport: AsyncTransport) -> None:
|
|
15
|
+
self._transport = transport
|
|
16
|
+
|
|
17
|
+
async def activate_plan(
|
|
18
|
+
self,
|
|
19
|
+
*,
|
|
20
|
+
body: models.ActivatePlanDto | dict[str, Any],
|
|
21
|
+
) -> models.ActivatePlanResponseDto:
|
|
22
|
+
"""Activate a plan for a customer
|
|
23
|
+
|
|
24
|
+
POST /v1/sdk/activate"""
|
|
25
|
+
data = await self._transport.request(
|
|
26
|
+
"POST",
|
|
27
|
+
f"/v1/sdk/activate",
|
|
28
|
+
query={},
|
|
29
|
+
headers={},
|
|
30
|
+
body=encode_body(body),
|
|
31
|
+
)
|
|
32
|
+
return self._transport.parse(models.ActivatePlanResponseDto, data)
|
|
33
|
+
|
|
34
|
+
async def authorize_agent_call(
|
|
35
|
+
self,
|
|
36
|
+
*,
|
|
37
|
+
body: models.AuthorizeCallDto | dict[str, Any],
|
|
38
|
+
) -> models.AuthorizeCallResponseDto:
|
|
39
|
+
"""Authorize a paid agent call: the customer, the agent's spend policy and the estimate held against budget and balance
|
|
40
|
+
|
|
41
|
+
POST /v1/sdk/agent/calls"""
|
|
42
|
+
data = await self._transport.request(
|
|
43
|
+
"POST",
|
|
44
|
+
f"/v1/sdk/agent/calls",
|
|
45
|
+
query={},
|
|
46
|
+
headers={},
|
|
47
|
+
body=encode_body(body),
|
|
48
|
+
)
|
|
49
|
+
return self._transport.parse(models.AuthorizeCallResponseDto, data)
|
|
50
|
+
|
|
51
|
+
async def complete_agent_call(
|
|
52
|
+
self,
|
|
53
|
+
*,
|
|
54
|
+
call_ref: str,
|
|
55
|
+
body: models.CompleteCallDto | dict[str, Any],
|
|
56
|
+
) -> models.CompleteCallResponseDto:
|
|
57
|
+
"""Complete an allowed agent call: settle the spend policy and debit the call's customer at the reported cost
|
|
58
|
+
|
|
59
|
+
POST /v1/sdk/agent/calls/{callRef}/complete"""
|
|
60
|
+
data = await self._transport.request(
|
|
61
|
+
"POST",
|
|
62
|
+
f"/v1/sdk/agent/calls/{path_segment(call_ref)}/complete",
|
|
63
|
+
query={},
|
|
64
|
+
headers={},
|
|
65
|
+
body=encode_body(body),
|
|
66
|
+
)
|
|
67
|
+
return self._transport.parse(models.CompleteCallResponseDto, data)
|
|
68
|
+
|
|
69
|
+
async def verify_agent_key(
|
|
70
|
+
self,
|
|
71
|
+
*,
|
|
72
|
+
body: models.VerifyAgentKeyDto | dict[str, Any],
|
|
73
|
+
) -> models.VerifiedAgentKeyResponseDto:
|
|
74
|
+
"""Read the agent behind an agent key issued for this merchant
|
|
75
|
+
|
|
76
|
+
POST /v1/sdk/agent/keys/verifications"""
|
|
77
|
+
data = await self._transport.request(
|
|
78
|
+
"POST",
|
|
79
|
+
f"/v1/sdk/agent/keys/verifications",
|
|
80
|
+
query={},
|
|
81
|
+
headers={},
|
|
82
|
+
body=encode_body(body),
|
|
83
|
+
)
|
|
84
|
+
return self._transport.parse(models.VerifiedAgentKeyResponseDto, data)
|
|
85
|
+
|
|
86
|
+
async def report_agent_usage(
|
|
87
|
+
self,
|
|
88
|
+
*,
|
|
89
|
+
body: models.UsageReportDto | dict[str, Any],
|
|
90
|
+
) -> models.UsageReportResponseDto:
|
|
91
|
+
"""Report the merchant's own cost of each decided agent call; SolvaPay corrects the spend policy and the credits to it
|
|
92
|
+
|
|
93
|
+
POST /v1/sdk/agent/usage-reports"""
|
|
94
|
+
data = await self._transport.request(
|
|
95
|
+
"POST",
|
|
96
|
+
f"/v1/sdk/agent/usage-reports",
|
|
97
|
+
query={},
|
|
98
|
+
headers={},
|
|
99
|
+
body=encode_body(body),
|
|
100
|
+
)
|
|
101
|
+
return self._transport.parse(models.UsageReportResponseDto, data)
|
|
102
|
+
|
|
103
|
+
async def disable_auto_recharge(
|
|
104
|
+
self,
|
|
105
|
+
*,
|
|
106
|
+
customer_ref: str,
|
|
107
|
+
) -> models.DisableAutoRechargeResponse:
|
|
108
|
+
"""Disable auto-recharge for a customer
|
|
109
|
+
|
|
110
|
+
DELETE /v1/sdk/auto-recharge"""
|
|
111
|
+
data = await self._transport.request(
|
|
112
|
+
"DELETE",
|
|
113
|
+
f"/v1/sdk/auto-recharge",
|
|
114
|
+
query={"customerRef": customer_ref},
|
|
115
|
+
headers={},
|
|
116
|
+
body=None,
|
|
117
|
+
)
|
|
118
|
+
return self._transport.parse(models.DisableAutoRechargeResponse, data)
|
|
119
|
+
|
|
120
|
+
async def get_auto_recharge(
|
|
121
|
+
self,
|
|
122
|
+
*,
|
|
123
|
+
customer_ref: str,
|
|
124
|
+
) -> models.AutoRechargeGetResponse:
|
|
125
|
+
"""Get auto-recharge config for a customer
|
|
126
|
+
|
|
127
|
+
GET /v1/sdk/auto-recharge"""
|
|
128
|
+
data = await self._transport.request(
|
|
129
|
+
"GET",
|
|
130
|
+
f"/v1/sdk/auto-recharge",
|
|
131
|
+
query={"customerRef": customer_ref},
|
|
132
|
+
headers={},
|
|
133
|
+
body=None,
|
|
134
|
+
)
|
|
135
|
+
return self._transport.parse(models.AutoRechargeGetResponse, data)
|
|
136
|
+
|
|
137
|
+
async def save_auto_recharge(
|
|
138
|
+
self,
|
|
139
|
+
*,
|
|
140
|
+
body: models.PutAutoRechargeSdkDto | dict[str, Any],
|
|
141
|
+
) -> models.SaveAutoRechargeResponse:
|
|
142
|
+
"""Set or update auto-recharge config for a customer
|
|
143
|
+
|
|
144
|
+
PUT /v1/sdk/auto-recharge"""
|
|
145
|
+
data = await self._transport.request(
|
|
146
|
+
"PUT",
|
|
147
|
+
f"/v1/sdk/auto-recharge",
|
|
148
|
+
query={},
|
|
149
|
+
headers={},
|
|
150
|
+
body=encode_body(body),
|
|
151
|
+
)
|
|
152
|
+
return self._transport.parse(models.SaveAutoRechargeResponse, data)
|
|
153
|
+
|
|
154
|
+
async def create_checkout_session(
|
|
155
|
+
self,
|
|
156
|
+
*,
|
|
157
|
+
body: models.CreateCheckoutSessionRequest | dict[str, Any],
|
|
158
|
+
) -> models.CreateCheckoutSessionResponse:
|
|
159
|
+
"""Create a checkout session
|
|
160
|
+
|
|
161
|
+
POST /v1/sdk/checkout-sessions"""
|
|
162
|
+
data = await self._transport.request(
|
|
163
|
+
"POST",
|
|
164
|
+
f"/v1/sdk/checkout-sessions",
|
|
165
|
+
query={},
|
|
166
|
+
headers={},
|
|
167
|
+
body=encode_body(body),
|
|
168
|
+
)
|
|
169
|
+
return self._transport.parse(models.CreateCheckoutSessionResponse, data)
|
|
170
|
+
|
|
171
|
+
async def get_credit_activity(
|
|
172
|
+
self,
|
|
173
|
+
*,
|
|
174
|
+
customer_ref: str,
|
|
175
|
+
limit: float | None = None,
|
|
176
|
+
) -> models.CreditActivityResponseDto:
|
|
177
|
+
"""List account-wide credit activity for a customer
|
|
178
|
+
|
|
179
|
+
GET /v1/sdk/credits/activity"""
|
|
180
|
+
data = await self._transport.request(
|
|
181
|
+
"GET",
|
|
182
|
+
f"/v1/sdk/credits/activity",
|
|
183
|
+
query={"customerRef": customer_ref, "limit": limit},
|
|
184
|
+
headers={},
|
|
185
|
+
body=None,
|
|
186
|
+
)
|
|
187
|
+
return self._transport.parse(models.CreditActivityResponseDto, data)
|
|
188
|
+
|
|
189
|
+
async def get_customer_by_query(
|
|
190
|
+
self,
|
|
191
|
+
*,
|
|
192
|
+
reference: str | None = None,
|
|
193
|
+
external_ref: str | None = None,
|
|
194
|
+
email: str | None = None,
|
|
195
|
+
) -> models.CustomerResponse:
|
|
196
|
+
"""Get customer by reference, externalRef, or email
|
|
197
|
+
|
|
198
|
+
GET /v1/sdk/customers"""
|
|
199
|
+
data = await self._transport.request(
|
|
200
|
+
"GET",
|
|
201
|
+
f"/v1/sdk/customers",
|
|
202
|
+
query={"reference": reference, "externalRef": external_ref, "email": email},
|
|
203
|
+
headers={},
|
|
204
|
+
body=None,
|
|
205
|
+
)
|
|
206
|
+
return self._transport.parse(models.CustomerResponse, data)
|
|
207
|
+
|
|
208
|
+
async def create_customer(
|
|
209
|
+
self,
|
|
210
|
+
*,
|
|
211
|
+
body: models.CreateCustomerRequest | dict[str, Any],
|
|
212
|
+
) -> models.CustomerResponse:
|
|
213
|
+
"""Create a new customer
|
|
214
|
+
|
|
215
|
+
POST /v1/sdk/customers"""
|
|
216
|
+
data = await self._transport.request(
|
|
217
|
+
"POST",
|
|
218
|
+
f"/v1/sdk/customers",
|
|
219
|
+
query={},
|
|
220
|
+
headers={},
|
|
221
|
+
body=encode_body(body),
|
|
222
|
+
)
|
|
223
|
+
return self._transport.parse(models.CustomerResponse, data)
|
|
224
|
+
|
|
225
|
+
async def create_customer_session(
|
|
226
|
+
self,
|
|
227
|
+
*,
|
|
228
|
+
body: models.CreateCustomerSessionRequest | dict[str, Any],
|
|
229
|
+
) -> models.CreateCustomerSessionResponse:
|
|
230
|
+
"""Create a customer session
|
|
231
|
+
|
|
232
|
+
POST /v1/sdk/customers/customer-sessions"""
|
|
233
|
+
data = await self._transport.request(
|
|
234
|
+
"POST",
|
|
235
|
+
f"/v1/sdk/customers/customer-sessions",
|
|
236
|
+
query={},
|
|
237
|
+
headers={},
|
|
238
|
+
body=encode_body(body),
|
|
239
|
+
)
|
|
240
|
+
return self._transport.parse(models.CreateCustomerSessionResponse, data)
|
|
241
|
+
|
|
242
|
+
async def get_customer_session(
|
|
243
|
+
self,
|
|
244
|
+
*,
|
|
245
|
+
session_id: str,
|
|
246
|
+
) -> models.GetCustomerSessionResponse:
|
|
247
|
+
"""Get customer session by sessionId
|
|
248
|
+
|
|
249
|
+
GET /v1/sdk/customers/customer-sessions/{sessionId}"""
|
|
250
|
+
data = await self._transport.request(
|
|
251
|
+
"GET",
|
|
252
|
+
f"/v1/sdk/customers/customer-sessions/{path_segment(session_id)}",
|
|
253
|
+
query={},
|
|
254
|
+
headers={},
|
|
255
|
+
body=None,
|
|
256
|
+
)
|
|
257
|
+
return self._transport.parse(models.GetCustomerSessionResponse, data)
|
|
258
|
+
|
|
259
|
+
async def get_customer(
|
|
260
|
+
self,
|
|
261
|
+
*,
|
|
262
|
+
reference: str,
|
|
263
|
+
) -> models.CustomerResponse:
|
|
264
|
+
"""Get customer by reference
|
|
265
|
+
|
|
266
|
+
GET /v1/sdk/customers/{reference}"""
|
|
267
|
+
data = await self._transport.request(
|
|
268
|
+
"GET",
|
|
269
|
+
f"/v1/sdk/customers/{path_segment(reference)}",
|
|
270
|
+
query={},
|
|
271
|
+
headers={},
|
|
272
|
+
body=None,
|
|
273
|
+
)
|
|
274
|
+
return self._transport.parse(models.CustomerResponse, data)
|
|
275
|
+
|
|
276
|
+
async def update_customer(
|
|
277
|
+
self,
|
|
278
|
+
*,
|
|
279
|
+
reference: str,
|
|
280
|
+
body: models.UpdateCustomerRequest | dict[str, Any],
|
|
281
|
+
) -> models.CustomerResponse:
|
|
282
|
+
"""Update a customer
|
|
283
|
+
|
|
284
|
+
PATCH /v1/sdk/customers/{reference}"""
|
|
285
|
+
data = await self._transport.request(
|
|
286
|
+
"PATCH",
|
|
287
|
+
f"/v1/sdk/customers/{path_segment(reference)}",
|
|
288
|
+
query={},
|
|
289
|
+
headers={},
|
|
290
|
+
body=encode_body(body),
|
|
291
|
+
)
|
|
292
|
+
return self._transport.parse(models.CustomerResponse, data)
|
|
293
|
+
|
|
294
|
+
async def get_customer_balance(
|
|
295
|
+
self,
|
|
296
|
+
*,
|
|
297
|
+
reference: str,
|
|
298
|
+
) -> models.CustomerBalanceResponse:
|
|
299
|
+
"""Get customer credit balance
|
|
300
|
+
|
|
301
|
+
GET /v1/sdk/customers/{reference}/balance"""
|
|
302
|
+
data = await self._transport.request(
|
|
303
|
+
"GET",
|
|
304
|
+
f"/v1/sdk/customers/{path_segment(reference)}/balance",
|
|
305
|
+
query={},
|
|
306
|
+
headers={},
|
|
307
|
+
body=None,
|
|
308
|
+
)
|
|
309
|
+
return self._transport.parse(models.CustomerBalanceResponse, data)
|
|
310
|
+
|
|
311
|
+
async def grant_credits(
|
|
312
|
+
self,
|
|
313
|
+
*,
|
|
314
|
+
reference: str,
|
|
315
|
+
body: models.GrantCustomerCreditsRequest | dict[str, Any],
|
|
316
|
+
idempotency_key: str | None = None,
|
|
317
|
+
) -> models.GrantCustomerCreditsResponse:
|
|
318
|
+
"""Grant credits to a customer
|
|
319
|
+
|
|
320
|
+
POST /v1/sdk/customers/{reference}/credits"""
|
|
321
|
+
data = await self._transport.request(
|
|
322
|
+
"POST",
|
|
323
|
+
f"/v1/sdk/customers/{path_segment(reference)}/credits",
|
|
324
|
+
query={},
|
|
325
|
+
headers={"Idempotency-Key": idempotency_key},
|
|
326
|
+
body=encode_body(body),
|
|
327
|
+
)
|
|
328
|
+
return self._transport.parse(models.GrantCustomerCreditsResponse, data)
|
|
329
|
+
|
|
330
|
+
async def check_limits(
|
|
331
|
+
self,
|
|
332
|
+
*,
|
|
333
|
+
body: models.CheckLimitRequest | dict[str, Any],
|
|
334
|
+
) -> models.LimitResponse:
|
|
335
|
+
"""Check usage limits for a customer and product
|
|
336
|
+
|
|
337
|
+
POST /v1/sdk/limits"""
|
|
338
|
+
data = await self._transport.request(
|
|
339
|
+
"POST",
|
|
340
|
+
f"/v1/sdk/limits",
|
|
341
|
+
query={},
|
|
342
|
+
headers={},
|
|
343
|
+
body=encode_body(body),
|
|
344
|
+
)
|
|
345
|
+
return self._transport.parse(models.LimitResponse, data)
|
|
346
|
+
|
|
347
|
+
async def get_merchant(
|
|
348
|
+
self,
|
|
349
|
+
) -> models.SdkMerchantResponseDto:
|
|
350
|
+
"""Get merchant identity for the authenticated provider
|
|
351
|
+
|
|
352
|
+
GET /v1/sdk/merchant"""
|
|
353
|
+
data = await self._transport.request(
|
|
354
|
+
"GET",
|
|
355
|
+
f"/v1/sdk/merchant",
|
|
356
|
+
query={},
|
|
357
|
+
headers={},
|
|
358
|
+
body=None,
|
|
359
|
+
)
|
|
360
|
+
return self._transport.parse(models.SdkMerchantResponseDto, data)
|
|
361
|
+
|
|
362
|
+
async def record_meter_event(
|
|
363
|
+
self,
|
|
364
|
+
*,
|
|
365
|
+
body: models.RecordMeterEventZodDto | dict[str, Any],
|
|
366
|
+
) -> models.RecordMeterEventResponse:
|
|
367
|
+
"""Record a meter event
|
|
368
|
+
|
|
369
|
+
POST /v1/sdk/meter-events"""
|
|
370
|
+
data = await self._transport.request(
|
|
371
|
+
"POST",
|
|
372
|
+
f"/v1/sdk/meter-events",
|
|
373
|
+
query={},
|
|
374
|
+
headers={},
|
|
375
|
+
body=encode_body(body),
|
|
376
|
+
)
|
|
377
|
+
return self._transport.parse(models.RecordMeterEventResponse, data)
|
|
378
|
+
|
|
379
|
+
async def record_meter_events_bulk(
|
|
380
|
+
self,
|
|
381
|
+
*,
|
|
382
|
+
body: models.RecordBulkMeterEventsZodDto | dict[str, Any],
|
|
383
|
+
) -> models.RecordMeterEventsBulkResponse:
|
|
384
|
+
"""Record meter events in bulk
|
|
385
|
+
|
|
386
|
+
POST /v1/sdk/meter-events/bulk"""
|
|
387
|
+
data = await self._transport.request(
|
|
388
|
+
"POST",
|
|
389
|
+
f"/v1/sdk/meter-events/bulk",
|
|
390
|
+
query={},
|
|
391
|
+
headers={},
|
|
392
|
+
body=encode_body(body),
|
|
393
|
+
)
|
|
394
|
+
return self._transport.parse(models.RecordMeterEventsBulkResponse, data)
|
|
395
|
+
|
|
396
|
+
async def get_payment_intents(
|
|
397
|
+
self,
|
|
398
|
+
*,
|
|
399
|
+
limit: float | None = None,
|
|
400
|
+
offset: float | None = None,
|
|
401
|
+
) -> models.SdkPaymentIntentListResponse:
|
|
402
|
+
"""List payment intents for the provider
|
|
403
|
+
|
|
404
|
+
GET /v1/sdk/payment-intents"""
|
|
405
|
+
data = await self._transport.request(
|
|
406
|
+
"GET",
|
|
407
|
+
f"/v1/sdk/payment-intents",
|
|
408
|
+
query={"limit": limit, "offset": offset},
|
|
409
|
+
headers={},
|
|
410
|
+
body=None,
|
|
411
|
+
)
|
|
412
|
+
return self._transport.parse(models.SdkPaymentIntentListResponse, data)
|
|
413
|
+
|
|
414
|
+
async def create_payment_intent(
|
|
415
|
+
self,
|
|
416
|
+
*,
|
|
417
|
+
body: models.CreatePaymentIntentDto | dict[str, Any],
|
|
418
|
+
idempotency_key: str,
|
|
419
|
+
) -> models.SdkPaymentIntentResponse:
|
|
420
|
+
"""Create a payment intent
|
|
421
|
+
|
|
422
|
+
POST /v1/sdk/payment-intents"""
|
|
423
|
+
data = await self._transport.request(
|
|
424
|
+
"POST",
|
|
425
|
+
f"/v1/sdk/payment-intents",
|
|
426
|
+
query={},
|
|
427
|
+
headers={"idempotency-key": idempotency_key},
|
|
428
|
+
body=encode_body(body),
|
|
429
|
+
)
|
|
430
|
+
return self._transport.parse(models.SdkPaymentIntentResponse, data)
|
|
431
|
+
|
|
432
|
+
async def attach_business_details(
|
|
433
|
+
self,
|
|
434
|
+
*,
|
|
435
|
+
processor_payment_id: str,
|
|
436
|
+
body: models.BusinessDetailsDto | dict[str, Any],
|
|
437
|
+
) -> models.AttachBusinessDetailsResponse:
|
|
438
|
+
"""Attach business tax details to a payment intent
|
|
439
|
+
|
|
440
|
+
POST /v1/sdk/payment-intents/{processorPaymentId}/business-details"""
|
|
441
|
+
data = await self._transport.request(
|
|
442
|
+
"POST",
|
|
443
|
+
f"/v1/sdk/payment-intents/{path_segment(processor_payment_id)}/business-details",
|
|
444
|
+
query={},
|
|
445
|
+
headers={},
|
|
446
|
+
body=encode_body(body),
|
|
447
|
+
)
|
|
448
|
+
return self._transport.parse(models.AttachBusinessDetailsResponse, data)
|
|
449
|
+
|
|
450
|
+
async def process_payment_intent(
|
|
451
|
+
self,
|
|
452
|
+
*,
|
|
453
|
+
processor_payment_id: str,
|
|
454
|
+
body: models.ProcessPaymentIntentDto | dict[str, Any],
|
|
455
|
+
) -> models.ProcessPaymentIntentResponse:
|
|
456
|
+
"""Process payment intent after client-side confirmation
|
|
457
|
+
|
|
458
|
+
POST /v1/sdk/payment-intents/{processorPaymentId}/process"""
|
|
459
|
+
data = await self._transport.request(
|
|
460
|
+
"POST",
|
|
461
|
+
f"/v1/sdk/payment-intents/{path_segment(processor_payment_id)}/process",
|
|
462
|
+
query={},
|
|
463
|
+
headers={},
|
|
464
|
+
body=encode_body(body),
|
|
465
|
+
)
|
|
466
|
+
return self._transport.parse(models.ProcessPaymentIntentResponse, data)
|
|
467
|
+
|
|
468
|
+
async def get_payment_intent(
|
|
469
|
+
self,
|
|
470
|
+
*,
|
|
471
|
+
reference: str,
|
|
472
|
+
) -> models.SdkPaymentIntentResponse:
|
|
473
|
+
"""Get a specific payment intent
|
|
474
|
+
|
|
475
|
+
GET /v1/sdk/payment-intents/{reference}"""
|
|
476
|
+
data = await self._transport.request(
|
|
477
|
+
"GET",
|
|
478
|
+
f"/v1/sdk/payment-intents/{path_segment(reference)}",
|
|
479
|
+
query={},
|
|
480
|
+
headers={},
|
|
481
|
+
body=None,
|
|
482
|
+
)
|
|
483
|
+
return self._transport.parse(models.SdkPaymentIntentResponse, data)
|
|
484
|
+
|
|
485
|
+
async def get_payment_method(
|
|
486
|
+
self,
|
|
487
|
+
*,
|
|
488
|
+
customer_ref: str,
|
|
489
|
+
) -> models.GetPaymentMethodResponse:
|
|
490
|
+
"""Get the default payment method for a customer
|
|
491
|
+
|
|
492
|
+
GET /v1/sdk/payment-method"""
|
|
493
|
+
data = await self._transport.request(
|
|
494
|
+
"GET",
|
|
495
|
+
f"/v1/sdk/payment-method",
|
|
496
|
+
query={"customerRef": customer_ref},
|
|
497
|
+
headers={},
|
|
498
|
+
body=None,
|
|
499
|
+
)
|
|
500
|
+
return self._transport.parse(models.GetPaymentMethodResponse, data)
|
|
501
|
+
|
|
502
|
+
async def get_platform_config(
|
|
503
|
+
self,
|
|
504
|
+
) -> models.SdkPlatformConfigResponseDto:
|
|
505
|
+
"""Get environment-aware platform config for the authenticated provider
|
|
506
|
+
|
|
507
|
+
GET /v1/sdk/platform-config"""
|
|
508
|
+
data = await self._transport.request(
|
|
509
|
+
"GET",
|
|
510
|
+
f"/v1/sdk/platform-config",
|
|
511
|
+
query={},
|
|
512
|
+
headers={},
|
|
513
|
+
body=None,
|
|
514
|
+
)
|
|
515
|
+
return self._transport.parse(models.SdkPlatformConfigResponseDto, data)
|
|
516
|
+
|
|
517
|
+
async def list_products(
|
|
518
|
+
self,
|
|
519
|
+
*,
|
|
520
|
+
limit: float | None = None,
|
|
521
|
+
offset: float | None = None,
|
|
522
|
+
search: str | None = None,
|
|
523
|
+
status: str | None = None,
|
|
524
|
+
is_managed_mcp: bool | None = None,
|
|
525
|
+
is_mcp_pay: bool | None = None,
|
|
526
|
+
) -> models.ListProductsResponse:
|
|
527
|
+
"""List products
|
|
528
|
+
|
|
529
|
+
GET /v1/sdk/products"""
|
|
530
|
+
data = await self._transport.request(
|
|
531
|
+
"GET",
|
|
532
|
+
f"/v1/sdk/products",
|
|
533
|
+
query={
|
|
534
|
+
"limit": limit,
|
|
535
|
+
"offset": offset,
|
|
536
|
+
"search": search,
|
|
537
|
+
"status": status,
|
|
538
|
+
"isManagedMcp": is_managed_mcp,
|
|
539
|
+
"isMcpPay": is_mcp_pay,
|
|
540
|
+
},
|
|
541
|
+
headers={},
|
|
542
|
+
body=None,
|
|
543
|
+
)
|
|
544
|
+
return self._transport.parse(models.ListProductsResponse, data)
|
|
545
|
+
|
|
546
|
+
async def create_product(
|
|
547
|
+
self,
|
|
548
|
+
*,
|
|
549
|
+
body: models.CreateProductRequest | dict[str, Any],
|
|
550
|
+
) -> models.SdkProductResponse:
|
|
551
|
+
"""Create a product
|
|
552
|
+
|
|
553
|
+
POST /v1/sdk/products"""
|
|
554
|
+
data = await self._transport.request(
|
|
555
|
+
"POST",
|
|
556
|
+
f"/v1/sdk/products",
|
|
557
|
+
query={},
|
|
558
|
+
headers={},
|
|
559
|
+
body=encode_body(body),
|
|
560
|
+
)
|
|
561
|
+
return self._transport.parse(models.SdkProductResponse, data)
|
|
562
|
+
|
|
563
|
+
async def bootstrap_mcp_product(
|
|
564
|
+
self,
|
|
565
|
+
*,
|
|
566
|
+
body: models.McpBootstrapDto | dict[str, Any],
|
|
567
|
+
) -> models.McpBootstrapResult:
|
|
568
|
+
"""Bootstrap MCP product integration
|
|
569
|
+
|
|
570
|
+
POST /v1/sdk/products/mcp/bootstrap"""
|
|
571
|
+
data = await self._transport.request(
|
|
572
|
+
"POST",
|
|
573
|
+
f"/v1/sdk/products/mcp/bootstrap",
|
|
574
|
+
query={},
|
|
575
|
+
headers={},
|
|
576
|
+
body=encode_body(body),
|
|
577
|
+
)
|
|
578
|
+
return self._transport.parse(models.McpBootstrapResult, data)
|
|
579
|
+
|
|
580
|
+
async def delete_product(
|
|
581
|
+
self,
|
|
582
|
+
*,
|
|
583
|
+
product_ref: str,
|
|
584
|
+
) -> models.DeleteProductResponse:
|
|
585
|
+
"""Delete a product
|
|
586
|
+
|
|
587
|
+
DELETE /v1/sdk/products/{productRef}"""
|
|
588
|
+
data = await self._transport.request(
|
|
589
|
+
"DELETE",
|
|
590
|
+
f"/v1/sdk/products/{path_segment(product_ref)}",
|
|
591
|
+
query={},
|
|
592
|
+
headers={},
|
|
593
|
+
body=None,
|
|
594
|
+
)
|
|
595
|
+
return self._transport.parse(models.DeleteProductResponse, data)
|
|
596
|
+
|
|
597
|
+
async def get_product(
|
|
598
|
+
self,
|
|
599
|
+
*,
|
|
600
|
+
product_ref: str,
|
|
601
|
+
) -> models.SdkProductResponse:
|
|
602
|
+
"""Get a product by reference
|
|
603
|
+
|
|
604
|
+
GET /v1/sdk/products/{productRef}"""
|
|
605
|
+
data = await self._transport.request(
|
|
606
|
+
"GET",
|
|
607
|
+
f"/v1/sdk/products/{path_segment(product_ref)}",
|
|
608
|
+
query={},
|
|
609
|
+
headers={},
|
|
610
|
+
body=None,
|
|
611
|
+
)
|
|
612
|
+
return self._transport.parse(models.SdkProductResponse, data)
|
|
613
|
+
|
|
614
|
+
async def update_product(
|
|
615
|
+
self,
|
|
616
|
+
*,
|
|
617
|
+
product_ref: str,
|
|
618
|
+
body: models.UpdateProductRequest | dict[str, Any],
|
|
619
|
+
) -> models.SdkProductResponse:
|
|
620
|
+
"""Update a product
|
|
621
|
+
|
|
622
|
+
PUT /v1/sdk/products/{productRef}"""
|
|
623
|
+
data = await self._transport.request(
|
|
624
|
+
"PUT",
|
|
625
|
+
f"/v1/sdk/products/{path_segment(product_ref)}",
|
|
626
|
+
query={},
|
|
627
|
+
headers={},
|
|
628
|
+
body=encode_body(body),
|
|
629
|
+
)
|
|
630
|
+
return self._transport.parse(models.SdkProductResponse, data)
|
|
631
|
+
|
|
632
|
+
async def clone_product(
|
|
633
|
+
self,
|
|
634
|
+
*,
|
|
635
|
+
product_ref: str,
|
|
636
|
+
body: models.CloneProductDto | dict[str, Any],
|
|
637
|
+
) -> models.SdkProductResponse:
|
|
638
|
+
"""Clone a product
|
|
639
|
+
|
|
640
|
+
POST /v1/sdk/products/{productRef}/clone"""
|
|
641
|
+
data = await self._transport.request(
|
|
642
|
+
"POST",
|
|
643
|
+
f"/v1/sdk/products/{path_segment(product_ref)}/clone",
|
|
644
|
+
query={},
|
|
645
|
+
headers={},
|
|
646
|
+
body=encode_body(body),
|
|
647
|
+
)
|
|
648
|
+
return self._transport.parse(models.SdkProductResponse, data)
|
|
649
|
+
|
|
650
|
+
async def configure_mcp_plans(
|
|
651
|
+
self,
|
|
652
|
+
*,
|
|
653
|
+
product_ref: str,
|
|
654
|
+
body: models.ConfigureMcpPlansDto | dict[str, Any],
|
|
655
|
+
) -> models.ConfigureMcpPlansResult:
|
|
656
|
+
"""Configure MCP plans on an MCP product
|
|
657
|
+
|
|
658
|
+
PUT /v1/sdk/products/{productRef}/mcp/plans"""
|
|
659
|
+
data = await self._transport.request(
|
|
660
|
+
"PUT",
|
|
661
|
+
f"/v1/sdk/products/{path_segment(product_ref)}/mcp/plans",
|
|
662
|
+
query={},
|
|
663
|
+
headers={},
|
|
664
|
+
body=encode_body(body),
|
|
665
|
+
)
|
|
666
|
+
return self._transport.parse(models.ConfigureMcpPlansResult, data)
|
|
667
|
+
|
|
668
|
+
async def list_plans(
|
|
669
|
+
self,
|
|
670
|
+
*,
|
|
671
|
+
product_ref: str,
|
|
672
|
+
limit: float | None = None,
|
|
673
|
+
offset: float | None = None,
|
|
674
|
+
) -> models.ListPlansResponse:
|
|
675
|
+
"""List plans for a product
|
|
676
|
+
|
|
677
|
+
GET /v1/sdk/products/{productRef}/plans"""
|
|
678
|
+
data = await self._transport.request(
|
|
679
|
+
"GET",
|
|
680
|
+
f"/v1/sdk/products/{path_segment(product_ref)}/plans",
|
|
681
|
+
query={"limit": limit, "offset": offset},
|
|
682
|
+
headers={},
|
|
683
|
+
body=None,
|
|
684
|
+
)
|
|
685
|
+
return self._transport.parse(models.ListPlansResponse, data)
|
|
686
|
+
|
|
687
|
+
async def create_plan(
|
|
688
|
+
self,
|
|
689
|
+
*,
|
|
690
|
+
product_ref: str,
|
|
691
|
+
body: models.CreatePlanRequest | dict[str, Any],
|
|
692
|
+
) -> models.Plan:
|
|
693
|
+
"""Create a plan for a product
|
|
694
|
+
|
|
695
|
+
POST /v1/sdk/products/{productRef}/plans"""
|
|
696
|
+
data = await self._transport.request(
|
|
697
|
+
"POST",
|
|
698
|
+
f"/v1/sdk/products/{path_segment(product_ref)}/plans",
|
|
699
|
+
query={},
|
|
700
|
+
headers={},
|
|
701
|
+
body=encode_body(body),
|
|
702
|
+
)
|
|
703
|
+
return self._transport.parse(models.Plan, data)
|
|
704
|
+
|
|
705
|
+
async def delete_plan(
|
|
706
|
+
self,
|
|
707
|
+
*,
|
|
708
|
+
product_ref: str,
|
|
709
|
+
plan_ref: str,
|
|
710
|
+
) -> models.DeletePlanResponse:
|
|
711
|
+
"""Delete a plan from a product
|
|
712
|
+
|
|
713
|
+
DELETE /v1/sdk/products/{productRef}/plans/{planRef}"""
|
|
714
|
+
data = await self._transport.request(
|
|
715
|
+
"DELETE",
|
|
716
|
+
f"/v1/sdk/products/{path_segment(product_ref)}/plans/{path_segment(plan_ref)}",
|
|
717
|
+
query={},
|
|
718
|
+
headers={},
|
|
719
|
+
body=None,
|
|
720
|
+
)
|
|
721
|
+
return self._transport.parse(models.DeletePlanResponse, data)
|
|
722
|
+
|
|
723
|
+
async def get_plan(
|
|
724
|
+
self,
|
|
725
|
+
*,
|
|
726
|
+
product_ref: str,
|
|
727
|
+
plan_ref: str,
|
|
728
|
+
) -> models.Plan:
|
|
729
|
+
"""Get a plan for a product
|
|
730
|
+
|
|
731
|
+
GET /v1/sdk/products/{productRef}/plans/{planRef}"""
|
|
732
|
+
data = await self._transport.request(
|
|
733
|
+
"GET",
|
|
734
|
+
f"/v1/sdk/products/{path_segment(product_ref)}/plans/{path_segment(plan_ref)}",
|
|
735
|
+
query={},
|
|
736
|
+
headers={},
|
|
737
|
+
body=None,
|
|
738
|
+
)
|
|
739
|
+
return self._transport.parse(models.Plan, data)
|
|
740
|
+
|
|
741
|
+
async def update_plan(
|
|
742
|
+
self,
|
|
743
|
+
*,
|
|
744
|
+
product_ref: str,
|
|
745
|
+
plan_ref: str,
|
|
746
|
+
body: models.UpdatePlanRequest | dict[str, Any],
|
|
747
|
+
) -> models.Plan:
|
|
748
|
+
"""Update a plan for a product
|
|
749
|
+
|
|
750
|
+
PUT /v1/sdk/products/{productRef}/plans/{planRef}"""
|
|
751
|
+
data = await self._transport.request(
|
|
752
|
+
"PUT",
|
|
753
|
+
f"/v1/sdk/products/{path_segment(product_ref)}/plans/{path_segment(plan_ref)}",
|
|
754
|
+
query={},
|
|
755
|
+
headers={},
|
|
756
|
+
body=encode_body(body),
|
|
757
|
+
)
|
|
758
|
+
return self._transport.parse(models.Plan, data)
|
|
759
|
+
|
|
760
|
+
async def list_purchases(
|
|
761
|
+
self,
|
|
762
|
+
*,
|
|
763
|
+
status: str | None = None,
|
|
764
|
+
product_ref: str | None = None,
|
|
765
|
+
customer_ref: str | None = None,
|
|
766
|
+
include_free: bool | None = None,
|
|
767
|
+
) -> models.ListPurchasesResponse:
|
|
768
|
+
"""List purchases for provider
|
|
769
|
+
|
|
770
|
+
GET /v1/sdk/purchases"""
|
|
771
|
+
data = await self._transport.request(
|
|
772
|
+
"GET",
|
|
773
|
+
f"/v1/sdk/purchases",
|
|
774
|
+
query={
|
|
775
|
+
"status": status,
|
|
776
|
+
"productRef": product_ref,
|
|
777
|
+
"customerRef": customer_ref,
|
|
778
|
+
"includeFree": include_free,
|
|
779
|
+
},
|
|
780
|
+
headers={},
|
|
781
|
+
body=None,
|
|
782
|
+
)
|
|
783
|
+
return self._transport.parse(models.ListPurchasesResponse, data)
|
|
784
|
+
|
|
785
|
+
async def get_purchases_for_customer(
|
|
786
|
+
self,
|
|
787
|
+
*,
|
|
788
|
+
customer_ref: str,
|
|
789
|
+
include_free: bool | None = None,
|
|
790
|
+
) -> models.GetPurchasesForCustomerResponse:
|
|
791
|
+
"""Get purchases for a customer
|
|
792
|
+
|
|
793
|
+
GET /v1/sdk/purchases/customer/{customerRef}"""
|
|
794
|
+
data = await self._transport.request(
|
|
795
|
+
"GET",
|
|
796
|
+
f"/v1/sdk/purchases/customer/{path_segment(customer_ref)}",
|
|
797
|
+
query={"includeFree": include_free},
|
|
798
|
+
headers={},
|
|
799
|
+
body=None,
|
|
800
|
+
)
|
|
801
|
+
return self._transport.parse(models.GetPurchasesForCustomerResponse, data)
|
|
802
|
+
|
|
803
|
+
async def get_purchases_for_product(
|
|
804
|
+
self,
|
|
805
|
+
*,
|
|
806
|
+
product_ref: str,
|
|
807
|
+
) -> models.GetPurchasesForProductResponse:
|
|
808
|
+
"""Get purchases for a product
|
|
809
|
+
|
|
810
|
+
GET /v1/sdk/purchases/product/{productRef}"""
|
|
811
|
+
data = await self._transport.request(
|
|
812
|
+
"GET",
|
|
813
|
+
f"/v1/sdk/purchases/product/{path_segment(product_ref)}",
|
|
814
|
+
query={},
|
|
815
|
+
headers={},
|
|
816
|
+
body=None,
|
|
817
|
+
)
|
|
818
|
+
return self._transport.parse(models.GetPurchasesForProductResponse, data)
|
|
819
|
+
|
|
820
|
+
async def get_purchase(
|
|
821
|
+
self,
|
|
822
|
+
*,
|
|
823
|
+
purchase_ref: str,
|
|
824
|
+
) -> models.SdkPurchaseResponse:
|
|
825
|
+
"""Get a purchase by reference
|
|
826
|
+
|
|
827
|
+
GET /v1/sdk/purchases/{purchaseRef}"""
|
|
828
|
+
data = await self._transport.request(
|
|
829
|
+
"GET",
|
|
830
|
+
f"/v1/sdk/purchases/{path_segment(purchase_ref)}",
|
|
831
|
+
query={},
|
|
832
|
+
headers={},
|
|
833
|
+
body=None,
|
|
834
|
+
)
|
|
835
|
+
return self._transport.parse(models.SdkPurchaseResponse, data)
|
|
836
|
+
|
|
837
|
+
async def cancel_purchase(
|
|
838
|
+
self,
|
|
839
|
+
*,
|
|
840
|
+
purchase_ref: str,
|
|
841
|
+
body: models.CancelPurchaseRequest | dict[str, Any],
|
|
842
|
+
) -> models.CancelPurchaseResponse:
|
|
843
|
+
"""Cancel a purchase
|
|
844
|
+
|
|
845
|
+
POST /v1/sdk/purchases/{purchaseRef}/cancel"""
|
|
846
|
+
data = await self._transport.request(
|
|
847
|
+
"POST",
|
|
848
|
+
f"/v1/sdk/purchases/{path_segment(purchase_ref)}/cancel",
|
|
849
|
+
query={},
|
|
850
|
+
headers={},
|
|
851
|
+
body=encode_body(body),
|
|
852
|
+
)
|
|
853
|
+
return self._transport.parse(models.CancelPurchaseResponse, data)
|
|
854
|
+
|
|
855
|
+
async def reactivate_purchase(
|
|
856
|
+
self,
|
|
857
|
+
*,
|
|
858
|
+
purchase_ref: str,
|
|
859
|
+
) -> models.ReactivatePurchaseResponse:
|
|
860
|
+
"""Reactivate a cancelled purchase
|
|
861
|
+
|
|
862
|
+
POST /v1/sdk/purchases/{purchaseRef}/reactivate"""
|
|
863
|
+
data = await self._transport.request(
|
|
864
|
+
"POST",
|
|
865
|
+
f"/v1/sdk/purchases/{path_segment(purchase_ref)}/reactivate",
|
|
866
|
+
query={},
|
|
867
|
+
headers={},
|
|
868
|
+
body=None,
|
|
869
|
+
)
|
|
870
|
+
return self._transport.parse(models.ReactivatePurchaseResponse, data)
|
|
871
|
+
|
|
872
|
+
async def record_usage(
|
|
873
|
+
self,
|
|
874
|
+
*,
|
|
875
|
+
body: models.CreateUsageRequest | dict[str, Any],
|
|
876
|
+
) -> models.UsageRecordResponse:
|
|
877
|
+
"""Record a usage event
|
|
878
|
+
|
|
879
|
+
POST /v1/sdk/usages"""
|
|
880
|
+
data = await self._transport.request(
|
|
881
|
+
"POST",
|
|
882
|
+
f"/v1/sdk/usages",
|
|
883
|
+
query={},
|
|
884
|
+
headers={},
|
|
885
|
+
body=encode_body(body),
|
|
886
|
+
)
|
|
887
|
+
return self._transport.parse(models.UsageRecordResponse, data)
|
|
888
|
+
|
|
889
|
+
async def record_usage_bulk(
|
|
890
|
+
self,
|
|
891
|
+
*,
|
|
892
|
+
body: models.BulkCreateUsageRequest | dict[str, Any],
|
|
893
|
+
) -> models.BulkUsageResponse:
|
|
894
|
+
"""Record bulk usage events
|
|
895
|
+
|
|
896
|
+
POST /v1/sdk/usages/bulk"""
|
|
897
|
+
data = await self._transport.request(
|
|
898
|
+
"POST",
|
|
899
|
+
f"/v1/sdk/usages/bulk",
|
|
900
|
+
query={},
|
|
901
|
+
headers={},
|
|
902
|
+
body=encode_body(body),
|
|
903
|
+
)
|
|
904
|
+
return self._transport.parse(models.BulkUsageResponse, data)
|
|
905
|
+
|
|
906
|
+
async def get_user_info(
|
|
907
|
+
self,
|
|
908
|
+
*,
|
|
909
|
+
body: models.UserInfoRequest | dict[str, Any],
|
|
910
|
+
) -> models.UserInfoResponse:
|
|
911
|
+
"""Get user info and purchase status
|
|
912
|
+
|
|
913
|
+
POST /v1/sdk/user-info"""
|
|
914
|
+
data = await self._transport.request(
|
|
915
|
+
"POST",
|
|
916
|
+
f"/v1/sdk/user-info",
|
|
917
|
+
query={},
|
|
918
|
+
headers={},
|
|
919
|
+
body=encode_body(body),
|
|
920
|
+
)
|
|
921
|
+
return self._transport.parse(models.UserInfoResponse, data)
|
|
922
|
+
|
|
923
|
+
async def get_webhook_event_schema(
|
|
924
|
+
self,
|
|
925
|
+
) -> models.WebhookEventDto:
|
|
926
|
+
"""Get the webhook event envelope schema
|
|
927
|
+
|
|
928
|
+
GET /v1/sdk/webhooks/event-schema"""
|
|
929
|
+
data = await self._transport.request(
|
|
930
|
+
"GET",
|
|
931
|
+
f"/v1/sdk/webhooks/event-schema",
|
|
932
|
+
query={},
|
|
933
|
+
headers={},
|
|
934
|
+
body=None,
|
|
935
|
+
)
|
|
936
|
+
return self._transport.parse(models.WebhookEventDto, data)
|
|
937
|
+
|
|
938
|
+
async def list_webhook_event_types(
|
|
939
|
+
self,
|
|
940
|
+
) -> models.ListWebhookEventTypesResponse:
|
|
941
|
+
"""List webhook event types
|
|
942
|
+
|
|
943
|
+
GET /v1/sdk/webhooks/event-types"""
|
|
944
|
+
data = await self._transport.request(
|
|
945
|
+
"GET",
|
|
946
|
+
f"/v1/sdk/webhooks/event-types",
|
|
947
|
+
query={},
|
|
948
|
+
headers={},
|
|
949
|
+
body=None,
|
|
950
|
+
)
|
|
951
|
+
return self._transport.parse(models.ListWebhookEventTypesResponse, data)
|
|
952
|
+
|
|
953
|
+
|
|
954
|
+
class SolvaPayApi:
|
|
955
|
+
"""Every SolvaPay API operation, blocking: one method per operation."""
|
|
956
|
+
|
|
957
|
+
def __init__(self, transport: SyncTransport) -> None:
|
|
958
|
+
self._transport = transport
|
|
959
|
+
|
|
960
|
+
def activate_plan(
|
|
961
|
+
self,
|
|
962
|
+
*,
|
|
963
|
+
body: models.ActivatePlanDto | dict[str, Any],
|
|
964
|
+
) -> models.ActivatePlanResponseDto:
|
|
965
|
+
"""Activate a plan for a customer
|
|
966
|
+
|
|
967
|
+
POST /v1/sdk/activate"""
|
|
968
|
+
data = self._transport.request(
|
|
969
|
+
"POST",
|
|
970
|
+
f"/v1/sdk/activate",
|
|
971
|
+
query={},
|
|
972
|
+
headers={},
|
|
973
|
+
body=encode_body(body),
|
|
974
|
+
)
|
|
975
|
+
return self._transport.parse(models.ActivatePlanResponseDto, data)
|
|
976
|
+
|
|
977
|
+
def authorize_agent_call(
|
|
978
|
+
self,
|
|
979
|
+
*,
|
|
980
|
+
body: models.AuthorizeCallDto | dict[str, Any],
|
|
981
|
+
) -> models.AuthorizeCallResponseDto:
|
|
982
|
+
"""Authorize a paid agent call: the customer, the agent's spend policy and the estimate held against budget and balance
|
|
983
|
+
|
|
984
|
+
POST /v1/sdk/agent/calls"""
|
|
985
|
+
data = self._transport.request(
|
|
986
|
+
"POST",
|
|
987
|
+
f"/v1/sdk/agent/calls",
|
|
988
|
+
query={},
|
|
989
|
+
headers={},
|
|
990
|
+
body=encode_body(body),
|
|
991
|
+
)
|
|
992
|
+
return self._transport.parse(models.AuthorizeCallResponseDto, data)
|
|
993
|
+
|
|
994
|
+
def complete_agent_call(
|
|
995
|
+
self,
|
|
996
|
+
*,
|
|
997
|
+
call_ref: str,
|
|
998
|
+
body: models.CompleteCallDto | dict[str, Any],
|
|
999
|
+
) -> models.CompleteCallResponseDto:
|
|
1000
|
+
"""Complete an allowed agent call: settle the spend policy and debit the call's customer at the reported cost
|
|
1001
|
+
|
|
1002
|
+
POST /v1/sdk/agent/calls/{callRef}/complete"""
|
|
1003
|
+
data = self._transport.request(
|
|
1004
|
+
"POST",
|
|
1005
|
+
f"/v1/sdk/agent/calls/{path_segment(call_ref)}/complete",
|
|
1006
|
+
query={},
|
|
1007
|
+
headers={},
|
|
1008
|
+
body=encode_body(body),
|
|
1009
|
+
)
|
|
1010
|
+
return self._transport.parse(models.CompleteCallResponseDto, data)
|
|
1011
|
+
|
|
1012
|
+
def verify_agent_key(
|
|
1013
|
+
self,
|
|
1014
|
+
*,
|
|
1015
|
+
body: models.VerifyAgentKeyDto | dict[str, Any],
|
|
1016
|
+
) -> models.VerifiedAgentKeyResponseDto:
|
|
1017
|
+
"""Read the agent behind an agent key issued for this merchant
|
|
1018
|
+
|
|
1019
|
+
POST /v1/sdk/agent/keys/verifications"""
|
|
1020
|
+
data = self._transport.request(
|
|
1021
|
+
"POST",
|
|
1022
|
+
f"/v1/sdk/agent/keys/verifications",
|
|
1023
|
+
query={},
|
|
1024
|
+
headers={},
|
|
1025
|
+
body=encode_body(body),
|
|
1026
|
+
)
|
|
1027
|
+
return self._transport.parse(models.VerifiedAgentKeyResponseDto, data)
|
|
1028
|
+
|
|
1029
|
+
def report_agent_usage(
|
|
1030
|
+
self,
|
|
1031
|
+
*,
|
|
1032
|
+
body: models.UsageReportDto | dict[str, Any],
|
|
1033
|
+
) -> models.UsageReportResponseDto:
|
|
1034
|
+
"""Report the merchant's own cost of each decided agent call; SolvaPay corrects the spend policy and the credits to it
|
|
1035
|
+
|
|
1036
|
+
POST /v1/sdk/agent/usage-reports"""
|
|
1037
|
+
data = self._transport.request(
|
|
1038
|
+
"POST",
|
|
1039
|
+
f"/v1/sdk/agent/usage-reports",
|
|
1040
|
+
query={},
|
|
1041
|
+
headers={},
|
|
1042
|
+
body=encode_body(body),
|
|
1043
|
+
)
|
|
1044
|
+
return self._transport.parse(models.UsageReportResponseDto, data)
|
|
1045
|
+
|
|
1046
|
+
def disable_auto_recharge(
|
|
1047
|
+
self,
|
|
1048
|
+
*,
|
|
1049
|
+
customer_ref: str,
|
|
1050
|
+
) -> models.DisableAutoRechargeResponse:
|
|
1051
|
+
"""Disable auto-recharge for a customer
|
|
1052
|
+
|
|
1053
|
+
DELETE /v1/sdk/auto-recharge"""
|
|
1054
|
+
data = self._transport.request(
|
|
1055
|
+
"DELETE",
|
|
1056
|
+
f"/v1/sdk/auto-recharge",
|
|
1057
|
+
query={"customerRef": customer_ref},
|
|
1058
|
+
headers={},
|
|
1059
|
+
body=None,
|
|
1060
|
+
)
|
|
1061
|
+
return self._transport.parse(models.DisableAutoRechargeResponse, data)
|
|
1062
|
+
|
|
1063
|
+
def get_auto_recharge(
|
|
1064
|
+
self,
|
|
1065
|
+
*,
|
|
1066
|
+
customer_ref: str,
|
|
1067
|
+
) -> models.AutoRechargeGetResponse:
|
|
1068
|
+
"""Get auto-recharge config for a customer
|
|
1069
|
+
|
|
1070
|
+
GET /v1/sdk/auto-recharge"""
|
|
1071
|
+
data = self._transport.request(
|
|
1072
|
+
"GET",
|
|
1073
|
+
f"/v1/sdk/auto-recharge",
|
|
1074
|
+
query={"customerRef": customer_ref},
|
|
1075
|
+
headers={},
|
|
1076
|
+
body=None,
|
|
1077
|
+
)
|
|
1078
|
+
return self._transport.parse(models.AutoRechargeGetResponse, data)
|
|
1079
|
+
|
|
1080
|
+
def save_auto_recharge(
|
|
1081
|
+
self,
|
|
1082
|
+
*,
|
|
1083
|
+
body: models.PutAutoRechargeSdkDto | dict[str, Any],
|
|
1084
|
+
) -> models.SaveAutoRechargeResponse:
|
|
1085
|
+
"""Set or update auto-recharge config for a customer
|
|
1086
|
+
|
|
1087
|
+
PUT /v1/sdk/auto-recharge"""
|
|
1088
|
+
data = self._transport.request(
|
|
1089
|
+
"PUT",
|
|
1090
|
+
f"/v1/sdk/auto-recharge",
|
|
1091
|
+
query={},
|
|
1092
|
+
headers={},
|
|
1093
|
+
body=encode_body(body),
|
|
1094
|
+
)
|
|
1095
|
+
return self._transport.parse(models.SaveAutoRechargeResponse, data)
|
|
1096
|
+
|
|
1097
|
+
def create_checkout_session(
|
|
1098
|
+
self,
|
|
1099
|
+
*,
|
|
1100
|
+
body: models.CreateCheckoutSessionRequest | dict[str, Any],
|
|
1101
|
+
) -> models.CreateCheckoutSessionResponse:
|
|
1102
|
+
"""Create a checkout session
|
|
1103
|
+
|
|
1104
|
+
POST /v1/sdk/checkout-sessions"""
|
|
1105
|
+
data = self._transport.request(
|
|
1106
|
+
"POST",
|
|
1107
|
+
f"/v1/sdk/checkout-sessions",
|
|
1108
|
+
query={},
|
|
1109
|
+
headers={},
|
|
1110
|
+
body=encode_body(body),
|
|
1111
|
+
)
|
|
1112
|
+
return self._transport.parse(models.CreateCheckoutSessionResponse, data)
|
|
1113
|
+
|
|
1114
|
+
def get_credit_activity(
|
|
1115
|
+
self,
|
|
1116
|
+
*,
|
|
1117
|
+
customer_ref: str,
|
|
1118
|
+
limit: float | None = None,
|
|
1119
|
+
) -> models.CreditActivityResponseDto:
|
|
1120
|
+
"""List account-wide credit activity for a customer
|
|
1121
|
+
|
|
1122
|
+
GET /v1/sdk/credits/activity"""
|
|
1123
|
+
data = self._transport.request(
|
|
1124
|
+
"GET",
|
|
1125
|
+
f"/v1/sdk/credits/activity",
|
|
1126
|
+
query={"customerRef": customer_ref, "limit": limit},
|
|
1127
|
+
headers={},
|
|
1128
|
+
body=None,
|
|
1129
|
+
)
|
|
1130
|
+
return self._transport.parse(models.CreditActivityResponseDto, data)
|
|
1131
|
+
|
|
1132
|
+
def get_customer_by_query(
|
|
1133
|
+
self,
|
|
1134
|
+
*,
|
|
1135
|
+
reference: str | None = None,
|
|
1136
|
+
external_ref: str | None = None,
|
|
1137
|
+
email: str | None = None,
|
|
1138
|
+
) -> models.CustomerResponse:
|
|
1139
|
+
"""Get customer by reference, externalRef, or email
|
|
1140
|
+
|
|
1141
|
+
GET /v1/sdk/customers"""
|
|
1142
|
+
data = self._transport.request(
|
|
1143
|
+
"GET",
|
|
1144
|
+
f"/v1/sdk/customers",
|
|
1145
|
+
query={"reference": reference, "externalRef": external_ref, "email": email},
|
|
1146
|
+
headers={},
|
|
1147
|
+
body=None,
|
|
1148
|
+
)
|
|
1149
|
+
return self._transport.parse(models.CustomerResponse, data)
|
|
1150
|
+
|
|
1151
|
+
def create_customer(
|
|
1152
|
+
self,
|
|
1153
|
+
*,
|
|
1154
|
+
body: models.CreateCustomerRequest | dict[str, Any],
|
|
1155
|
+
) -> models.CustomerResponse:
|
|
1156
|
+
"""Create a new customer
|
|
1157
|
+
|
|
1158
|
+
POST /v1/sdk/customers"""
|
|
1159
|
+
data = self._transport.request(
|
|
1160
|
+
"POST",
|
|
1161
|
+
f"/v1/sdk/customers",
|
|
1162
|
+
query={},
|
|
1163
|
+
headers={},
|
|
1164
|
+
body=encode_body(body),
|
|
1165
|
+
)
|
|
1166
|
+
return self._transport.parse(models.CustomerResponse, data)
|
|
1167
|
+
|
|
1168
|
+
def create_customer_session(
|
|
1169
|
+
self,
|
|
1170
|
+
*,
|
|
1171
|
+
body: models.CreateCustomerSessionRequest | dict[str, Any],
|
|
1172
|
+
) -> models.CreateCustomerSessionResponse:
|
|
1173
|
+
"""Create a customer session
|
|
1174
|
+
|
|
1175
|
+
POST /v1/sdk/customers/customer-sessions"""
|
|
1176
|
+
data = self._transport.request(
|
|
1177
|
+
"POST",
|
|
1178
|
+
f"/v1/sdk/customers/customer-sessions",
|
|
1179
|
+
query={},
|
|
1180
|
+
headers={},
|
|
1181
|
+
body=encode_body(body),
|
|
1182
|
+
)
|
|
1183
|
+
return self._transport.parse(models.CreateCustomerSessionResponse, data)
|
|
1184
|
+
|
|
1185
|
+
def get_customer_session(
|
|
1186
|
+
self,
|
|
1187
|
+
*,
|
|
1188
|
+
session_id: str,
|
|
1189
|
+
) -> models.GetCustomerSessionResponse:
|
|
1190
|
+
"""Get customer session by sessionId
|
|
1191
|
+
|
|
1192
|
+
GET /v1/sdk/customers/customer-sessions/{sessionId}"""
|
|
1193
|
+
data = self._transport.request(
|
|
1194
|
+
"GET",
|
|
1195
|
+
f"/v1/sdk/customers/customer-sessions/{path_segment(session_id)}",
|
|
1196
|
+
query={},
|
|
1197
|
+
headers={},
|
|
1198
|
+
body=None,
|
|
1199
|
+
)
|
|
1200
|
+
return self._transport.parse(models.GetCustomerSessionResponse, data)
|
|
1201
|
+
|
|
1202
|
+
def get_customer(
|
|
1203
|
+
self,
|
|
1204
|
+
*,
|
|
1205
|
+
reference: str,
|
|
1206
|
+
) -> models.CustomerResponse:
|
|
1207
|
+
"""Get customer by reference
|
|
1208
|
+
|
|
1209
|
+
GET /v1/sdk/customers/{reference}"""
|
|
1210
|
+
data = self._transport.request(
|
|
1211
|
+
"GET",
|
|
1212
|
+
f"/v1/sdk/customers/{path_segment(reference)}",
|
|
1213
|
+
query={},
|
|
1214
|
+
headers={},
|
|
1215
|
+
body=None,
|
|
1216
|
+
)
|
|
1217
|
+
return self._transport.parse(models.CustomerResponse, data)
|
|
1218
|
+
|
|
1219
|
+
def update_customer(
|
|
1220
|
+
self,
|
|
1221
|
+
*,
|
|
1222
|
+
reference: str,
|
|
1223
|
+
body: models.UpdateCustomerRequest | dict[str, Any],
|
|
1224
|
+
) -> models.CustomerResponse:
|
|
1225
|
+
"""Update a customer
|
|
1226
|
+
|
|
1227
|
+
PATCH /v1/sdk/customers/{reference}"""
|
|
1228
|
+
data = self._transport.request(
|
|
1229
|
+
"PATCH",
|
|
1230
|
+
f"/v1/sdk/customers/{path_segment(reference)}",
|
|
1231
|
+
query={},
|
|
1232
|
+
headers={},
|
|
1233
|
+
body=encode_body(body),
|
|
1234
|
+
)
|
|
1235
|
+
return self._transport.parse(models.CustomerResponse, data)
|
|
1236
|
+
|
|
1237
|
+
def get_customer_balance(
|
|
1238
|
+
self,
|
|
1239
|
+
*,
|
|
1240
|
+
reference: str,
|
|
1241
|
+
) -> models.CustomerBalanceResponse:
|
|
1242
|
+
"""Get customer credit balance
|
|
1243
|
+
|
|
1244
|
+
GET /v1/sdk/customers/{reference}/balance"""
|
|
1245
|
+
data = self._transport.request(
|
|
1246
|
+
"GET",
|
|
1247
|
+
f"/v1/sdk/customers/{path_segment(reference)}/balance",
|
|
1248
|
+
query={},
|
|
1249
|
+
headers={},
|
|
1250
|
+
body=None,
|
|
1251
|
+
)
|
|
1252
|
+
return self._transport.parse(models.CustomerBalanceResponse, data)
|
|
1253
|
+
|
|
1254
|
+
def grant_credits(
|
|
1255
|
+
self,
|
|
1256
|
+
*,
|
|
1257
|
+
reference: str,
|
|
1258
|
+
body: models.GrantCustomerCreditsRequest | dict[str, Any],
|
|
1259
|
+
idempotency_key: str | None = None,
|
|
1260
|
+
) -> models.GrantCustomerCreditsResponse:
|
|
1261
|
+
"""Grant credits to a customer
|
|
1262
|
+
|
|
1263
|
+
POST /v1/sdk/customers/{reference}/credits"""
|
|
1264
|
+
data = self._transport.request(
|
|
1265
|
+
"POST",
|
|
1266
|
+
f"/v1/sdk/customers/{path_segment(reference)}/credits",
|
|
1267
|
+
query={},
|
|
1268
|
+
headers={"Idempotency-Key": idempotency_key},
|
|
1269
|
+
body=encode_body(body),
|
|
1270
|
+
)
|
|
1271
|
+
return self._transport.parse(models.GrantCustomerCreditsResponse, data)
|
|
1272
|
+
|
|
1273
|
+
def check_limits(
|
|
1274
|
+
self,
|
|
1275
|
+
*,
|
|
1276
|
+
body: models.CheckLimitRequest | dict[str, Any],
|
|
1277
|
+
) -> models.LimitResponse:
|
|
1278
|
+
"""Check usage limits for a customer and product
|
|
1279
|
+
|
|
1280
|
+
POST /v1/sdk/limits"""
|
|
1281
|
+
data = self._transport.request(
|
|
1282
|
+
"POST",
|
|
1283
|
+
f"/v1/sdk/limits",
|
|
1284
|
+
query={},
|
|
1285
|
+
headers={},
|
|
1286
|
+
body=encode_body(body),
|
|
1287
|
+
)
|
|
1288
|
+
return self._transport.parse(models.LimitResponse, data)
|
|
1289
|
+
|
|
1290
|
+
def get_merchant(
|
|
1291
|
+
self,
|
|
1292
|
+
) -> models.SdkMerchantResponseDto:
|
|
1293
|
+
"""Get merchant identity for the authenticated provider
|
|
1294
|
+
|
|
1295
|
+
GET /v1/sdk/merchant"""
|
|
1296
|
+
data = self._transport.request(
|
|
1297
|
+
"GET",
|
|
1298
|
+
f"/v1/sdk/merchant",
|
|
1299
|
+
query={},
|
|
1300
|
+
headers={},
|
|
1301
|
+
body=None,
|
|
1302
|
+
)
|
|
1303
|
+
return self._transport.parse(models.SdkMerchantResponseDto, data)
|
|
1304
|
+
|
|
1305
|
+
def record_meter_event(
|
|
1306
|
+
self,
|
|
1307
|
+
*,
|
|
1308
|
+
body: models.RecordMeterEventZodDto | dict[str, Any],
|
|
1309
|
+
) -> models.RecordMeterEventResponse:
|
|
1310
|
+
"""Record a meter event
|
|
1311
|
+
|
|
1312
|
+
POST /v1/sdk/meter-events"""
|
|
1313
|
+
data = self._transport.request(
|
|
1314
|
+
"POST",
|
|
1315
|
+
f"/v1/sdk/meter-events",
|
|
1316
|
+
query={},
|
|
1317
|
+
headers={},
|
|
1318
|
+
body=encode_body(body),
|
|
1319
|
+
)
|
|
1320
|
+
return self._transport.parse(models.RecordMeterEventResponse, data)
|
|
1321
|
+
|
|
1322
|
+
def record_meter_events_bulk(
|
|
1323
|
+
self,
|
|
1324
|
+
*,
|
|
1325
|
+
body: models.RecordBulkMeterEventsZodDto | dict[str, Any],
|
|
1326
|
+
) -> models.RecordMeterEventsBulkResponse:
|
|
1327
|
+
"""Record meter events in bulk
|
|
1328
|
+
|
|
1329
|
+
POST /v1/sdk/meter-events/bulk"""
|
|
1330
|
+
data = self._transport.request(
|
|
1331
|
+
"POST",
|
|
1332
|
+
f"/v1/sdk/meter-events/bulk",
|
|
1333
|
+
query={},
|
|
1334
|
+
headers={},
|
|
1335
|
+
body=encode_body(body),
|
|
1336
|
+
)
|
|
1337
|
+
return self._transport.parse(models.RecordMeterEventsBulkResponse, data)
|
|
1338
|
+
|
|
1339
|
+
def get_payment_intents(
|
|
1340
|
+
self,
|
|
1341
|
+
*,
|
|
1342
|
+
limit: float | None = None,
|
|
1343
|
+
offset: float | None = None,
|
|
1344
|
+
) -> models.SdkPaymentIntentListResponse:
|
|
1345
|
+
"""List payment intents for the provider
|
|
1346
|
+
|
|
1347
|
+
GET /v1/sdk/payment-intents"""
|
|
1348
|
+
data = self._transport.request(
|
|
1349
|
+
"GET",
|
|
1350
|
+
f"/v1/sdk/payment-intents",
|
|
1351
|
+
query={"limit": limit, "offset": offset},
|
|
1352
|
+
headers={},
|
|
1353
|
+
body=None,
|
|
1354
|
+
)
|
|
1355
|
+
return self._transport.parse(models.SdkPaymentIntentListResponse, data)
|
|
1356
|
+
|
|
1357
|
+
def create_payment_intent(
|
|
1358
|
+
self,
|
|
1359
|
+
*,
|
|
1360
|
+
body: models.CreatePaymentIntentDto | dict[str, Any],
|
|
1361
|
+
idempotency_key: str,
|
|
1362
|
+
) -> models.SdkPaymentIntentResponse:
|
|
1363
|
+
"""Create a payment intent
|
|
1364
|
+
|
|
1365
|
+
POST /v1/sdk/payment-intents"""
|
|
1366
|
+
data = self._transport.request(
|
|
1367
|
+
"POST",
|
|
1368
|
+
f"/v1/sdk/payment-intents",
|
|
1369
|
+
query={},
|
|
1370
|
+
headers={"idempotency-key": idempotency_key},
|
|
1371
|
+
body=encode_body(body),
|
|
1372
|
+
)
|
|
1373
|
+
return self._transport.parse(models.SdkPaymentIntentResponse, data)
|
|
1374
|
+
|
|
1375
|
+
def attach_business_details(
|
|
1376
|
+
self,
|
|
1377
|
+
*,
|
|
1378
|
+
processor_payment_id: str,
|
|
1379
|
+
body: models.BusinessDetailsDto | dict[str, Any],
|
|
1380
|
+
) -> models.AttachBusinessDetailsResponse:
|
|
1381
|
+
"""Attach business tax details to a payment intent
|
|
1382
|
+
|
|
1383
|
+
POST /v1/sdk/payment-intents/{processorPaymentId}/business-details"""
|
|
1384
|
+
data = self._transport.request(
|
|
1385
|
+
"POST",
|
|
1386
|
+
f"/v1/sdk/payment-intents/{path_segment(processor_payment_id)}/business-details",
|
|
1387
|
+
query={},
|
|
1388
|
+
headers={},
|
|
1389
|
+
body=encode_body(body),
|
|
1390
|
+
)
|
|
1391
|
+
return self._transport.parse(models.AttachBusinessDetailsResponse, data)
|
|
1392
|
+
|
|
1393
|
+
def process_payment_intent(
|
|
1394
|
+
self,
|
|
1395
|
+
*,
|
|
1396
|
+
processor_payment_id: str,
|
|
1397
|
+
body: models.ProcessPaymentIntentDto | dict[str, Any],
|
|
1398
|
+
) -> models.ProcessPaymentIntentResponse:
|
|
1399
|
+
"""Process payment intent after client-side confirmation
|
|
1400
|
+
|
|
1401
|
+
POST /v1/sdk/payment-intents/{processorPaymentId}/process"""
|
|
1402
|
+
data = self._transport.request(
|
|
1403
|
+
"POST",
|
|
1404
|
+
f"/v1/sdk/payment-intents/{path_segment(processor_payment_id)}/process",
|
|
1405
|
+
query={},
|
|
1406
|
+
headers={},
|
|
1407
|
+
body=encode_body(body),
|
|
1408
|
+
)
|
|
1409
|
+
return self._transport.parse(models.ProcessPaymentIntentResponse, data)
|
|
1410
|
+
|
|
1411
|
+
def get_payment_intent(
|
|
1412
|
+
self,
|
|
1413
|
+
*,
|
|
1414
|
+
reference: str,
|
|
1415
|
+
) -> models.SdkPaymentIntentResponse:
|
|
1416
|
+
"""Get a specific payment intent
|
|
1417
|
+
|
|
1418
|
+
GET /v1/sdk/payment-intents/{reference}"""
|
|
1419
|
+
data = self._transport.request(
|
|
1420
|
+
"GET",
|
|
1421
|
+
f"/v1/sdk/payment-intents/{path_segment(reference)}",
|
|
1422
|
+
query={},
|
|
1423
|
+
headers={},
|
|
1424
|
+
body=None,
|
|
1425
|
+
)
|
|
1426
|
+
return self._transport.parse(models.SdkPaymentIntentResponse, data)
|
|
1427
|
+
|
|
1428
|
+
def get_payment_method(
|
|
1429
|
+
self,
|
|
1430
|
+
*,
|
|
1431
|
+
customer_ref: str,
|
|
1432
|
+
) -> models.GetPaymentMethodResponse:
|
|
1433
|
+
"""Get the default payment method for a customer
|
|
1434
|
+
|
|
1435
|
+
GET /v1/sdk/payment-method"""
|
|
1436
|
+
data = self._transport.request(
|
|
1437
|
+
"GET",
|
|
1438
|
+
f"/v1/sdk/payment-method",
|
|
1439
|
+
query={"customerRef": customer_ref},
|
|
1440
|
+
headers={},
|
|
1441
|
+
body=None,
|
|
1442
|
+
)
|
|
1443
|
+
return self._transport.parse(models.GetPaymentMethodResponse, data)
|
|
1444
|
+
|
|
1445
|
+
def get_platform_config(
|
|
1446
|
+
self,
|
|
1447
|
+
) -> models.SdkPlatformConfigResponseDto:
|
|
1448
|
+
"""Get environment-aware platform config for the authenticated provider
|
|
1449
|
+
|
|
1450
|
+
GET /v1/sdk/platform-config"""
|
|
1451
|
+
data = self._transport.request(
|
|
1452
|
+
"GET",
|
|
1453
|
+
f"/v1/sdk/platform-config",
|
|
1454
|
+
query={},
|
|
1455
|
+
headers={},
|
|
1456
|
+
body=None,
|
|
1457
|
+
)
|
|
1458
|
+
return self._transport.parse(models.SdkPlatformConfigResponseDto, data)
|
|
1459
|
+
|
|
1460
|
+
def list_products(
|
|
1461
|
+
self,
|
|
1462
|
+
*,
|
|
1463
|
+
limit: float | None = None,
|
|
1464
|
+
offset: float | None = None,
|
|
1465
|
+
search: str | None = None,
|
|
1466
|
+
status: str | None = None,
|
|
1467
|
+
is_managed_mcp: bool | None = None,
|
|
1468
|
+
is_mcp_pay: bool | None = None,
|
|
1469
|
+
) -> models.ListProductsResponse:
|
|
1470
|
+
"""List products
|
|
1471
|
+
|
|
1472
|
+
GET /v1/sdk/products"""
|
|
1473
|
+
data = self._transport.request(
|
|
1474
|
+
"GET",
|
|
1475
|
+
f"/v1/sdk/products",
|
|
1476
|
+
query={
|
|
1477
|
+
"limit": limit,
|
|
1478
|
+
"offset": offset,
|
|
1479
|
+
"search": search,
|
|
1480
|
+
"status": status,
|
|
1481
|
+
"isManagedMcp": is_managed_mcp,
|
|
1482
|
+
"isMcpPay": is_mcp_pay,
|
|
1483
|
+
},
|
|
1484
|
+
headers={},
|
|
1485
|
+
body=None,
|
|
1486
|
+
)
|
|
1487
|
+
return self._transport.parse(models.ListProductsResponse, data)
|
|
1488
|
+
|
|
1489
|
+
def create_product(
|
|
1490
|
+
self,
|
|
1491
|
+
*,
|
|
1492
|
+
body: models.CreateProductRequest | dict[str, Any],
|
|
1493
|
+
) -> models.SdkProductResponse:
|
|
1494
|
+
"""Create a product
|
|
1495
|
+
|
|
1496
|
+
POST /v1/sdk/products"""
|
|
1497
|
+
data = self._transport.request(
|
|
1498
|
+
"POST",
|
|
1499
|
+
f"/v1/sdk/products",
|
|
1500
|
+
query={},
|
|
1501
|
+
headers={},
|
|
1502
|
+
body=encode_body(body),
|
|
1503
|
+
)
|
|
1504
|
+
return self._transport.parse(models.SdkProductResponse, data)
|
|
1505
|
+
|
|
1506
|
+
def bootstrap_mcp_product(
|
|
1507
|
+
self,
|
|
1508
|
+
*,
|
|
1509
|
+
body: models.McpBootstrapDto | dict[str, Any],
|
|
1510
|
+
) -> models.McpBootstrapResult:
|
|
1511
|
+
"""Bootstrap MCP product integration
|
|
1512
|
+
|
|
1513
|
+
POST /v1/sdk/products/mcp/bootstrap"""
|
|
1514
|
+
data = self._transport.request(
|
|
1515
|
+
"POST",
|
|
1516
|
+
f"/v1/sdk/products/mcp/bootstrap",
|
|
1517
|
+
query={},
|
|
1518
|
+
headers={},
|
|
1519
|
+
body=encode_body(body),
|
|
1520
|
+
)
|
|
1521
|
+
return self._transport.parse(models.McpBootstrapResult, data)
|
|
1522
|
+
|
|
1523
|
+
def delete_product(
|
|
1524
|
+
self,
|
|
1525
|
+
*,
|
|
1526
|
+
product_ref: str,
|
|
1527
|
+
) -> models.DeleteProductResponse:
|
|
1528
|
+
"""Delete a product
|
|
1529
|
+
|
|
1530
|
+
DELETE /v1/sdk/products/{productRef}"""
|
|
1531
|
+
data = self._transport.request(
|
|
1532
|
+
"DELETE",
|
|
1533
|
+
f"/v1/sdk/products/{path_segment(product_ref)}",
|
|
1534
|
+
query={},
|
|
1535
|
+
headers={},
|
|
1536
|
+
body=None,
|
|
1537
|
+
)
|
|
1538
|
+
return self._transport.parse(models.DeleteProductResponse, data)
|
|
1539
|
+
|
|
1540
|
+
def get_product(
|
|
1541
|
+
self,
|
|
1542
|
+
*,
|
|
1543
|
+
product_ref: str,
|
|
1544
|
+
) -> models.SdkProductResponse:
|
|
1545
|
+
"""Get a product by reference
|
|
1546
|
+
|
|
1547
|
+
GET /v1/sdk/products/{productRef}"""
|
|
1548
|
+
data = self._transport.request(
|
|
1549
|
+
"GET",
|
|
1550
|
+
f"/v1/sdk/products/{path_segment(product_ref)}",
|
|
1551
|
+
query={},
|
|
1552
|
+
headers={},
|
|
1553
|
+
body=None,
|
|
1554
|
+
)
|
|
1555
|
+
return self._transport.parse(models.SdkProductResponse, data)
|
|
1556
|
+
|
|
1557
|
+
def update_product(
|
|
1558
|
+
self,
|
|
1559
|
+
*,
|
|
1560
|
+
product_ref: str,
|
|
1561
|
+
body: models.UpdateProductRequest | dict[str, Any],
|
|
1562
|
+
) -> models.SdkProductResponse:
|
|
1563
|
+
"""Update a product
|
|
1564
|
+
|
|
1565
|
+
PUT /v1/sdk/products/{productRef}"""
|
|
1566
|
+
data = self._transport.request(
|
|
1567
|
+
"PUT",
|
|
1568
|
+
f"/v1/sdk/products/{path_segment(product_ref)}",
|
|
1569
|
+
query={},
|
|
1570
|
+
headers={},
|
|
1571
|
+
body=encode_body(body),
|
|
1572
|
+
)
|
|
1573
|
+
return self._transport.parse(models.SdkProductResponse, data)
|
|
1574
|
+
|
|
1575
|
+
def clone_product(
|
|
1576
|
+
self,
|
|
1577
|
+
*,
|
|
1578
|
+
product_ref: str,
|
|
1579
|
+
body: models.CloneProductDto | dict[str, Any],
|
|
1580
|
+
) -> models.SdkProductResponse:
|
|
1581
|
+
"""Clone a product
|
|
1582
|
+
|
|
1583
|
+
POST /v1/sdk/products/{productRef}/clone"""
|
|
1584
|
+
data = self._transport.request(
|
|
1585
|
+
"POST",
|
|
1586
|
+
f"/v1/sdk/products/{path_segment(product_ref)}/clone",
|
|
1587
|
+
query={},
|
|
1588
|
+
headers={},
|
|
1589
|
+
body=encode_body(body),
|
|
1590
|
+
)
|
|
1591
|
+
return self._transport.parse(models.SdkProductResponse, data)
|
|
1592
|
+
|
|
1593
|
+
def configure_mcp_plans(
|
|
1594
|
+
self,
|
|
1595
|
+
*,
|
|
1596
|
+
product_ref: str,
|
|
1597
|
+
body: models.ConfigureMcpPlansDto | dict[str, Any],
|
|
1598
|
+
) -> models.ConfigureMcpPlansResult:
|
|
1599
|
+
"""Configure MCP plans on an MCP product
|
|
1600
|
+
|
|
1601
|
+
PUT /v1/sdk/products/{productRef}/mcp/plans"""
|
|
1602
|
+
data = self._transport.request(
|
|
1603
|
+
"PUT",
|
|
1604
|
+
f"/v1/sdk/products/{path_segment(product_ref)}/mcp/plans",
|
|
1605
|
+
query={},
|
|
1606
|
+
headers={},
|
|
1607
|
+
body=encode_body(body),
|
|
1608
|
+
)
|
|
1609
|
+
return self._transport.parse(models.ConfigureMcpPlansResult, data)
|
|
1610
|
+
|
|
1611
|
+
def list_plans(
|
|
1612
|
+
self,
|
|
1613
|
+
*,
|
|
1614
|
+
product_ref: str,
|
|
1615
|
+
limit: float | None = None,
|
|
1616
|
+
offset: float | None = None,
|
|
1617
|
+
) -> models.ListPlansResponse:
|
|
1618
|
+
"""List plans for a product
|
|
1619
|
+
|
|
1620
|
+
GET /v1/sdk/products/{productRef}/plans"""
|
|
1621
|
+
data = self._transport.request(
|
|
1622
|
+
"GET",
|
|
1623
|
+
f"/v1/sdk/products/{path_segment(product_ref)}/plans",
|
|
1624
|
+
query={"limit": limit, "offset": offset},
|
|
1625
|
+
headers={},
|
|
1626
|
+
body=None,
|
|
1627
|
+
)
|
|
1628
|
+
return self._transport.parse(models.ListPlansResponse, data)
|
|
1629
|
+
|
|
1630
|
+
def create_plan(
|
|
1631
|
+
self,
|
|
1632
|
+
*,
|
|
1633
|
+
product_ref: str,
|
|
1634
|
+
body: models.CreatePlanRequest | dict[str, Any],
|
|
1635
|
+
) -> models.Plan:
|
|
1636
|
+
"""Create a plan for a product
|
|
1637
|
+
|
|
1638
|
+
POST /v1/sdk/products/{productRef}/plans"""
|
|
1639
|
+
data = self._transport.request(
|
|
1640
|
+
"POST",
|
|
1641
|
+
f"/v1/sdk/products/{path_segment(product_ref)}/plans",
|
|
1642
|
+
query={},
|
|
1643
|
+
headers={},
|
|
1644
|
+
body=encode_body(body),
|
|
1645
|
+
)
|
|
1646
|
+
return self._transport.parse(models.Plan, data)
|
|
1647
|
+
|
|
1648
|
+
def delete_plan(
|
|
1649
|
+
self,
|
|
1650
|
+
*,
|
|
1651
|
+
product_ref: str,
|
|
1652
|
+
plan_ref: str,
|
|
1653
|
+
) -> models.DeletePlanResponse:
|
|
1654
|
+
"""Delete a plan from a product
|
|
1655
|
+
|
|
1656
|
+
DELETE /v1/sdk/products/{productRef}/plans/{planRef}"""
|
|
1657
|
+
data = self._transport.request(
|
|
1658
|
+
"DELETE",
|
|
1659
|
+
f"/v1/sdk/products/{path_segment(product_ref)}/plans/{path_segment(plan_ref)}",
|
|
1660
|
+
query={},
|
|
1661
|
+
headers={},
|
|
1662
|
+
body=None,
|
|
1663
|
+
)
|
|
1664
|
+
return self._transport.parse(models.DeletePlanResponse, data)
|
|
1665
|
+
|
|
1666
|
+
def get_plan(
|
|
1667
|
+
self,
|
|
1668
|
+
*,
|
|
1669
|
+
product_ref: str,
|
|
1670
|
+
plan_ref: str,
|
|
1671
|
+
) -> models.Plan:
|
|
1672
|
+
"""Get a plan for a product
|
|
1673
|
+
|
|
1674
|
+
GET /v1/sdk/products/{productRef}/plans/{planRef}"""
|
|
1675
|
+
data = self._transport.request(
|
|
1676
|
+
"GET",
|
|
1677
|
+
f"/v1/sdk/products/{path_segment(product_ref)}/plans/{path_segment(plan_ref)}",
|
|
1678
|
+
query={},
|
|
1679
|
+
headers={},
|
|
1680
|
+
body=None,
|
|
1681
|
+
)
|
|
1682
|
+
return self._transport.parse(models.Plan, data)
|
|
1683
|
+
|
|
1684
|
+
def update_plan(
|
|
1685
|
+
self,
|
|
1686
|
+
*,
|
|
1687
|
+
product_ref: str,
|
|
1688
|
+
plan_ref: str,
|
|
1689
|
+
body: models.UpdatePlanRequest | dict[str, Any],
|
|
1690
|
+
) -> models.Plan:
|
|
1691
|
+
"""Update a plan for a product
|
|
1692
|
+
|
|
1693
|
+
PUT /v1/sdk/products/{productRef}/plans/{planRef}"""
|
|
1694
|
+
data = self._transport.request(
|
|
1695
|
+
"PUT",
|
|
1696
|
+
f"/v1/sdk/products/{path_segment(product_ref)}/plans/{path_segment(plan_ref)}",
|
|
1697
|
+
query={},
|
|
1698
|
+
headers={},
|
|
1699
|
+
body=encode_body(body),
|
|
1700
|
+
)
|
|
1701
|
+
return self._transport.parse(models.Plan, data)
|
|
1702
|
+
|
|
1703
|
+
def list_purchases(
|
|
1704
|
+
self,
|
|
1705
|
+
*,
|
|
1706
|
+
status: str | None = None,
|
|
1707
|
+
product_ref: str | None = None,
|
|
1708
|
+
customer_ref: str | None = None,
|
|
1709
|
+
include_free: bool | None = None,
|
|
1710
|
+
) -> models.ListPurchasesResponse:
|
|
1711
|
+
"""List purchases for provider
|
|
1712
|
+
|
|
1713
|
+
GET /v1/sdk/purchases"""
|
|
1714
|
+
data = self._transport.request(
|
|
1715
|
+
"GET",
|
|
1716
|
+
f"/v1/sdk/purchases",
|
|
1717
|
+
query={
|
|
1718
|
+
"status": status,
|
|
1719
|
+
"productRef": product_ref,
|
|
1720
|
+
"customerRef": customer_ref,
|
|
1721
|
+
"includeFree": include_free,
|
|
1722
|
+
},
|
|
1723
|
+
headers={},
|
|
1724
|
+
body=None,
|
|
1725
|
+
)
|
|
1726
|
+
return self._transport.parse(models.ListPurchasesResponse, data)
|
|
1727
|
+
|
|
1728
|
+
def get_purchases_for_customer(
|
|
1729
|
+
self,
|
|
1730
|
+
*,
|
|
1731
|
+
customer_ref: str,
|
|
1732
|
+
include_free: bool | None = None,
|
|
1733
|
+
) -> models.GetPurchasesForCustomerResponse:
|
|
1734
|
+
"""Get purchases for a customer
|
|
1735
|
+
|
|
1736
|
+
GET /v1/sdk/purchases/customer/{customerRef}"""
|
|
1737
|
+
data = self._transport.request(
|
|
1738
|
+
"GET",
|
|
1739
|
+
f"/v1/sdk/purchases/customer/{path_segment(customer_ref)}",
|
|
1740
|
+
query={"includeFree": include_free},
|
|
1741
|
+
headers={},
|
|
1742
|
+
body=None,
|
|
1743
|
+
)
|
|
1744
|
+
return self._transport.parse(models.GetPurchasesForCustomerResponse, data)
|
|
1745
|
+
|
|
1746
|
+
def get_purchases_for_product(
|
|
1747
|
+
self,
|
|
1748
|
+
*,
|
|
1749
|
+
product_ref: str,
|
|
1750
|
+
) -> models.GetPurchasesForProductResponse:
|
|
1751
|
+
"""Get purchases for a product
|
|
1752
|
+
|
|
1753
|
+
GET /v1/sdk/purchases/product/{productRef}"""
|
|
1754
|
+
data = self._transport.request(
|
|
1755
|
+
"GET",
|
|
1756
|
+
f"/v1/sdk/purchases/product/{path_segment(product_ref)}",
|
|
1757
|
+
query={},
|
|
1758
|
+
headers={},
|
|
1759
|
+
body=None,
|
|
1760
|
+
)
|
|
1761
|
+
return self._transport.parse(models.GetPurchasesForProductResponse, data)
|
|
1762
|
+
|
|
1763
|
+
def get_purchase(
|
|
1764
|
+
self,
|
|
1765
|
+
*,
|
|
1766
|
+
purchase_ref: str,
|
|
1767
|
+
) -> models.SdkPurchaseResponse:
|
|
1768
|
+
"""Get a purchase by reference
|
|
1769
|
+
|
|
1770
|
+
GET /v1/sdk/purchases/{purchaseRef}"""
|
|
1771
|
+
data = self._transport.request(
|
|
1772
|
+
"GET",
|
|
1773
|
+
f"/v1/sdk/purchases/{path_segment(purchase_ref)}",
|
|
1774
|
+
query={},
|
|
1775
|
+
headers={},
|
|
1776
|
+
body=None,
|
|
1777
|
+
)
|
|
1778
|
+
return self._transport.parse(models.SdkPurchaseResponse, data)
|
|
1779
|
+
|
|
1780
|
+
def cancel_purchase(
|
|
1781
|
+
self,
|
|
1782
|
+
*,
|
|
1783
|
+
purchase_ref: str,
|
|
1784
|
+
body: models.CancelPurchaseRequest | dict[str, Any],
|
|
1785
|
+
) -> models.CancelPurchaseResponse:
|
|
1786
|
+
"""Cancel a purchase
|
|
1787
|
+
|
|
1788
|
+
POST /v1/sdk/purchases/{purchaseRef}/cancel"""
|
|
1789
|
+
data = self._transport.request(
|
|
1790
|
+
"POST",
|
|
1791
|
+
f"/v1/sdk/purchases/{path_segment(purchase_ref)}/cancel",
|
|
1792
|
+
query={},
|
|
1793
|
+
headers={},
|
|
1794
|
+
body=encode_body(body),
|
|
1795
|
+
)
|
|
1796
|
+
return self._transport.parse(models.CancelPurchaseResponse, data)
|
|
1797
|
+
|
|
1798
|
+
def reactivate_purchase(
|
|
1799
|
+
self,
|
|
1800
|
+
*,
|
|
1801
|
+
purchase_ref: str,
|
|
1802
|
+
) -> models.ReactivatePurchaseResponse:
|
|
1803
|
+
"""Reactivate a cancelled purchase
|
|
1804
|
+
|
|
1805
|
+
POST /v1/sdk/purchases/{purchaseRef}/reactivate"""
|
|
1806
|
+
data = self._transport.request(
|
|
1807
|
+
"POST",
|
|
1808
|
+
f"/v1/sdk/purchases/{path_segment(purchase_ref)}/reactivate",
|
|
1809
|
+
query={},
|
|
1810
|
+
headers={},
|
|
1811
|
+
body=None,
|
|
1812
|
+
)
|
|
1813
|
+
return self._transport.parse(models.ReactivatePurchaseResponse, data)
|
|
1814
|
+
|
|
1815
|
+
def record_usage(
|
|
1816
|
+
self,
|
|
1817
|
+
*,
|
|
1818
|
+
body: models.CreateUsageRequest | dict[str, Any],
|
|
1819
|
+
) -> models.UsageRecordResponse:
|
|
1820
|
+
"""Record a usage event
|
|
1821
|
+
|
|
1822
|
+
POST /v1/sdk/usages"""
|
|
1823
|
+
data = self._transport.request(
|
|
1824
|
+
"POST",
|
|
1825
|
+
f"/v1/sdk/usages",
|
|
1826
|
+
query={},
|
|
1827
|
+
headers={},
|
|
1828
|
+
body=encode_body(body),
|
|
1829
|
+
)
|
|
1830
|
+
return self._transport.parse(models.UsageRecordResponse, data)
|
|
1831
|
+
|
|
1832
|
+
def record_usage_bulk(
|
|
1833
|
+
self,
|
|
1834
|
+
*,
|
|
1835
|
+
body: models.BulkCreateUsageRequest | dict[str, Any],
|
|
1836
|
+
) -> models.BulkUsageResponse:
|
|
1837
|
+
"""Record bulk usage events
|
|
1838
|
+
|
|
1839
|
+
POST /v1/sdk/usages/bulk"""
|
|
1840
|
+
data = self._transport.request(
|
|
1841
|
+
"POST",
|
|
1842
|
+
f"/v1/sdk/usages/bulk",
|
|
1843
|
+
query={},
|
|
1844
|
+
headers={},
|
|
1845
|
+
body=encode_body(body),
|
|
1846
|
+
)
|
|
1847
|
+
return self._transport.parse(models.BulkUsageResponse, data)
|
|
1848
|
+
|
|
1849
|
+
def get_user_info(
|
|
1850
|
+
self,
|
|
1851
|
+
*,
|
|
1852
|
+
body: models.UserInfoRequest | dict[str, Any],
|
|
1853
|
+
) -> models.UserInfoResponse:
|
|
1854
|
+
"""Get user info and purchase status
|
|
1855
|
+
|
|
1856
|
+
POST /v1/sdk/user-info"""
|
|
1857
|
+
data = self._transport.request(
|
|
1858
|
+
"POST",
|
|
1859
|
+
f"/v1/sdk/user-info",
|
|
1860
|
+
query={},
|
|
1861
|
+
headers={},
|
|
1862
|
+
body=encode_body(body),
|
|
1863
|
+
)
|
|
1864
|
+
return self._transport.parse(models.UserInfoResponse, data)
|
|
1865
|
+
|
|
1866
|
+
def get_webhook_event_schema(
|
|
1867
|
+
self,
|
|
1868
|
+
) -> models.WebhookEventDto:
|
|
1869
|
+
"""Get the webhook event envelope schema
|
|
1870
|
+
|
|
1871
|
+
GET /v1/sdk/webhooks/event-schema"""
|
|
1872
|
+
data = self._transport.request(
|
|
1873
|
+
"GET",
|
|
1874
|
+
f"/v1/sdk/webhooks/event-schema",
|
|
1875
|
+
query={},
|
|
1876
|
+
headers={},
|
|
1877
|
+
body=None,
|
|
1878
|
+
)
|
|
1879
|
+
return self._transport.parse(models.WebhookEventDto, data)
|
|
1880
|
+
|
|
1881
|
+
def list_webhook_event_types(
|
|
1882
|
+
self,
|
|
1883
|
+
) -> models.ListWebhookEventTypesResponse:
|
|
1884
|
+
"""List webhook event types
|
|
1885
|
+
|
|
1886
|
+
GET /v1/sdk/webhooks/event-types"""
|
|
1887
|
+
data = self._transport.request(
|
|
1888
|
+
"GET",
|
|
1889
|
+
f"/v1/sdk/webhooks/event-types",
|
|
1890
|
+
query={},
|
|
1891
|
+
headers={},
|
|
1892
|
+
body=None,
|
|
1893
|
+
)
|
|
1894
|
+
return self._transport.parse(models.ListWebhookEventTypesResponse, data)
|