Skip to content

Commit 99d8515

Browse files
feat: Support multiple Kernel wallet payment methods and payment requests
Stainless-Generated-From: d8f3e64609f69a8484f189c430cc0dc307ee82a2
1 parent 6512c8f commit 99d8515

30 files changed

Lines changed: 2454 additions & 166 deletions

‎api.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,8 @@ Types:
569569

570570
```python
571571
from kernel.types.vaults import (
572+
AddPaymentMethodVaultItemOperationRequest,
573+
AddPaymentMethodVaultItemOperationResult,
572574
AgentcardCheckoutAuthorization,
573575
AgentcardCheckoutPreparation,
574576
AgentcardPreparedProcessor,
@@ -602,6 +604,7 @@ from kernel.types.vaults import (
602604
KernelCredentialVaultItemSpec,
603605
KernelCredentialVaultItemSpecInput,
604606
KernelCredentialVaultItemState,
607+
KernelPaymentRequestVaultItemSpec,
605608
KernelWalletState,
606609
KernelWalletVaultItemSpec,
607610
LinkShippingAddress,
@@ -621,8 +624,13 @@ from kernel.types.vaults import (
621624
OnePasswordRecoverVaultItemOperationRequest,
622625
OnePasswordRequestAccessVaultItemOperationRequest,
623626
PasskeyVaultItemOperationResult,
627+
PaymentRequestVaultItem,
628+
PaymentRequestVaultItemSpec,
629+
PaymentRequestVaultItemState,
624630
PrepareCheckoutVaultItemOperationRequest,
625631
RegisterPasskeyVaultItemOperationRequest,
632+
RemovePaymentMethodVaultItemOperationRequest,
633+
RemovePaymentMethodVaultItemOperationResult,
626634
RestartVerificationVaultItemOperationRequest,
627635
VaultCardAliases,
628636
VaultCardFillField,

‎src/kernel/resources/vaults/items.py‎

Lines changed: 675 additions & 34 deletions
Large diffs are not rendered by default.

‎src/kernel/types/vaults/__init__.py‎

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from .one_password_oauth_action import OnePasswordOAuthAction as OnePasswordOAuthAction
2828
from .card_vault_item_spec_param import CardVaultItemSpecParam as CardVaultItemSpecParam
2929
from .credential_vault_item_spec import CredentialVaultItemSpec as CredentialVaultItemSpec
30+
from .payment_request_vault_item import PaymentRequestVaultItem as PaymentRequestVaultItem
3031
from .vault_webmcp_binding_param import VaultWebmcpBindingParam as VaultWebmcpBindingParam
3132
from .credential_vault_field_type import CredentialVaultFieldType as CredentialVaultFieldType
3233
from .credential_vault_item_state import CredentialVaultItemState as CredentialVaultItemState
@@ -40,8 +41,10 @@
4041
from .kernel_wallet_vault_item_spec import KernelWalletVaultItemSpec as KernelWalletVaultItemSpec
4142
from .vault_item_operation_response import VaultItemOperationResponse as VaultItemOperationResponse
4243
from .agentcard_checkout_preparation import AgentcardCheckoutPreparation as AgentcardCheckoutPreparation
44+
from .payment_request_vault_item_spec import PaymentRequestVaultItemSpec as PaymentRequestVaultItemSpec
4345
from .agentcard_checkout_authorization import AgentcardCheckoutAuthorization as AgentcardCheckoutAuthorization
4446
from .fill_vault_item_operation_result import FillVaultItemOperationResult as FillVaultItemOperationResult
47+
from .payment_request_vault_item_state import PaymentRequestVaultItemState as PaymentRequestVaultItemState
4548
from .credential_vault_field_definition import CredentialVaultFieldDefinition as CredentialVaultFieldDefinition
4649
from .kernel_card_vault_item_spec_param import KernelCardVaultItemSpecParam as KernelCardVaultItemSpecParam
4750
from .kernel_credential_vault_item_spec import KernelCredentialVaultItemSpec as KernelCredentialVaultItemSpec
@@ -56,9 +59,13 @@
5659
from .one_password_credential_account_state import (
5760
OnePasswordCredentialAccountState as OnePasswordCredentialAccountState,
5861
)
62+
from .payment_request_vault_item_spec_param import PaymentRequestVaultItemSpecParam as PaymentRequestVaultItemSpecParam
5963
from .credential_vault_item_spec_input_param import (
6064
CredentialVaultItemSpecInputParam as CredentialVaultItemSpecInputParam,
6165
)
66+
from .kernel_payment_request_vault_item_spec import (
67+
KernelPaymentRequestVaultItemSpec as KernelPaymentRequestVaultItemSpec,
68+
)
6269
from .credential_vault_item_spec_update_param import (
6370
CredentialVaultItemSpecUpdateParam as CredentialVaultItemSpecUpdateParam,
6471
)
@@ -95,6 +102,9 @@
95102
from .authorize_vault_item_operation_request_param import (
96103
AuthorizeVaultItemOperationRequestParam as AuthorizeVaultItemOperationRequestParam,
97104
)
105+
from .kernel_payment_request_vault_item_spec_param import (
106+
KernelPaymentRequestVaultItemSpecParam as KernelPaymentRequestVaultItemSpecParam,
107+
)
98108
from .credential_vault_field_definition_input_param import (
99109
CredentialVaultFieldDefinitionInputParam as CredentialVaultFieldDefinitionInputParam,
100110
)
@@ -104,6 +114,9 @@
104114
from .one_password_fill_vault_item_operation_result import (
105115
OnePasswordFillVaultItemOperationResult as OnePasswordFillVaultItemOperationResult,
106116
)
117+
from .add_payment_method_vault_item_operation_result import (
118+
AddPaymentMethodVaultItemOperationResult as AddPaymentMethodVaultItemOperationResult,
119+
)
107120
from .arm_passkey_vault_item_operation_request_param import (
108121
ArmPasskeyVaultItemOperationRequestParam as ArmPasskeyVaultItemOperationRequestParam,
109122
)
@@ -113,6 +126,9 @@
113126
from .disarm_passkey_vault_item_operation_request_param import (
114127
DisarmPasskeyVaultItemOperationRequestParam as DisarmPasskeyVaultItemOperationRequestParam,
115128
)
129+
from .remove_payment_method_vault_item_operation_result import (
130+
RemovePaymentMethodVaultItemOperationResult as RemovePaymentMethodVaultItemOperationResult,
131+
)
116132
from .managed_auth_credential_vault_item_spec_input_param import (
117133
ManagedAuthCredentialVaultItemSpecInputParam as ManagedAuthCredentialVaultItemSpecInputParam,
118134
)
@@ -128,6 +144,9 @@
128144
from .one_password_fill_vault_item_operation_request_param import (
129145
OnePasswordFillVaultItemOperationRequestParam as OnePasswordFillVaultItemOperationRequestParam,
130146
)
147+
from .add_payment_method_vault_item_operation_request_param import (
148+
AddPaymentMethodVaultItemOperationRequestParam as AddPaymentMethodVaultItemOperationRequestParam,
149+
)
131150
from .confirm_transaction_vault_item_operation_request_param import (
132151
ConfirmTransactionVaultItemOperationRequestParam as ConfirmTransactionVaultItemOperationRequestParam,
133152
)
@@ -137,6 +156,9 @@
137156
from .restart_verification_vault_item_operation_request_param import (
138157
RestartVerificationVaultItemOperationRequestParam as RestartVerificationVaultItemOperationRequestParam,
139158
)
159+
from .remove_payment_method_vault_item_operation_request_param import (
160+
RemovePaymentMethodVaultItemOperationRequestParam as RemovePaymentMethodVaultItemOperationRequestParam,
161+
)
140162
from .one_password_request_access_vault_item_operation_request_param import (
141163
OnePasswordRequestAccessVaultItemOperationRequestParam as OnePasswordRequestAccessVaultItemOperationRequestParam,
142164
)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from __future__ import annotations
4+
5+
from typing_extensions import Literal, Required, TypedDict
6+
7+
__all__ = ["AddPaymentMethodVaultItemOperationRequestParam"]
8+
9+
10+
class AddPaymentMethodVaultItemOperationRequestParam(TypedDict, total=False):
11+
"""
12+
Start hosted enrollment of a card in a connected Kernel wallet, including its first card, only when the wallet advertises add_payment_method. Returns a new payment method in pending_enrollment with a single-use card_enrollment URL for the cardholder. Card details go directly to the card vault and are never accepted by this API. Each call creates a separate link that expires after 30 minutes; a failed or expired enrollment does not affect the wallet's other payment methods. Scoped API keys require vaults:write in addition to vaults:use on this vault; otherwise the operation returns 403.
13+
"""
14+
15+
type: Required[Literal["add_payment_method"]]
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2+
3+
from typing_extensions import Literal
4+
5+
from ..._models import BaseModel
6+
from .vault_payment_method import VaultPaymentMethod
7+
8+
__all__ = ["AddPaymentMethodVaultItemOperationResult"]
9+
10+
11+
class AddPaymentMethodVaultItemOperationResult(BaseModel):
12+
"""The payment method created in pending_enrollment.
13+
14+
Deliver action.url to the cardholder; it is a single-use capability and must not be logged. Observe completion through the wallet's payment_methods expansion.
15+
"""
16+
17+
payment_method: VaultPaymentMethod
18+
19+
type: Literal["add_payment_method"]

‎src/kernel/types/vaults/credential_account_vault_item.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ class AvailableOperation(BaseModel):
4646
"1pw_recover",
4747
"1pw_update_access_token",
4848
"webmcp_invoke",
49+
"add_payment_method",
50+
"remove_payment_method",
4951
]
5052

5153

‎src/kernel/types/vaults/credential_vault_item.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ class AvailableOperation(BaseModel):
5353
"1pw_recover",
5454
"1pw_update_access_token",
5555
"webmcp_invoke",
56+
"add_payment_method",
57+
"remove_payment_method",
5658
]
5759

5860

‎src/kernel/types/vaults/credential_vault_item_request_param.py‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class CredentialVaultItemRequestParam(TypedDict, total=False):
1717
or that path fails, collect a Kernel-hosted credential item instead. Never
1818
automatically retry an uncertain 1Password request. After an uncertain fill,
1919
inspect the page to see the result of the fill.
20-
Do not use credential items for credit card data. Use wallet and card item types instead.
20+
Do not use credential items for credit card data. Use wallet, payment_request and card item types instead.
2121
Kernel credentials declare fields and may enter pending_collection.
2222
1Password credentials either reference a connected credential_account or
2323
store a supplied access token and integration key encrypted on the item.
@@ -32,10 +32,10 @@ class CredentialVaultItemRequestParam(TypedDict, total=False):
3232
spec: Required[CredentialVaultItemSpecInputParam]
3333
"""Credential fields are for login and other non-payment credentials.
3434
35-
Do not store, collect, or fill credit card data in credential items. Use wallet
36-
and card item types for credit cards and payment checkout instead. Field order
37-
is preserved in the user-facing collection form, so list fields in the same
38-
top-to-bottom order as the website.
35+
Do not store, collect, or fill credit card data in credential items. Use wallet,
36+
payment_request and card item types for credit cards and payment checkout
37+
instead. Field order is preserved in the user-facing collection form, so list
38+
fields in the same top-to-bottom order as the website.
3939
"""
4040

4141
type: Required[Literal["credential"]]

‎src/kernel/types/vaults/item_perform_operation_params.py‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
"OnePasswordRecoverVaultItemOperationRequest",
3030
"OnePasswordUpdateAccessTokenVaultItemOperationRequest",
3131
"WebmcpInvokeVaultItemOperationRequest",
32+
"AddPaymentMethodVaultItemOperationRequest",
33+
"RemovePaymentMethodVaultItemOperationRequest",
3234
]
3335

3436

@@ -269,6 +271,21 @@ class WebmcpInvokeVaultItemOperationRequest(TypedDict, total=False):
269271
"""
270272

271273

274+
class AddPaymentMethodVaultItemOperationRequest(TypedDict, total=False):
275+
id_or_name: Required[str]
276+
277+
type: Required[Literal["add_payment_method"]]
278+
279+
280+
class RemovePaymentMethodVaultItemOperationRequest(TypedDict, total=False):
281+
id_or_name: Required[str]
282+
283+
payment_method_id: Required[str]
284+
"""ID from the wallet's payment_methods expansion."""
285+
286+
type: Required[Literal["remove_payment_method"]]
287+
288+
272289
ItemPerformOperationParams: TypeAlias = Union[
273290
AuthorizeVaultItemOperationRequest,
274291
RestartVerificationVaultItemOperationRequest,
@@ -285,4 +302,6 @@ class WebmcpInvokeVaultItemOperationRequest(TypedDict, total=False):
285302
OnePasswordRecoverVaultItemOperationRequest,
286303
OnePasswordUpdateAccessTokenVaultItemOperationRequest,
287304
WebmcpInvokeVaultItemOperationRequest,
305+
AddPaymentMethodVaultItemOperationRequest,
306+
RemovePaymentMethodVaultItemOperationRequest,
288307
]

‎src/kernel/types/vaults/item_update_params.py‎

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,15 @@
66
from typing_extensions import Literal, Required, TypeAlias, TypedDict
77

88
from .card_vault_item_spec_param import CardVaultItemSpecParam
9+
from .payment_request_vault_item_spec_param import PaymentRequestVaultItemSpecParam
910
from .credential_vault_item_spec_update_param import CredentialVaultItemSpecUpdateParam
1011

11-
__all__ = ["ItemUpdateParams", "CardVaultItemUpdateRequest", "CredentialVaultItemUpdateRequest"]
12+
__all__ = [
13+
"ItemUpdateParams",
14+
"CardVaultItemUpdateRequest",
15+
"PaymentRequestVaultItemUpdateRequest",
16+
"CredentialVaultItemUpdateRequest",
17+
]
1218

1319

1420
class CardVaultItemUpdateRequest(TypedDict, total=False):
@@ -27,6 +33,22 @@ class CardVaultItemUpdateRequest(TypedDict, total=False):
2733
type: Literal["card"]
2834

2935

36+
class PaymentRequestVaultItemUpdateRequest(TypedDict, total=False):
37+
id_or_name: Required[str]
38+
39+
spec: Required[PaymentRequestVaultItemSpecParam]
40+
"""Live Link card request.
41+
42+
Test-mode card creation is not supported. The spec can be changed with PATCH
43+
until the card is authorized at a checkout. Authorize it with the browser at
44+
final checkout: Kernel inspects the checkout through WebMCP and internally
45+
chooses a merchant-bound Link Pay Token when supported or a virtual card
46+
otherwise. Callers never receive or choose how the credential is delivered.
47+
"""
48+
49+
type: Required[Literal["payment_request"]]
50+
51+
3052
class CredentialVaultItemUpdateRequest(TypedDict, total=False):
3153
id_or_name: Required[str]
3254

@@ -46,4 +68,6 @@ class CredentialVaultItemUpdateRequest(TypedDict, total=False):
4668
"""
4769

4870

49-
ItemUpdateParams: TypeAlias = Union[CardVaultItemUpdateRequest, CredentialVaultItemUpdateRequest]
71+
ItemUpdateParams: TypeAlias = Union[
72+
CardVaultItemUpdateRequest, PaymentRequestVaultItemUpdateRequest, CredentialVaultItemUpdateRequest
73+
]

0 commit comments

Comments
 (0)