recurly 4.12.0 → 4.15.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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.bumpversion.cfg +1 -1
  3. data/CHANGELOG.md +34 -0
  4. data/GETTING_STARTED.md +9 -1
  5. data/lib/recurly/client/operations.rb +209 -136
  6. data/lib/recurly/client.rb +14 -2
  7. data/lib/recurly/errors/api_errors.rb +2 -0
  8. data/lib/recurly/requests/account_create.rb +1 -1
  9. data/lib/recurly/requests/account_purchase.rb +1 -1
  10. data/lib/recurly/requests/account_update.rb +1 -1
  11. data/lib/recurly/requests/add_on_create.rb +5 -1
  12. data/lib/recurly/requests/add_on_update.rb +5 -1
  13. data/lib/recurly/requests/billing_info_create.rb +8 -0
  14. data/lib/recurly/requests/percentage_tier.rb +18 -0
  15. data/lib/recurly/requests/percentage_tiers_by_currency.rb +18 -0
  16. data/lib/recurly/requests/plan_create.rb +1 -1
  17. data/lib/recurly/requests/plan_update.rb +1 -1
  18. data/lib/recurly/requests/subscription_add_on_create.rb +5 -1
  19. data/lib/recurly/requests/subscription_add_on_percentage_tier.rb +18 -0
  20. data/lib/recurly/requests/subscription_add_on_tier.rb +1 -1
  21. data/lib/recurly/requests/subscription_update.rb +1 -1
  22. data/lib/recurly/requests/tier.rb +2 -2
  23. data/lib/recurly/resources/account.rb +4 -4
  24. data/lib/recurly/resources/account_mini.rb +1 -1
  25. data/lib/recurly/resources/add_on.rb +4 -0
  26. data/lib/recurly/resources/invoice.rb +5 -1
  27. data/lib/recurly/resources/invoice_template.rb +34 -0
  28. data/lib/recurly/resources/percentage_tier.rb +18 -0
  29. data/lib/recurly/resources/{account_invoice_template.rb → percentage_tiers_by_currency.rb} +7 -7
  30. data/lib/recurly/resources/plan.rb +1 -1
  31. data/lib/recurly/resources/subscription_add_on.rb +5 -1
  32. data/lib/recurly/resources/subscription_add_on_percentage_tier.rb +18 -0
  33. data/lib/recurly/resources/subscription_add_on_tier.rb +1 -1
  34. data/lib/recurly/resources/tier.rb +2 -2
  35. data/lib/recurly/resources/usage.rb +5 -1
  36. data/lib/recurly/version.rb +1 -1
  37. data/openapi/api.yaml +552 -71
  38. metadata +10 -4
data/openapi/api.yaml CHANGED
@@ -14265,11 +14265,286 @@ paths:
14265
14265
  var_dump($e);
14266
14266
  }
14267
14267
  - lang: Go
