@primitivedotdev/sdk 1.27.0 → 1.29.0

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.
@@ -45,6 +45,10 @@ const openapiDocument = {
45
45
  "name": "Account",
46
46
  "description": "Manage your account settings, storage, and webhook secret"
47
47
  },
48
+ {
49
+ "name": "Credits",
50
+ "description": "Redeem credit codes and read the organization credit balance"
51
+ },
48
52
  {
49
53
  "name": "Domains",
50
54
  "description": "Claim, verify, and manage email domains"
@@ -649,6 +653,129 @@ const openapiDocument = {
649
653
  "429": { "$ref": "#/components/responses/RateLimited" }
650
654
  }
651
655
  } },
656
+ "/credits/redeem": { "post": {
657
+ "operationId": "redeemCreditCode",
658
+ "summary": "Redeem a credit code",
659
+ "description": "Redeem a credit code for the authenticated organization. The credit is\nadded to the organization prepaid credit and shows in\n`GET /credits/balance` under `prepaid_credit`.\n\nRedeeming requires an organization owner or admin. An API key redeems\nwith the authority of the user who created it, based on that user's\ncurrent role; a key without that authority gets the same\n`credit_code_invalid` refusal as an unknown code.\n\nThe `Idempotency-Key` header is required. Retrying with the same key\nand code returns the original grant with `replayed: true` and grants\nnothing new; the same key with a different code is refused with\n`idempotency_key_reused`. Every refusal carries a human-readable\n`error.message` that can be shown to the user as is.\n",
660
+ "tags": ["Credits"],
661
+ "parameters": [{
662
+ "name": "Idempotency-Key",
663
+ "in": "header",
664
+ "required": true,
665
+ "description": "Required client-supplied key: 1 to 200 printable ASCII\ncharacters, without spaces. Use a new key for each code you\nredeem and reuse it only to retry the same request.\n",
666
+ "schema": {
667
+ "type": "string",
668
+ "minLength": 1,
669
+ "maxLength": 200,
670
+ "pattern": "^[\\x21-\\x7E]{1,200}$"
671
+ }
672
+ }],
673
+ "requestBody": {
674
+ "required": true,
675
+ "content": { "application/json": {
676
+ "schema": { "$ref": "#/components/schemas/RedeemCreditCodeInput" },
677
+ "example": { "code": "LAUNCH50" }
678
+ } }
679
+ },
680
+ "responses": {
681
+ "200": {
682
+ "description": "The code was redeemed, or this request replayed an earlier\nredemption with the same Idempotency-Key.\n",
683
+ "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, {
684
+ "type": "object",
685
+ "properties": { "data": { "$ref": "#/components/schemas/CreditRedemption" } }
686
+ }] } } }
687
+ },
688
+ "400": {
689
+ "description": "`idempotency_key_required` means the Idempotency-Key header is\nmissing. `validation_error` means the header is empty, longer than\n200 characters or not printable non-space ASCII, or the body is\ninvalid.\n",
690
+ "content": { "application/json": {
691
+ "schema": { "$ref": "#/components/schemas/ErrorResponse" },
692
+ "example": {
693
+ "success": false,
694
+ "error": {
695
+ "code": "idempotency_key_required",
696
+ "message": "an Idempotency-Key header is required"
697
+ }
698
+ }
699
+ } }
700
+ },
701
+ "401": { "$ref": "#/components/responses/Unauthorized" },
702
+ "403": { "$ref": "#/components/responses/Forbidden" },
703
+ "409": {
704
+ "description": "The organization or user already redeemed this code, or already\nredeemed another code in the same exclusive group (a set of codes\nof which each organization or user may redeem only one).\n`error.code` is `credit_code_already_redeemed`.\n",
705
+ "content": { "application/json": {
706
+ "schema": { "$ref": "#/components/schemas/ErrorResponse" },
707
+ "example": {
708
+ "success": false,
709
+ "error": {
710
+ "code": "credit_code_already_redeemed",
711
+ "message": "Your organization has already redeemed this promotion."
712
+ }
713
+ }
714
+ } }
715
+ },
716
+ "422": {
717
+ "description": "The code cannot be redeemed. `credit_code_invalid` covers unknown,\nexpired and exhausted codes and callers without authority to\nredeem; `credit_code_not_eligible` means the organization does not\nmeet the promotion terms; `credit_code_balance_cap` means the\norganization already holds the most promotional credit it can;\n`idempotency_key_reused` means this Idempotency-Key already\nredeemed a different code.\n",
718
+ "content": { "application/json": {
719
+ "schema": { "$ref": "#/components/schemas/ErrorResponse" },
720
+ "example": {
721
+ "success": false,
722
+ "error": {
723
+ "code": "credit_code_invalid",
724
+ "message": "That code isn't valid or is no longer available."
725
+ }
726
+ }
727
+ } }
728
+ },
729
+ "429": {
730
+ "description": "Too many requests or redemption attempts. `error.code` is\n`rate_limited`. Wait for `Retry-After` when present. Like other\nrate-limited responses, it also carries the `ratelimit-limit`,\n`ratelimit-remaining`, `ratelimit-reset` and `ratelimit-policy`\nquota headers when the limiter reports them.\n",
731
+ "headers": { "Retry-After": {
732
+ "schema": { "type": "integer" },
733
+ "description": "Seconds to wait before retrying"
734
+ } },
735
+ "content": { "application/json": {
736
+ "schema": { "$ref": "#/components/schemas/ErrorResponse" },
737
+ "example": {
738
+ "success": false,
739
+ "error": {
740
+ "code": "rate_limited",
741
+ "message": "Rate limit exceeded. Try again shortly."
742
+ }
743
+ }
744
+ } }
745
+ },
746
+ "503": {
747
+ "description": "The code could not be redeemed right now. Retry later with the\nsame Idempotency-Key. `error.code` is `service_unavailable`.\n",
748
+ "content": { "application/json": {
749
+ "schema": { "$ref": "#/components/schemas/ErrorResponse" },
750
+ "example": {
751
+ "success": false,
752
+ "error": {
753
+ "code": "service_unavailable",
754
+ "message": "We couldn't redeem that code right now. Try again in a few minutes."
755
+ }
756
+ }
757
+ } }
758
+ }
759
+ }
760
+ } },
761
+ "/credits/balance": { "get": {
762
+ "operationId": "getCreditBalance",
763
+ "summary": "Get credit balance",
764
+ "description": "Read the organization credit position. `prepaid_credit` is the prepaid\nusage credit (paid top-ups, redeemed credit codes and granted credit)\nthat can still pay for usage. `budget` is the active agent spending\nbudget an operator funded for top-ups, or null when there is none.\nAmounts are strings of integer micros (1 USD = 1000000 micros).\n",
765
+ "tags": ["Credits"],
766
+ "responses": {
767
+ "200": {
768
+ "description": "The organization credit balance.",
769
+ "content": { "application/json": { "schema": { "allOf": [{ "$ref": "#/components/schemas/SuccessEnvelope" }, {
770
+ "type": "object",
771
+ "properties": { "data": { "$ref": "#/components/schemas/CreditBalance" } }
772
+ }] } } }
773
+ },
774
+ "401": { "$ref": "#/components/responses/Unauthorized" },
775
+ "403": { "$ref": "#/components/responses/Forbidden" },
776
+ "429": { "$ref": "#/components/responses/RateLimited" }
777
+ }
778
+ } },
652
779
  "/domains": {
653
780
  "get": {
654
781
  "operationId": "listDomains",
@@ -1483,7 +1610,7 @@ const openapiDocument = {
1483
1610
  "post": {
1484
1611
  "operationId": "createEndpoint",
1485
1612
  "summary": "Create a webhook endpoint",
1486
- "description": "Creates a new webhook endpoint. If a deactivated endpoint\nwith the same URL and domain exists, it is reactivated\ninstead. Subject to plan limits on the number of active\nendpoints.\n\n**Signing is account-scoped, not per-endpoint.** This call\ndoes not return any signing material; every endpoint on the\naccount uses the same webhook secret, fetched via\n`GET /account/webhook-secret`. See the API-level \"Webhook\nsigning\" section for the full wire format (header name,\nsigned string, hash algo, secret format, tolerance) and a\nlanguage-agnostic verification recipe.\n\nAfter creating the endpoint, fire a test delivery against\nit via `POST /endpoints/{id}/test` to confirm your verifier\naccepts the signature.\n\n\nFor local receiving, use kind=pull and a stable name, without url, function_id or domain_id. Named creation resumes the same active destination; omitted filters preserve its selection, while conflicting supplied configuration returns 409. New unfiltered destinations receive all subsequently ready eligible event types. Pull destinations do not occupy HTTP routing slots. Signing-secret setup and a test HTTP delivery are not required for pull receiving.",
1613
+ "description": "Creates a new webhook endpoint. If a deactivated endpoint\nwith the same URL and domain exists, it is reactivated\ninstead. Subject to plan limits on the number of active\nendpoints.\n\n**Signing is account-scoped, not per-endpoint.** This call\ndoes not return any signing material; every endpoint on the\naccount uses the same webhook secret, fetched via\n`GET /account/webhook-secret`. See the API-level \"Webhook\nsigning\" section for the full wire format (header name,\nsigned string, hash algo, secret format, tolerance) and a\nlanguage-agnostic verification recipe.\n\nAfter creating the endpoint, fire a test delivery against\nit via `POST /endpoints/{id}/test` to confirm your verifier\naccepts the signature.\n\n\nFor local receiving, use kind=pull and a stable name, without url, function_id or domain_id. Named creation resumes the same active destination; omitted filters preserve its selection, while conflicting supplied configuration returns 409. New unfiltered destinations receive all subsequently ready eligible event types within their credential scope. Connected-agent credentials automatically create private subscriptions restricted to inbound email for their assigned address. Names are isolated per credential; revocation or replacement deletes its subscriptions. Address-scoped events contain parsed mail without raw MIME, signed download links, routing metadata, or sibling envelope recipients. Pull destinations do not occupy HTTP routing slots. Signing-secret setup and a test HTTP delivery are not required for pull receiving.",
1487
1614
  "tags": ["Endpoints"],
1488
1615
  "requestBody": {
1489
1616
  "required": true,
@@ -5337,7 +5464,15 @@ const openapiDocument = {
5337
5464
  "event_content_unavailable",
5338
5465
  "event_preparation_failed",
5339
5466
  "subscription_unavailable",
5340
- "stale_delivery"
5467
+ "stale_delivery",
5468
+ "idempotency_key_required",
5469
+ "idempotency_key_reused",
5470
+ "credit_code_invalid",
5471
+ "credit_code_already_redeemed",
5472
+ "credit_code_not_eligible",
5473
+ "credit_code_balance_cap",
5474
+ "rate_limited",
5475
+ "service_unavailable"
5341
5476
  ]
5342
5477
  },
5343
5478
  "message": { "type": "string" },
@@ -6303,6 +6438,148 @@ const openapiDocument = {
6303
6438
  } },
6304
6439
  "required": ["secret"]
6305
6440
  },
6441
+ "RedeemCreditCodeInput": {
6442
+ "type": "object",
6443
+ "additionalProperties": false,
6444
+ "required": ["code"],
6445
+ "properties": { "code": {
6446
+ "type": "string",
6447
+ "pattern": "^\\s*\\S(?:[\\s\\S]{0,254}\\S)?\\s*$",
6448
+ "description": "The credit code to redeem. Surrounding whitespace is ignored; the\nrest must be 1 to 256 characters.\n"
6449
+ } }
6450
+ },
6451
+ "CreditRedemption": {
6452
+ "type": "object",
6453
+ "additionalProperties": false,
6454
+ "required": [
6455
+ "redemption_id",
6456
+ "amount_micros",
6457
+ "currency",
6458
+ "granted_at",
6459
+ "expires_at",
6460
+ "label",
6461
+ "replayed",
6462
+ "message"
6463
+ ],
6464
+ "properties": {
6465
+ "redemption_id": {
6466
+ "type": "string",
6467
+ "description": "Identifier of the redemption."
6468
+ },
6469
+ "amount_micros": {
6470
+ "type": "string",
6471
+ "pattern": "^[0-9]+$",
6472
+ "description": "Credit granted, in micros of `currency` (1 USD = 1000000 micros)."
6473
+ },
6474
+ "currency": {
6475
+ "type": "string",
6476
+ "description": "Currency of the granted credit, for example `usd`."
6477
+ },
6478
+ "granted_at": {
6479
+ "type": "string",
6480
+ "format": "date-time",
6481
+ "description": "When the credit was granted."
6482
+ },
6483
+ "expires_at": {
6484
+ "type": ["string", "null"],
6485
+ "format": "date-time",
6486
+ "description": "When the granted credit expires, or null when it does not expire."
6487
+ },
6488
+ "label": {
6489
+ "type": ["string", "null"],
6490
+ "description": "Customer-facing label of the promotion, when it has one."
6491
+ },
6492
+ "replayed": {
6493
+ "type": "boolean",
6494
+ "description": "True when this Idempotency-Key already redeemed this code and the\noriginal grant is returned. No second grant is made.\n"
6495
+ },
6496
+ "message": {
6497
+ "type": "string",
6498
+ "description": "Human-readable summary of the grant, suitable to show as is."
6499
+ }
6500
+ }
6501
+ },
6502
+ "CreditBalance": {
6503
+ "type": "object",
6504
+ "required": ["budget"],
6505
+ "properties": {
6506
+ "budget": {
6507
+ "description": "The active agent spending budget an operator funded for top-ups,\nor null when there is none.\n",
6508
+ "type": ["object", "null"],
6509
+ "additionalProperties": false,
6510
+ "required": [
6511
+ "currency",
6512
+ "max_amount_micros",
6513
+ "spent_micros",
6514
+ "remaining_micros",
6515
+ "per_topup_cap_micros",
6516
+ "expires_at",
6517
+ "status"
6518
+ ],
6519
+ "properties": {
6520
+ "currency": {
6521
+ "type": "string",
6522
+ "description": "Currency of the budget, for example `usd`."
6523
+ },
6524
+ "max_amount_micros": {
6525
+ "type": "string",
6526
+ "pattern": "^[0-9]+$",
6527
+ "description": "Total allowance the operator funded, in micros."
6528
+ },
6529
+ "spent_micros": {
6530
+ "type": "string",
6531
+ "pattern": "^[0-9]+$",
6532
+ "description": "How much of the allowance has been drawn down, in micros."
6533
+ },
6534
+ "remaining_micros": {
6535
+ "type": "string",
6536
+ "pattern": "^[0-9]+$",
6537
+ "description": "`max_amount_micros - spent_micros`, floored at zero."
6538
+ },
6539
+ "per_topup_cap_micros": {
6540
+ "type": ["string", "null"],
6541
+ "pattern": "^[0-9]+$",
6542
+ "description": "Largest single top-up allowed, in micros, or null for no per-top-up cap."
6543
+ },
6544
+ "expires_at": {
6545
+ "type": ["string", "null"],
6546
+ "format": "date-time",
6547
+ "description": "When the allowance expires, or null for no expiry."
6548
+ },
6549
+ "status": {
6550
+ "type": "string",
6551
+ "description": "Budget status. An active budget reads `active`."
6552
+ }
6553
+ }
6554
+ },
6555
+ "prepaid_credit": {
6556
+ "description": "Prepaid usage credit (top-ups, redeemed credit codes and granted\ncredit) that can still pay for usage, or null when there is none.\nOmitted when an exact figure cannot be given right now; the budget\nis still returned.\n",
6557
+ "type": ["object", "null"],
6558
+ "additionalProperties": false,
6559
+ "required": [
6560
+ "currency",
6561
+ "remaining_micros",
6562
+ "next_expires_at"
6563
+ ],
6564
+ "properties": {
6565
+ "currency": {
6566
+ "type": "string",
6567
+ "description": "Currency of the credit, which is the organization billing currency."
6568
+ },
6569
+ "remaining_micros": {
6570
+ "type": "string",
6571
+ "pattern": "^[0-9]+$",
6572
+ "description": "What the credit can still pay for, in micros."
6573
+ },
6574
+ "next_expires_at": {
6575
+ "type": ["string", "null"],
6576
+ "format": "date-time",
6577
+ "description": "Earliest expiry among credits with a balance, or null when none of them expires."
6578
+ }
6579
+ }
6580
+ }
6581
+ }
6582
+ },
6306
6583
  "InboxStatus": {
6307
6584
  "type": "object",
6308
6585
  "additionalProperties": false,
@@ -8906,6 +9183,10 @@ const openapiDocument = {
8906
9183
  "Endpoint": {
8907
9184
  "type": "object",
8908
9185
  "properties": {
9186
+ "recipient": {
9187
+ "type": ["string", "null"],
9188
+ "description": "Server-enforced recipient for an address-scoped pull subscription; null for account-wide receiving."
9189
+ },
8909
9190
  "receiver_capabilities": {
8910
9191
  "type": "object",
8911
9192
  "properties": {
@@ -12741,6 +13022,181 @@ const operationManifest = [
12741
13022
  "tag": "CLI",
12742
13023
  "tagCommand": "cli"
12743
13024
  },
13025
+ {
13026
+ "binaryResponse": false,
13027
+ "bodyRequired": false,
13028
+ "command": "get-credit-balance",
13029
+ "description": "Read the organization credit position. `prepaid_credit` is the prepaid\nusage credit (paid top-ups, redeemed credit codes and granted credit)\nthat can still pay for usage. `budget` is the active agent spending\nbudget an operator funded for top-ups, or null when there is none.\nAmounts are strings of integer micros (1 USD = 1000000 micros).\n",
13030
+ "hasJsonBody": false,
13031
+ "method": "GET",
13032
+ "operationId": "getCreditBalance",
13033
+ "path": "/credits/balance",
13034
+ "pathParams": [],
13035
+ "queryParams": [],
13036
+ "requestSchema": null,
13037
+ "responseSchema": {
13038
+ "type": "object",
13039
+ "required": ["budget"],
13040
+ "properties": {
13041
+ "budget": {
13042
+ "description": "The active agent spending budget an operator funded for top-ups,\nor null when there is none.\n",
13043
+ "type": ["object", "null"],
13044
+ "additionalProperties": false,
13045
+ "required": [
13046
+ "currency",
13047
+ "max_amount_micros",
13048
+ "spent_micros",
13049
+ "remaining_micros",
13050
+ "per_topup_cap_micros",
13051
+ "expires_at",
13052
+ "status"
13053
+ ],
13054
+ "properties": {
13055
+ "currency": {
13056
+ "type": "string",
13057
+ "description": "Currency of the budget, for example `usd`."
13058
+ },
13059
+ "max_amount_micros": {
13060
+ "type": "string",
13061
+ "pattern": "^[0-9]+$",
13062
+ "description": "Total allowance the operator funded, in micros."
13063
+ },
13064
+ "spent_micros": {
13065
+ "type": "string",
13066
+ "pattern": "^[0-9]+$",
13067
+ "description": "How much of the allowance has been drawn down, in micros."
13068
+ },
13069
+ "remaining_micros": {
13070
+ "type": "string",
13071
+ "pattern": "^[0-9]+$",
13072
+ "description": "`max_amount_micros - spent_micros`, floored at zero."
13073
+ },
13074
+ "per_topup_cap_micros": {
13075
+ "type": ["string", "null"],
13076
+ "pattern": "^[0-9]+$",
13077
+ "description": "Largest single top-up allowed, in micros, or null for no per-top-up cap."
13078
+ },
13079
+ "expires_at": {
13080
+ "type": ["string", "null"],
13081
+ "format": "date-time",
13082
+ "description": "When the allowance expires, or null for no expiry."
13083
+ },
13084
+ "status": {
13085
+ "type": "string",
13086
+ "description": "Budget status. An active budget reads `active`."
13087
+ }
13088
+ }
13089
+ },
13090
+ "prepaid_credit": {
13091
+ "description": "Prepaid usage credit (top-ups, redeemed credit codes and granted\ncredit) that can still pay for usage, or null when there is none.\nOmitted when an exact figure cannot be given right now; the budget\nis still returned.\n",
13092
+ "type": ["object", "null"],
13093
+ "additionalProperties": false,
13094
+ "required": [
13095
+ "currency",
13096
+ "remaining_micros",
13097
+ "next_expires_at"
13098
+ ],
13099
+ "properties": {
13100
+ "currency": {
13101
+ "type": "string",
13102
+ "description": "Currency of the credit, which is the organization billing currency."
13103
+ },
13104
+ "remaining_micros": {
13105
+ "type": "string",
13106
+ "pattern": "^[0-9]+$",
13107
+ "description": "What the credit can still pay for, in micros."
13108
+ },
13109
+ "next_expires_at": {
13110
+ "type": ["string", "null"],
13111
+ "format": "date-time",
13112
+ "description": "Earliest expiry among credits with a balance, or null when none of them expires."
13113
+ }
13114
+ }
13115
+ }
13116
+ }
13117
+ },
13118
+ "sdkName": "getCreditBalance",
13119
+ "summary": "Get credit balance",
13120
+ "tag": "Credits",
13121
+ "tagCommand": "credits"
13122
+ },
13123
+ {
13124
+ "binaryResponse": false,
13125
+ "bodyRequired": true,
13126
+ "command": "redeem-credit-code",
13127
+ "description": "Redeem a credit code for the authenticated organization. The credit is\nadded to the organization prepaid credit and shows in\n`GET /credits/balance` under `prepaid_credit`.\n\nRedeeming requires an organization owner or admin. An API key redeems\nwith the authority of the user who created it, based on that user's\ncurrent role; a key without that authority gets the same\n`credit_code_invalid` refusal as an unknown code.\n\nThe `Idempotency-Key` header is required. Retrying with the same key\nand code returns the original grant with `replayed: true` and grants\nnothing new; the same key with a different code is refused with\n`idempotency_key_reused`. Every refusal carries a human-readable\n`error.message` that can be shown to the user as is.\n",
13128
+ "hasJsonBody": true,
13129
+ "method": "POST",
13130
+ "operationId": "redeemCreditCode",
13131
+ "path": "/credits/redeem",
13132
+ "pathParams": [],
13133
+ "queryParams": [],
13134
+ "requestSchema": {
13135
+ "type": "object",
13136
+ "additionalProperties": false,
13137
+ "required": ["code"],
13138
+ "properties": { "code": {
13139
+ "type": "string",
13140
+ "pattern": "^\\s*\\S(?:[\\s\\S]{0,254}\\S)?\\s*$",
13141
+ "description": "The credit code to redeem. Surrounding whitespace is ignored; the\nrest must be 1 to 256 characters.\n"
13142
+ } }
13143
+ },
13144
+ "responseSchema": {
13145
+ "type": "object",
13146
+ "additionalProperties": false,
13147
+ "required": [
13148
+ "redemption_id",
13149
+ "amount_micros",
13150
+ "currency",
13151
+ "granted_at",
13152
+ "expires_at",
13153
+ "label",
13154
+ "replayed",
13155
+ "message"
13156
+ ],
13157
+ "properties": {
13158
+ "redemption_id": {
13159
+ "type": "string",
13160
+ "description": "Identifier of the redemption."
13161
+ },
13162
+ "amount_micros": {
13163
+ "type": "string",
13164
+ "pattern": "^[0-9]+$",
13165
+ "description": "Credit granted, in micros of `currency` (1 USD = 1000000 micros)."
13166
+ },
13167
+ "currency": {
13168
+ "type": "string",
13169
+ "description": "Currency of the granted credit, for example `usd`."
13170
+ },
13171
+ "granted_at": {
13172
+ "type": "string",
13173
+ "format": "date-time",
13174
+ "description": "When the credit was granted."
13175
+ },
13176
+ "expires_at": {
13177
+ "type": ["string", "null"],
13178
+ "format": "date-time",
13179
+ "description": "When the granted credit expires, or null when it does not expire."
13180
+ },
13181
+ "label": {
13182
+ "type": ["string", "null"],
13183
+ "description": "Customer-facing label of the promotion, when it has one."
13184
+ },
13185
+ "replayed": {
13186
+ "type": "boolean",
13187
+ "description": "True when this Idempotency-Key already redeemed this code and the\noriginal grant is returned. No second grant is made.\n"
13188
+ },
13189
+ "message": {
13190
+ "type": "string",
13191
+ "description": "Human-readable summary of the grant, suitable to show as is."
13192
+ }
13193
+ }
13194
+ },
13195
+ "sdkName": "redeemCreditCode",
13196
+ "summary": "Redeem a credit code",
13197
+ "tag": "Credits",
13198
+ "tagCommand": "credits"
13199
+ },
12744
13200
  {
12745
13201
  "binaryResponse": false,
12746
13202
  "bodyRequired": true,
@@ -15334,7 +15790,7 @@ const operationManifest = [
15334
15790
  "binaryResponse": false,
15335
15791
  "bodyRequired": true,
15336
15792
  "command": "create-endpoint",
15337
- "description": "Creates a new webhook endpoint. If a deactivated endpoint\nwith the same URL and domain exists, it is reactivated\ninstead. Subject to plan limits on the number of active\nendpoints.\n\n**Signing is account-scoped, not per-endpoint.** This call\ndoes not return any signing material; every endpoint on the\naccount uses the same webhook secret, fetched via\n`GET /account/webhook-secret`. See the API-level \"Webhook\nsigning\" section for the full wire format (header name,\nsigned string, hash algo, secret format, tolerance) and a\nlanguage-agnostic verification recipe.\n\nAfter creating the endpoint, fire a test delivery against\nit via `POST /endpoints/{id}/test` to confirm your verifier\naccepts the signature.\n\n\nFor local receiving, use kind=pull and a stable name, without url, function_id or domain_id. Named creation resumes the same active destination; omitted filters preserve its selection, while conflicting supplied configuration returns 409. New unfiltered destinations receive all subsequently ready eligible event types. Pull destinations do not occupy HTTP routing slots. Signing-secret setup and a test HTTP delivery are not required for pull receiving.",
15793
+ "description": "Creates a new webhook endpoint. If a deactivated endpoint\nwith the same URL and domain exists, it is reactivated\ninstead. Subject to plan limits on the number of active\nendpoints.\n\n**Signing is account-scoped, not per-endpoint.** This call\ndoes not return any signing material; every endpoint on the\naccount uses the same webhook secret, fetched via\n`GET /account/webhook-secret`. See the API-level \"Webhook\nsigning\" section for the full wire format (header name,\nsigned string, hash algo, secret format, tolerance) and a\nlanguage-agnostic verification recipe.\n\nAfter creating the endpoint, fire a test delivery against\nit via `POST /endpoints/{id}/test` to confirm your verifier\naccepts the signature.\n\n\nFor local receiving, use kind=pull and a stable name, without url, function_id or domain_id. Named creation resumes the same active destination; omitted filters preserve its selection, while conflicting supplied configuration returns 409. New unfiltered destinations receive all subsequently ready eligible event types within their credential scope. Connected-agent credentials automatically create private subscriptions restricted to inbound email for their assigned address. Names are isolated per credential; revocation or replacement deletes its subscriptions. Address-scoped events contain parsed mail without raw MIME, signed download links, routing metadata, or sibling envelope recipients. Pull destinations do not occupy HTTP routing slots. Signing-secret setup and a test HTTP delivery are not required for pull receiving.",
15338
15794
  "hasJsonBody": true,
15339
15795
  "method": "POST",
15340
15796
  "operationId": "createEndpoint",
@@ -15402,6 +15858,10 @@ const operationManifest = [
15402
15858
  "responseSchema": {
15403
15859
  "type": "object",
15404
15860
  "properties": {
15861
+ "recipient": {
15862
+ "type": ["string", "null"],
15863
+ "description": "Server-enforced recipient for an address-scoped pull subscription; null for account-wide receiving."
15864
+ },
15405
15865
  "receiver_capabilities": {
15406
15866
  "type": "object",
15407
15867
  "properties": {
@@ -15578,6 +16038,10 @@ const operationManifest = [
15578
16038
  "items": {
15579
16039
  "type": "object",
15580
16040
  "properties": {
16041
+ "recipient": {
16042
+ "type": ["string", "null"],
16043
+ "description": "Server-enforced recipient for an address-scoped pull subscription; null for account-wide receiving."
16044
+ },
15581
16045
  "receiver_capabilities": {
15582
16046
  "type": "object",
15583
16047
  "properties": {
@@ -16044,6 +16508,10 @@ const operationManifest = [
16044
16508
  "responseSchema": {
16045
16509
  "type": "object",
16046
16510
  "properties": {
16511
+ "recipient": {
16512
+ "type": ["string", "null"],
16513
+ "description": "Server-enforced recipient for an address-scoped pull subscription; null for account-wide receiving."
16514
+ },
16047
16515
  "receiver_capabilities": {
16048
16516
  "type": "object",
16049
16517
  "properties": {
@@ -1,4 +1,4 @@
1
- import { I as WebhookAttachment, l as EmailAddress, w as ParsedDataComplete } from "../types-DcXtFARL.js";
1
+ import { I as WebhookAttachment, l as EmailAddress, w as ParsedDataComplete } from "../types-Rn4qu5Q7.js";
2
2
  import { a as parseFromHeader, i as ValidatedAddress, n as ParseFromHeaderResult, o as parseFromHeaderLoose, r as ParsedAddress, t as ParseFromHeaderFailureReason } from "../address-parser-B7L4E0zP.js";
3
3
 
4
4
  //#region src/parser/attachment-parser.d.ts