14268
- source: "collection, err := client.PreviewPurchase(purchaseReq)\nif e, ok
14269
- := err.(*recurly.Error); ok {\n\tif e.Type == recurly.ErrorTypeValidation
14270
- {\n\t\tfmt.Printf(\"Failed validation: %v\", e)\n\t\treturn nil, err\n\t}\n\tfmt.Printf(\"Unexpected
14268
+ source: "purchaseReq := &recurly.PurchaseCreate{\n\tCurrency: recurly.String(\"USD\"),\n\tAccount:
14269
+ &recurly.AccountPurchase{\n\t\tCode: recurly.String(account.Code),\n\t},\n\tSubscriptions:
14270
+ []recurly.SubscriptionPurchase{\n\t\t{\n\t\t\tPlanCode: recurly.String(plan.Code),\n\t\t\tNextBillDate:
14271
+ recurly.Time(time.Date(2078, time.November, 10, 23, 0, 0, 0, time.UTC)),\n\t\t},\n\t},\n\tShipping:
14272
+ &recurly.ShippingPurchase{\n\t\tAddressId: recurly.String(shippingAddressID),\n\t},\n}\ncollection,
14273
+ err := client.PreviewPurchase(purchaseReq)\nif e, ok := err.(*recurly.Error);
14274
+ ok {\n\tif e.Type == recurly.ErrorTypeValidation {\n\t\tfmt.Printf(\"Failed
14275
+ validation: %v\", e)\n\t\treturn nil, err\n\t}\n\tfmt.Printf(\"Unexpected
14271
14276
  Recurly error: %v\", e)\n\treturn nil, err\n}\nfmt.Printf(\"Preview Charge
14272
14277
  Invoice %v\", collection.ChargeInvoice)"
14278
+ "/purchases/pending":
14279
+ post:
14280
+ tags:
14281
+ - purchase
14282
+ operationId: create_pending_purchase
14283
+ summary: Create a pending purchase
14284
+ description: |-
14285
+ A purchase is a hybrid checkout containing at least one or more subscriptions or one-time charges (adjustments) and supports both coupon and gift card redemptions. All items purchased will be on one invoice and paid for with one transaction. A purchase is only a request data type and is not persistent in Recurly and an invoice collection will be the returned type.
14286
+
14287
+ Use for **Adyen HPP** and **Online Banking** transaction requests.
14288
+ This runs the validations but not the transactions.
14289
+ The API request allows the inclusion of one of the following fields: **external_hpp_type** with `'adyen'` and **online_banking_payment_type** with `'ideal'` or `'sofort'` in the **billing_info** object.
14290
+
14291
+ For additional information regarding shipping fees, please see https://docs.recurly.com/docs/shipping
14292
+ requestBody:
14293
+ content:
14294
+ application/json:
14295
+ schema:
14296
+ "$ref": "#/components/schemas/PurchaseCreate"
14297
+ required: true
14298
+ responses:
14299
+ '200':
14300
+ description: Returns the pending invoice
14301
+ content:
14302
+ application/json:
14303
+ schema:
14304
+ "$ref": "#/components/schemas/InvoiceCollection"
14305
+ '400':
14306
+ description: Bad request; perhaps missing or invalid parameters.
14307
+ content:
14308
+ application/json:
14309
+ schema:
14310
+ "$ref": "#/components/schemas/Error"
14311
+ '422':
14312
+ description: Pending purchase cannot be completed for the specified reason.
14313
+ content:
14314
+ application/json:
14315
+ schema:
14316
+ "$ref": "#/components/schemas/Error"
14317
+ default:
14318
+ description: Unexpected error.
14319
+ content:
14320
+ application/json:
14321
+ schema:
14322
+ "$ref": "#/components/schemas/Error"
14323
+ x-code-samples:
14324
+ - lang: Node.js
14325
+ source: |
14326
+ try {
14327
+ const purchaseReq = {
14328
+ currency: 'EUR',
14329
+ account: {
14330
+ code: accountCode,
14331
+ email: 'example@recurly.com',
14332
+ billingInfo: {
14333
+ firstName: 'Benjamin',
14334
+ lastName: 'Du Monde',
14335
+ onlineBankingPaymentType: 'ideal'
14336
+ },
14337
+ },
14338
+ lineItems: [
14339
+ {
14340
+ currency: 'EUR',
14341
+ unitAmount: 1000,
14342
+ type: 'charge'
14343
+ }
14344
+ ]
14345
+ };
14346
+ const invoiceCollection = await client.createPendingPurchase(purchaseReq)
14347
+ console.log('Created ChargeInvoice with UUID: ', invoiceCollection.chargeInvoice.uuid)
14348
+ } catch (err) {
14349
+ if (err instanceof recurly.errors.ValidationError) {
14350
+ // If the request was not valid, you may want to tell your user
14351
+ // why. You can find the invalid params and reasons in err.params
14352
+ console.log('Failed validation', err.params)
14353
+ } else {
14354
+ // If we don't know what to do with the err, we should
14355
+ // probably re-raise and let our web framework and logger handle it
14356
+ console.log('Unknown Error: ', err)
14357
+ }
14358
+ }
14359
+ - lang: Python
14360
+ source: |
14361
+ try:
14362
+ purchase = {
14363
+ "currency": "EUR",
14364
+ "account": {
14365
+ "code": account_code,
14366
+ "email": "benjamin@example.com",
14367
+ "billing_info": {
14368
+ "first_name": "Benjamin",
14369
+ "last_name": "Du Monde",
14370
+ "online_banking_payment_type": "ideal"
14371
+ }
14372
+ },
14373
+ "line_items": [
14374
+ {
14375
+ "currency": "EUR",
14376
+ "unit_amount": 1000,
14377
+ "type": "charge"
14378
+ }
14379
+ ],
14380
+ }
14381
+ invoice_collection = client.create_pending_purchase(purchase)
14382
+ print("Created ChargeInvoice with UUID %s" % invoice_collection.charge_invoice.uuid)
14383
+ except recurly.errors.ValidationError as e:
14384
+ # If the request was invalid, you may want to tell your user
14385
+ # why. You can find the invalid params and reasons in e.error.params
14386
+ print("ValidationError: %s" % e.error.message)
14387
+ print(e.error.params)
14388
+ - lang: ".NET"
14389
+ source: |
14390
+ try
14391
+ {
14392
+ var purchaseReq = new PurchaseCreate()
14393
+ {
14394
+ Currency = "EUR",
14395
+ Account = new AccountPurchase()
14396
+ {
14397
+ Code = accountCode,
14398
+ Email = "benjamin@example.com",
14399
+ BillingInfo = new BillingInfoCreate()
14400
+ {
14401
+ FirstName = "Benjamin",
14402
+ LastName = "Du Monde",
14403
+ OnlineBankingPaymentType = OnlineBankingPaymentType.Ideal
14404
+ }
14405
+ },
14406
+ LineItems = new List<LineItemCreate>()
14407
+ {
14408
+ new LineItemCreate()
14409
+ {
14410
+ Currency = "EUR",
14411
+ UnitAmount = 1000,
14412
+ Type = LineItemType.Charge
14413
+ }
14414
+ }
14415
+ };
14416
+ InvoiceCollection collection = client.CreatePendingPurchase(purchaseReq);
14417
+ Console.WriteLine($"Created ChargeInvoice with UUID: {collection.ChargeInvoice.Uuid}");
14418
+ }
14419
+ catch (Recurly.Errors.Validation ex)
14420
+ {
14421
+ // If the request was not valid, you may want to tell your user
14422
+ // why. You can find the invalid params and reasons in ex.Error.Params
14423
+ Console.WriteLine($"Failed validation: {ex.Error.Message}");
14424
+ }
14425
+ catch (Recurly.Errors.ApiError ex)
14426
+ {
14427
+ // Use ApiError to catch a generic error from the API
14428
+ Console.WriteLine($"Unexpected Recurly Error: {ex.Error.Message}");
14429
+ }
14430
+ - lang: Ruby
14431
+ source: |
14432
+ begin
14433
+ purchase = {
14434
+ currency: 'EUR',
14435
+ account: {
14436
+ code: account_code,
14437
+ email: 'benjamin@example.com',
14438
+ billing_info: {
14439
+ first_name: 'Benjamin',
14440
+ last_name: 'Du Monde',
14441
+ online_banking_payment_type: 'ideal'
14442
+ },
14443
+ },
14444
+ line_items: [
14445
+ {
14446
+ currency: 'EUR',
14447
+ unit_amount: 1000,
14448
+ type: 'charge'
14449
+ }
14450
+ ]
14451
+ }
14452
+ invoice_collection = @client.create_pending_purchase(body: purchase)
14453
+ puts "Created ChargeInvoice with UUID: #{invoice_collection.charge_invoice.uuid}"
14454
+ rescue Recurly::Errors::ValidationError => e
14455
+ # If the request was invalid, you may want to tell your user
14456
+ # why. You can find the invalid params and reasons in e.recurly_error.params
14457
+ puts "ValidationError: #{e.recurly_error.params}"
14458
+ end
14459
+ - lang: Java
14460
+ source: |
14461
+ try {
14462
+ AccountPurchase account = new AccountPurchase();
14463
+ account.setCode(accountCode);
14464
+ account.setEmail("benjamin@example.com");
14465
+
14466
+ BillingInfoCreate billingInfo = new BillingInfoCreate();
14467
+ billingInfo.setFirstName("Benjamin");
14468
+ billingInfo.setLastName("Du Monde");
14469
+ billingInfo.setOnlineBankingPaymentType(Constants.OnlineBankingPaymentType.IDEAL);
14470
+ account.setBillingInfo(billingInfo);
14471
+
14472
+ List<LineItemCreate> lineItems = new ArrayList<LineItemCreate>();
14473
+ LineItemCreate lineItem = new LineItemCreate();
14474
+ lineItem.setCurrency("EUR");
14475
+ lineItem.setUnitAmount(new BigDecimal("1000.0"));
14476
+ lineItem.setType(Constants.LineItemType.CHARGE);
14477
+ lineItems.add(lineItem);
14478
+
14479
+ PurchaseCreate purchase = new PurchaseCreate();
14480
+ purchase.setCurrency("EUR");
14481
+ purchase.setAccount(account);
14482
+ purchase.setLineItems(lineItems);
14483
+
14484
+ InvoiceCollection collection = client.createPendingPurchase(purchase);
14485
+ System.out.println("Created ChargeInvoice with UUID: " + collection.getChargeInvoice().getUuid());
14486
+ } catch (ValidationException e) {
14487
+ // If the request was not valid, you may want to tell your user
14488
+ // why. You can find the invalid params and reasons in e.getError().getParams()
14489
+ System.out.println("Failed validation: " + e.getError().getMessage());
14490
+ System.out.println("Params: " + e.getError().getParams());
14491
+ } catch (TransactionException e) {
14492
+ TransactionError tError = e.getError().getTransactionError();
14493
+ if (tError.getCategory() == Constants.ErrorCategory.THREE_D_SECURE_ACTION_REQUIRED) {
14494
+ String actionTokenId = tError.getThreeDSecureActionTokenId();
14495
+ System.out.println("Got 3DSecure TransactionError token: " + actionTokenId);
14496
+ }
14497
+ }
14498
+ catch (ApiException e) {
14499
+ // Use ApiException to catch a generic error from the API
14500
+ System.out.println("Unexpected Recurly Error: " + e.getError().getMessage());
14501
+ }
14502
+ - lang: PHP
14503
+ source: |
14504
+ try {
14505
+ $purchase_create = [
14506
+ "currency" => "EUR",
14507
+ "account" => [
14508
+ "code" => $account_code,
14509
+ "email" => "benjamin@example.com",
14510
+ "billing_info" => [
14511
+ "first_name" => "Benjamin",
14512
+ "last_name" => "Du Monde",
14513
+ "online_banking_payment_type" => "ideal"
14514
+ ],
14515
+ ],
14516
+ "line_items" => [
14517
+ [
14518
+ "currency" => "EUR",
14519
+ "unit_amount" => 1000,
14520
+ "type" => "charge",
14521
+ ]
14522
+ ]
14523
+ ];
14524
+ $invoice_collection = $client->createPendingPurchase($purchase_create);
14525
+ echo 'Created ChargeInvoice with UUID' . $invoice_collection->getChargeInvoice()->getUuid() . PHP_EOL;
14526
+ } catch (\Recurly\Errors\Validation $e) {
14527
+ // If the request was not valid, you may want to tell your user
14528
+ // why. You can find the invalid params and reasons in err.params
14529
+ var_dump($e);
14530
+ } catch (\Recurly\RecurlyError $e) {
14531
+ // If we don't know what to do with the err, we should
14532
+ // probably re-raise and let our web framework and logger handle it
14533
+ var_dump($e);
14534
+ }
14535
+ - lang: Go
14536
+ source: "purchaseReq := &recurly.PurchaseCreate{\n\tCurrency: recurly.String(\"EUR\"),\n\tAccount:
14537
+ &recurly.AccountPurchase{\n\t\tCode: recurly.String(accountCode),\n\t\tEmail:
14538
+ recurly.String(\"benjamin@example.com\"),\n\t\tBillingInfo: &recurly.BillingInfoCreate{\n\t\t\tFirstName:
14539
+ \ recurly.String(\"Benjamin\"),\n\t\t\tLastName: recurly.String(\"Du
14540
+ Monde\"),\n\t\t\tOnlineBankingPaymentType: recurly.String(\"ideal\"),\n\t\t},\n\t},\n\tLineItems:
14541
+ []recurly.LineItemCreate{\n\t\t{\n\t\t\tCurrency: recurly.String(\"EUR\"),\n\t\t\tUnitAmount:
14542
+ recurly.Float(1000),\n\t\t\tType: recurly.String(\"charge\"),\n\t\t},\n\t},\n}\ncollection,
14543
+ err := client.CreatePendingPurchase(purchaseReq)\nif e, ok := err.(*recurly.Error);
14544
+ ok {\n\tif e.Type == recurly.ErrorTypeValidation {\n\t\tfmt.Printf(\"Failed
14545
+ validation: %v\", e)\n\t\treturn nil, err\n\t}\n\n\tfmt.Printf(\"Unexpected
14546
+ Recurly error: %v\", e)\n\treturn nil, err\n}\n\nfmt.Printf(\"Created ChargeInvoice
14547
+ with UUID: %s.\\n\", collection.ChargeInvoice.Uuid)\n"
14273
14548
  "/export_dates":
14274
14549
  get:
14275
14550
  tags:
@@ -14593,8 +14868,73 @@ paths:
14593
14868
  schema:
14594
14869
  "$ref": "#/components/schemas/Error"
14595
14870
  x-code-samples: []
14871
+ "/invoice_templates":
14872
+ get:
14873
+ tags:
14874
+ - invoice_templates
14875
+ operationId: list_invoice_templates
14876
+ summary: Show the invoice templates for a site
14877
+ description: See the [Pagination Guide](/guides/pagination.html) to learn how
14878
+ to use pagination in the API and Client Libraries.
14879
+ parameters:
14880
+ - "$ref": "#/components/parameters/sort_dates"
14881
+ responses:
14882
+ '200':
14883
+ description: A list of the the invoice templates on a site.
14884
+ content:
14885
+ application/json:
14886
+ schema:
14887
+ "$ref": "#/components/schemas/InvoiceTemplateList"
14888
+ '404':
14889
+ description: Incorrect site.
14890
+ content:
14891
+ application/json:
14892
+ schema:
14893
+ "$ref": "#/components/schemas/Error"
14894
+ default:
14895
+ description: Unexpected error.
14896
+ content:
14897
+ application/json:
14898
+ schema:
14899
+ "$ref": "#/components/schemas/Error"
14900
+ x-code-samples: []
14901
+ "/invoice_templates/{invoice_template_id}":
14902
+ parameters:
14903
+ - "$ref": "#/components/parameters/invoice_template_id"
14904
+ get:
14905
+ tags:
14906
+ - invoice_templates
14907
+ operationId: get_invoice_template
14908
+ summary: Show the settings for an invoice template
14909
+ responses:
14910
+ '200':
14911
+ description: Settings for an invoice template.
14912
+ content:
14913
+ application/json:
14914
+ schema:
14915
+ "$ref": "#/components/schemas/InvoiceTemplate"
14916
+ '400':
14917
+ description: Bad request; perhaps missing or invalid parameters.
14918
+ content:
14919
+ application/json:
14920
+ schema:
14921
+ "$ref": "#/components/schemas/Error"
14922
+ '404':
14923
+ description: Incorrect site or invoice template ID.
14924
+ content:
14925
+ application/json:
14926
+ schema:
14927
+ "$ref": "#/components/schemas/Error"
14928
+ default:
14929
+ description: Unexpected error.
14930
+ content:
14931
+ application/json:
14932
+ schema:
14933
+ "$ref": "#/components/schemas/Error"
14934
+ x-code-samples: []
14596
14935
  servers:
14597
14936
  - url: https://v3.recurly.com
14937
+ - url: https://v3.eu.recurly.com
14598
14938
  components:
14599
14939
  parameters:
14600
14940
  site_id:
@@ -14662,7 +15002,8 @@ components:
14662
15002
  invoice_template_id:
14663
15003
  name: invoice_template_id
14664
15004
  in: path
14665
- description: Invoice template ID.
15005
+ description: Invoice template ID or code. For ID no prefix is used e.g. `e28zov4fw0v2`.
15006
+ For code use prefix `code-`, e.g. `code-bob`.
14666
15007
  required: true
14667
15008
  schema:
14668
15009
  type: string
@@ -15503,11 +15844,10 @@ components:
15503
15844
  dunning_campaign_id:
15504
15845
  type: string
15505
15846
  title: Dunning Campaign ID
15506
- description: Unique ID to identify a dunning campaign. Available when the
15507
- Dunning Campaigns feature is enabled. Used to specify if a non-default
15508
- dunning campaign should be assigned to this account. For sites without
15509
- multiple dunning campaigns enabled, the default dunning campaign will
15510
- always be used.
15847
+ description: Unique ID to identify a dunning campaign. Used to specify if
15848
+ a non-default dunning campaign should be assigned to this account. For
15849
+ sites without multiple dunning campaigns enabled, the default dunning
15850
+ campaign will always be used.
15511
15851
  invoice_template_id:
15512
15852
  type: string
15513
15853
  title: Invoice Template ID
@@ -15587,19 +15927,24 @@ components:
15587
15927
  dunning_campaign_id:
15588
15928
  type: string
15589
15929
  title: Dunning Campaign ID
15590
- description: Unique ID to identify a dunning campaign. Available when the
15591
- Dunning Campaigns feature is enabled. Used to specify if a non-default
15592
- dunning campaign should be assigned to this account. For sites without
15593
- multiple dunning campaigns enabled, the default dunning campaign will
15594
- always be used.
15930
+ description: Unique ID to identify a dunning campaign. Used to specify if
15931
+ a non-default dunning campaign should be assigned to this account. For
15932
+ sites without multiple dunning campaigns enabled, the default dunning
15933
+ campaign will always be used.
15934
+ invoice_template_id:
15935
+ type: string
15936
+ title: Invoice Template ID
15937
+ description: Unique ID to identify an invoice template. Available when the
15938
+ Invoice Customization feature is enabled. Used to specify if a non-default
15939
+ invoice template will be used to generate invoices for the account. For
15940
+ sites without multiple invoice templates enabled, the default template
15941
+ will always be used.
15595
15942
  address:
15596
15943
  "$ref": "#/components/schemas/Address"
15597
15944
  billing_info:
15598
15945
  "$ref": "#/components/schemas/BillingInfo"
15599
15946
  custom_fields:
15600
15947
  "$ref": "#/components/schemas/CustomFields"
15601
- invoice_template:
15602
- "$ref": "#/components/schemas/AccountInvoiceTemplate"
15603
15948
  AccountNote:
15604
15949
  type: object
15605
15950
  required:
@@ -15662,11 +16007,10 @@ components:
15662
16007
  dunning_campaign_id:
15663
16008
  type: string
15664
16009
  title: Dunning Campaign ID
15665
- description: Unique ID to identify a dunning campaign. Available when the
15666
- Dunning Campaigns feature is enabled. Used to specify if a non-default
15667
- dunning campaign should be assigned to this account. For sites without
15668
- multiple dunning campaigns enabled, the default dunning campaign will
15669
- always be used.
16010
+ description: Unique ID to identify a dunning campaign. Used to specify if
16011
+ a non-default dunning campaign should be assigned to this account. For
16012
+ sites without multiple dunning campaigns enabled, the default dunning
16013
+ campaign will always be used.
15670
16014
  AccountBalance:
15671
16015
  type: object
15672
16016
  properties:
@@ -15696,20 +16040,6 @@ components:
15696
16040
  format: float
15697
16041
  title: Amount
15698
16042
  description: Total amount the account is past due.
15699
- AccountInvoiceTemplate:
15700
- type: object
15701
- title: Invoice Template
15702
- description: Invoice template associated to the account. Available when invoice
15703
- customization flag is enabled.
15704
- properties:
15705
- id:
15706
- type: string
15707
- title: ID
15708
- description: Unique ID to identify the invoice template.
15709
- name:
15710
- type: string
15711
- title: Name
15712
- description: Template name
15713
16043
  InvoiceAddress:
15714
16044
  allOf:
15715
16045
  - "$ref": "#/components/schemas/Address"
@@ -15940,6 +16270,11 @@ components:
15940
16270
  title: Tiers
15941
16271
  items:
15942
16272
  "$ref": "#/components/schemas/Tier"
16273
+ percentage_tiers:
16274
+ type: array
16275
+ title: Percentage Tiers
16276
+ items:
16277
+ "$ref": "#/components/schemas/PercentageTiersByCurrency"
15943
16278
  external_sku:
15944
16279
  type: string
15945
16280
  title: External SKU
@@ -16116,8 +16451,17 @@ components:
16116
16451
  description: |
16117
16452
  If the tier_type is `flat`, then `tiers` must be absent. The `tiers` object
16118
16453
  must include one to many tiers with `ending_quantity` and `unit_amount` for
16119
- the desired `currencies`, or alternatively, `usage_percentage` for usage percentage type usage add ons. There must be one tier with an `ending_quantity`
16454
+ the desired `currencies`. There must be one tier with an `ending_quantity`
16120
16455
  of 999999999 which is the default if not provided.
16456
+ percentage_tiers:
16457
+ type: array
16458
+ title: Percentage Tiers By Currency
16459
+ items:
16460
+ "$ref": "#/components/schemas/PercentageTiersByCurrency"
16461
+ description: |
16462
+ Array of objects which must have at least one set of tiers
16463
+ per currency and the currency code. The tier_type must be `volume` or `tiered`,
16464
+ if not, it must be absent. There must be one tier without ending_amount value.
16121
16465
  required:
16122
16466
  - code
16123
16467
  - name
@@ -16245,8 +16589,17 @@ components:
16245
16589
  description: |
16246
16590
  If the tier_type is `flat`, then `tiers` must be absent. The `tiers` object
16247
16591
  must include one to many tiers with `ending_quantity` and `unit_amount` for
16248
- the desired `currencies`, or alternatively, `usage_percentage` for usage percentage type usage add ons. There must be one tier with an `ending_quantity`
16249
- of 999999999 which is the default if not provided.
16592
+ the desired `currencies`. There must be one tier without an `ending_quantity` value
16593
+ that represents the final tier.
16594
+ percentage_tiers:
16595
+ type: array
16596
+ title: Percentage Tiers By Currency
16597
+ items:
16598
+ "$ref": "#/components/schemas/PercentageTiersByCurrency"
16599
+ description: |
16600
+ `percentage_tiers` is an array of objects, which must have the set of tiers
16601
+ per currency and the currency code. The tier_type must be `volume` or `tiered`,
16602
+ if not, it must be absent.
16250
16603
  BillingInfo:
16251
16604
  type: object
16252
16605
  properties:
@@ -16471,6 +16824,10 @@ components:
16471
16824
  billing info marked `primary_payment_method` can be set as a backup. An
16472
16825
  account can have a maximum of 1 backup, if a user sets a different payment
16473
16826
  method as a backup, the existing backup will no longer be marked as such.
16827
+ external_hpp_type:
16828
+ "$ref": "#/components/schemas/ExternalHppTypeEnum"
16829
+ online_banking_payment_type:
16830
+ "$ref": "#/components/schemas/OnlineBankingPaymentTypeEnum"
16474
16831
  BillingInfoVerify:
16475
16832
  type: object
16476
16833
  properties:
@@ -17429,6 +17786,10 @@ components:
17429
17786
  type: string
17430
17787
  title: Invoice ID
17431
17788
  readOnly: true
17789
+ uuid:
17790
+ type: string
17791
+ title: Invoice UUID
17792
+ readOnly: true
17432
17793
  object:
17433
17794
  type: string
17434
17795
  title: Object type
@@ -17624,9 +17985,8 @@ components:
17624
17985
  type: string
17625
17986
  title: Dunning Campaign ID
17626
17987
  description: Unique ID to identify the dunning campaign used when dunning
17627
- the invoice. Available when the Dunning Campaigns feature is enabled.
17628
- For sites without multiple dunning campaigns enabled, this will always
17629
- be the default dunning campaign.
17988
+ the invoice. For sites without multiple dunning campaigns enabled, this
17989
+ will always be the default dunning campaign.
17630
17990
  InvoiceCreate:
17631
17991
  type: object
17632
17992
  properties:
@@ -18556,11 +18916,10 @@ components:
18556
18916
  dunning_campaign_id:
18557
18917
  type: string
18558
18918
  title: Dunning Campaign ID
18559
- description: Unique ID to identify a dunning campaign. Available when the
18560
- Dunning Campaigns feature is enabled. Used to specify if a non-default
18561
- dunning campaign should be assigned to this plan. For sites without multiple
18562
- dunning campaigns enabled, the default dunning campaign will always be
18563
- used.
18919
+ description: Unique ID to identify a dunning campaign. Used to specify if
18920
+ a non-default dunning campaign should be assigned to this plan. For sites
18921
+ without multiple dunning campaigns enabled, the default dunning campaign
18922
+ will always be used.
18564
18923
  created_at:
18565
18924
  type: string
18566
18925
  format: date-time
@@ -18720,11 +19079,10 @@ components:
18720
19079
  dunning_campaign_id:
18721
19080
  type: string
18722
19081
  title: Dunning Campaign ID
18723
- description: Unique ID to identify a dunning campaign. Available when the
18724
- Dunning Campaigns feature is enabled. Used to specify if a non-default
18725
- dunning campaign should be assigned to this plan. For sites without multiple
18726
- dunning campaigns enabled, the default dunning campaign will always be
18727
- used.
19082
+ description: Unique ID to identify a dunning campaign. Used to specify if
19083
+ a non-default dunning campaign should be assigned to this plan. For sites
19084
+ without multiple dunning campaigns enabled, the default dunning campaign
19085
+ will always be used.
18728
19086
  required:
18729
19087
  - code
18730
19088
  - name
@@ -18911,11 +19269,10 @@ components:
18911
19269
  dunning_campaign_id:
18912
19270
  type: string
18913
19271
  title: Dunning Campaign ID
18914
- description: Unique ID to identify a dunning campaign. Available when the
18915
- Dunning Campaigns feature is enabled. Used to specify if a non-default
18916
- dunning campaign should be assigned to this plan. For sites without multiple
18917
- dunning campaigns enabled, the default dunning campaign will always be
18918
- used.
19272
+ description: Unique ID to identify a dunning campaign. Used to specify if
19273
+ a non-default dunning campaign should be assigned to this plan. For sites
19274
+ without multiple dunning campaigns enabled, the default dunning campaign
19275
+ will always be used.
18919
19276
  AddOnPricing:
18920
19277
  type: object
18921
19278
  properties:
@@ -19006,21 +19363,50 @@ components:
19006
19363
  type: integer
19007
19364
  title: Ending quantity
19008
19365
  description: Ending quantity for the tier. This represents a unit amount
19009
- for unit-priced add ons, but for percentage type usage add ons, represents
19010
- the site default currency in its minimum divisible unit.
19366
+ for unit-priced add ons.
19011
19367
  minimum: 1
19012
19368
  maximum: 999999999
19013
19369
  default: 999999999
19014
19370
  usage_percentage:
19015
19371
  type: string
19016
19372
  title: Usage Percentage
19017
- description: Decimal usage percentage.
19373
+ description: "(deprecated) -- Use the percentage_tiers object instead."
19374
+ deprecated: true
19018
19375
  currencies:
19019
19376
  type: array
19020
19377
  title: Tier pricing
19021
19378
  items:
19022
19379
  "$ref": "#/components/schemas/TierPricing"
19023
19380
  minItems: 1
19381
+ PercentageTiersByCurrency:
19382
+ type: object
19383
+ properties:
19384
+ currency:
19385
+ type: string
19386
+ title: Currency
19387
+ description: 3-letter ISO 4217 currency code.
19388
+ maxLength: 3
19389
+ tiers:
19390
+ type: array
19391
+ title: Tiers
19392
+ items:
19393
+ "$ref": "#/components/schemas/PercentageTier"
19394
+ minItems: 1
19395
+ PercentageTier:
19396
+ type: object
19397
+ properties:
19398
+ ending_amount:
19399
+ type: number
19400
+ format: float
19401
+ title: Ending amount
19402
+ minimum: 0.1
19403
+ maximum: 9999999999999
19404
+ description: Ending amount for the tier. Allows up to 2 decimal places.
19405
+ The last tier ending_amount is null.
19406
+ usage_percentage:
19407
+ type: string
19408
+ title: Usage Percentage
19409
+ description: Decimal usage percentage.
19024
19410
  Settings:
19025
19411
  type: object
19026
19412
  properties:
@@ -19713,7 +20099,18 @@ components:
19713
20099
  minItems: 1
19714
20100
  description: |
19715
20101
  If tiers are provided in the request, all existing tiers on the Subscription Add-on will be
19716
- removed and replaced by the tiers in the request.
20102
+ removed and replaced by the tiers in the request. If add_on.tier_type is tiered or volume and
20103
+ add_on.usage_type is percentage use percentage_tiers instead.
20104
+ percentage_tiers:
20105
+ type: array
20106
+ title: Percentage Tiers
20107
+ items:
20108
+ "$ref": "#/components/schemas/SubscriptionAddOnPercentageTier"
20109
+ minItems: 1
20110
+ description: |
20111
+ If percentage tiers are provided in the request, all existing percentage tiers on the Subscription Add-on will be
20112
+ removed and replaced by the percentage tiers in the request. Use only if add_on.tier_type is tiered or volume and
20113
+ add_on.usage_type is percentage
19717
20114
  usage_percentage:
19718
20115
  type: number
19719
20116
  format: float
@@ -19779,9 +20176,19 @@ components:
19779
20176
  description: |
19780
20177
  If the plan add-on's `tier_type` is `flat`, then `tiers` must be absent. The `tiers` object
19781
20178
  must include one to many tiers with `ending_quantity` and `unit_amount`.
19782
- There must be one tier with an `ending_quantity` of 999999999 which is the
19783
- default if not provided. See our [Guide](https://developers.recurly.com/guides/item-addon-guide.html)
20179
+ There must be one tier without ending_quantity value.
20180
+ See our [Guide](https://developers.recurly.com/guides/item-addon-guide.html)
19784
20181
  for an overview of how to configure quantity-based pricing models.
20182
+ percentage_tiers:
20183
+ type: array
20184
+ title: Percentage Tiers
20185
+ items:
20186
+ "$ref": "#/components/schemas/SubscriptionAddOnPercentageTier"
20187
+ minItems: 1
20188
+ description: |
20189
+ If percentage tiers are provided in the request, all existing percentage tiers on the Subscription Add-on will be
20190
+ removed and replaced by the percentage tiers in the request. There must be one tier without ending_amount value.
20191
+ Use only if add_on.tier_type is tiered or volume and add_on.usage_type is percentage.
19785
20192
  usage_percentage:
19786
20193
  type: number
19787
20194
  format: float
@@ -19868,7 +20275,7 @@ components:
19868
20275
  title: Ending quantity
19869
20276
  minimum: 1
19870
20277
  maximum: 999999999
19871
- default: 999999999
20278
+ default:
19872
20279
  unit_amount:
19873
20280
  type: number
19874
20281
  format: float
@@ -19888,11 +20295,25 @@ components:
19888
20295
  usage_percentage:
19889
20296
  type: string
19890
20297
  title: Usage Percentage
19891
- description: The percentage taken of the monetary amount of usage tracked.
20298
+ description: "(deprecated) -- Use the percentage_tiers object instead."
20299
+ deprecated: true
20300
+ SubscriptionAddOnPercentageTier:
20301
+ type: object
20302
+ properties:
20303
+ ending_amount:
20304
+ type: number
20305
+ format: float
20306
+ title: Ending amount
20307
+ minimum: 1
20308
+ maximum: 9999999999999.99
20309
+ default:
20310
+ usage_percentage:
20311
+ type: string
20312
+ title: Usage Percentage
20313
+ description: |
20314
+ The percentage taken of the monetary amount of usage tracked.
19892
20315
  This can be up to 4 decimal places represented as a string. A value between
19893
- 0.0 and 100.0. Optionally, override tiers' default usage percentage. Required
19894
- if add-on's `add_on_type` is `usage` and `usage_type` is `percentage`.
19895
- Must be omitted otherwise.
20316
+ 0.0 and 100.0.
19896
20317
  SubscriptionCancel:
19897
20318
  type: object
19898
20319
  properties:
@@ -20472,9 +20893,10 @@ components:
20472
20893
  type: boolean
20473
20894
  title: Tax Inclusive?
20474
20895
  default: false
20475
- description: Determines whether or not tax is included in the unit amount.
20476
- The Tax Inclusive Pricing feature (separate from the Mixed Tax Pricing
20477
- feature) must be enabled to use this flag.
20896
+ description: This field is deprecated. Do not use it anymore to update a
20897
+ subscription's tax inclusivity. Use the POST subscription change route
20898
+ instead.
20899
+ deprecated: true
20478
20900
  shipping:
20479
20901
  "$ref": "#/components/schemas/SubscriptionShippingUpdate"
20480
20902
  billing_info_id:
@@ -20955,7 +21377,14 @@ components:
20955
21377
  items:
20956
21378
  "$ref": "#/components/schemas/SubscriptionAddOnTier"
20957
21379
  description: The tiers and prices of the subscription based on the usage_timestamp.
20958
- If tier_type = flat, tiers = null
21380
+ If tier_type = flat, tiers = []
21381
+ percentage_tiers:
21382
+ type: array
21383
+ title: Percentage Tiers
21384
+ items:
21385
+ "$ref": "#/components/schemas/SubscriptionAddOnPercentageTier"
21386
+ description: The percentage tiers of the subscription based on the usage_timestamp.
21387
+ If tier_type = flat, percentage_tiers = []
20959
21388
  measured_unit_id:
20960
21389
  type: string
20961
21390
  description: The ID of the measured unit associated with the add-on the
@@ -21327,6 +21756,46 @@ components:
21327
21756
  maxItems: 200
21328
21757
  items:
21329
21758
  "$ref": "#/components/schemas/Plan"
21759
+ InvoiceTemplateList:
21760
+ type: object
21761
+ properties:
21762
+ object:
21763
+ type: string
21764
+ title: Object type
21765
+ description: Will always be List.
21766
+ has_more:
21767
+ type: boolean
21768
+ description: Indicates there are more results on subsequent pages.
21769
+ next:
21770
+ type: string
21771
+ description: Path to subsequent page of results.
21772
+ data:
21773
+ type: array
21774
+ items:
21775
+ "$ref": "#/components/schemas/InvoiceTemplate"
21776
+ InvoiceTemplate:
21777
+ type: object
21778
+ description: Settings for an invoice template.
21779
+ properties:
21780
+ id:
21781
+ type: string
21782
+ code:
21783
+ type: string
21784
+ description: Invoice template code.
21785
+ name:
21786
+ type: string
21787
+ description: Invoice template name.
21788
+ description:
21789
+ type: string
21790
+ description: Invoice template description.
21791
+ created_at:
21792
+ type: string
21793
+ format: date-time
21794
+ description: When the invoice template was created in Recurly.
21795
+ updated_at:
21796
+ type: string
21797
+ format: date-time
21798
+ description: When the invoice template was updated in Recurly.
21330
21799
  PaymentMethod:
21331
21800
  properties:
21332
21801
  object:
@@ -22001,6 +22470,7 @@ components:
22001
22470
  - rate_limited
22002
22471
  - service_not_available
22003
22472
  - simultaneous_request
22473
+ - tax_service_error
22004
22474
  - transaction
22005
22475
  - unauthorized
22006
22476
  - unavailable_in_api_version
@@ -22244,3 +22714,14 @@ components:
22244
22714
  enum:
22245
22715
  - checking
22246
22716
  - savings
22717
+ ExternalHppTypeEnum:
22718
+ type: string
22719
+ description: Use for Adyen HPP billing info.
22720
+ enum:
22721
+ - adyen
22722
+ OnlineBankingPaymentTypeEnum:
22723
+ type: string
22724
+ description: Use for Online Banking billing info.
22725
+ enum:
22726
+ - ideal
22727
+ - sofort