Skip to content

Commit e1c368a

Browse files
authored
Merge pull request #742 from recurly/v3-v2021-02-25-24466117647
Generated Latest Changes for v2021-02-25
2 parents 5fd1e7e + 9849c05 commit e1c368a

3 files changed

Lines changed: 194 additions & 1 deletion

File tree

openapi/api.yaml

Lines changed: 128 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1404,6 +1404,45 @@ paths:
14041404
not found: %v\", e)\n\t\treturn nil, err\n\t}\n\tfmt.Printf(\"Unexpected
14051405
Recurly error: %v\", e)\n\treturn nil, err\n}\nfmt.Printf(\"Deactivated
14061406
Account: %s\", account.Id)"
1407+
"/accounts/{account_id}/redact":
1408+
parameters:
1409+
- "$ref": "#/components/parameters/account_id"
1410+
put:
1411+
tags:
1412+
- account
1413+
operationId: redact_account
1414+
summary: Redact an account (GDPR Right to Erasure)
1415+
description: Permanently and irreversibly removes all personally identifiable
1416+
information (PII) from an account to fulfill a data subject's right to erasure
1417+
under GDPR and similar privacy regulations (e.g. CCPA). This includes billing
1418+
information, shipping addresses, and transaction details such as names, email
1419+
addresses, and payment card data. The underlying account and transaction records
1420+
are retained for financial and audit purposes, but all personal data fields
1421+
are cleared. The account must have no active subscriptions, uninvoiced charges,
1422+
or partially paid invoices before it can be redacted. Redaction is processed
1423+
asynchronously and cannot be undone.
1424+
responses:
1425+
'200':
1426+
description: Account has been accepted for redaction and will be processed
1427+
asynchronously.
1428+
content:
1429+
application/json:
1430+
schema:
1431+
"$ref": "#/components/schemas/Account"
1432+
'422':
1433+
description: Account cannot be redacted. Common reasons include active subscriptions,
1434+
uninvoiced charges, or partially paid invoices.
1435+
content:
1436+
application/json:
1437+
schema:
1438+
"$ref": "#/components/schemas/Error"
1439+
default:
1440+
description: Unexpected error.
1441+
content:
1442+
application/json:
1443+
schema:
1444+
"$ref": "#/components/schemas/Error"
1445+
x-code-samples: []
14071446
"/accounts/{account_id}/acquisition":
14081447
parameters:
14091448
- "$ref": "#/components/parameters/account_id"
@@ -6505,6 +6544,55 @@ paths:
65056544
schema:
65066545
"$ref": "#/components/schemas/Error"
65076546
x-code-samples: []
6547+
"/coupons/{coupon_id}/generate_sync":
6548+
post:
6549+
tags:
6550+
- unique_coupon_code
6551+
operationId: generate_unique_coupon_codes_sync
6552+
summary: Generate unique coupon codes synchronously
6553+
description: Generates up to 200 unique coupon codes for a bulk coupon and returns
6554+
them directly in the response. For larger batches, use the asynchronous generate
6555+
endpoint instead.
6556+
parameters:
6557+
- "$ref": "#/components/parameters/coupon_id"
6558+
requestBody:
6559+
content:
6560+
application/json:
6561+
schema:
6562+
"$ref": "#/components/schemas/CouponBulkCreateSync"
6563+
required: true
6564+
responses:
6565+
'200':
6566+
description: The newly generated unique coupon codes.
6567+
content:
6568+
application/json:
6569+
schema:
6570+
"$ref": "#/components/schemas/UniqueCouponCodeGenerationResponse"
6571+
'400':
6572+
description: Invalid or unpermitted parameter.
6573+
content:
6574+
application/json:
6575+
schema:
6576+
"$ref": "#/components/schemas/Error"
6577+
'404':
6578+
description: Incorrect site or coupon ID.
6579+
content:
6580+
application/json:
6581+
schema:
6582+
"$ref": "#/components/schemas/Error"
6583+
'422':
6584+
description: Unprocessable entity.
6585+
content:
6586+
application/json:
6587+
schema:
6588+
"$ref": "#/components/schemas/Error"
6589+
default:
6590+
description: Unexpected error.
6591+
content:
6592+
application/json:
6593+
schema:
6594+
"$ref": "#/components/schemas/Error"
6595+
x-code-samples: []
65086596
"/coupons/{coupon_id}/restore":
65096597
put:
65106598
tags:
@@ -19841,6 +19929,18 @@ components:
1984119929
description: The quantity of unique coupon codes to generate. A bulk coupon
1984219930
can have up to 100,000 unique codes (or your site's configured limit).
1984319931
minimum: 1
19932+
CouponBulkCreateSync:
19933+
type: object
19934+
properties:
19935+
number_of_unique_codes:
19936+
type: integer
19937+
title: Number of unique codes
19938+
description: The quantity of unique coupon codes to generate. A bulk coupon
19939+
can have up to 100,000 unique codes (or your site's configured limit).
19940+
minimum: 1
19941+
maximum: 200
19942+
required:
19943+
- number_of_unique_codes
1984419944
CouponMini:
1984519945
type: object
1984619946
properties:
@@ -25251,7 +25351,20 @@ components:
2525125351
transactions where fraud checks have already been performed on the
2525225352
initial transaction. Note that not all gateways support this feature.
2525325353
For Stripe, this skips Radar fraud rules; for Adyen, this skips
25254-
Risk checks.
25354+
skip_recurly_fraud:
25355+
type: boolean
25356+
title: Skip Recurly Fraud
25357+
description: When set to `true`, skips Recurly's fraud detection checks
25358+
for this transaction, including Kount and IP-based fraud screening.
25359+
Does not affect gateway-level fraud checks. Use `skip_all_fraud`
25360+
to skip all fraud checks.
25361+
skip_all_fraud:
25362+
type: boolean
25363+
title: Skip All Fraud
25364+
description: When set to `true`, skips all fraud checks for this transaction,
25365+
including both gateway-level fraud checks and Recurly's fraud detection
25366+
services. This is useful for trusted transactions where fraud screening
25367+
is not required.
2525525368
customer_notes:
2525625369
type: string
2525725370
title: Customer notes
@@ -25839,6 +25952,20 @@ components:
2583925952
type: string
2584025953
format: date-time
2584125954
description: When the external product was updated in Recurly.
25955+
UniqueCouponCodeGenerationResponse:
25956+
type: object
25957+
properties:
25958+
object:
25959+
type: string
25960+
title: Object type
25961+
readOnly: true
25962+
unique_coupon_codes:
25963+
type: array
25964+
title: Unique coupon codes
25965+
description: An array containing the newly generated unique coupon codes.
25966+
maxItems: 200
25967+
items:
25968+
"$ref": "#/components/schemas/UniqueCouponCode"
2584225969
ExternalSubscription:
2584325970
type: object
2584425971
description: Subscription from an external resource such as Apple App Store

recurly/client.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,30 @@ def deactivate_account(self, account_id, **options):
234234
path = self._interpolate_path("/accounts/%s", account_id)
235235
return self._make_request("DELETE", path, None, **options)
236236

237+
def redact_account(self, account_id, **options):
238+
"""Redact an account (GDPR Right to Erasure)
239+
240+
Parameters
241+
----------
242+
243+
account_id : str
244+
Account ID or code. For ID no prefix is used e.g. `e28zov4fw0v2`. For code use prefix `code-`, e.g. `code-bob`.
245+
246+
Keyword Arguments
247+
-----------------
248+
249+
headers : dict
250+
Extra HTTP headers to send with the request.
251+
252+
Returns
253+
-------
254+
255+
Account
256+
Account has been accepted for redaction and will be processed asynchronously.
257+
"""
258+
path = self._interpolate_path("/accounts/%s/redact", account_id)
259+
return self._make_request("PUT", path, None, **options)
260+
237261
def get_account_acquisition(self, account_id, **options):
238262
"""Fetch an account's acquisition data
239263
@@ -1988,6 +2012,32 @@ def generate_unique_coupon_codes(self, coupon_id, body, **options):
19882012
path = self._interpolate_path("/coupons/%s/generate", coupon_id)
19892013
return self._make_request("POST", path, body, **options)
19902014

2015+
def generate_unique_coupon_codes_sync(self, coupon_id, body, **options):
2016+
"""Generate unique coupon codes synchronously
2017+
2018+
Parameters
2019+
----------
2020+
2021+
coupon_id : str
2022+
Coupon ID or code. For ID no prefix is used e.g. `e28zov4fw0v2`. For code use prefix `code-`, e.g. `code-10off`.
2023+
body : dict
2024+
The request body. It should follow the schema of CouponBulkCreateSync.
2025+
2026+
Keyword Arguments
2027+
-----------------
2028+
2029+
headers : dict
2030+
Extra HTTP headers to send with the request.
2031+
2032+
Returns
2033+
-------
2034+
2035+
UniqueCouponCodeGenerationResponse
2036+
The newly generated unique coupon codes.
2037+
"""
2038+
path = self._interpolate_path("/coupons/%s/generate_sync", coupon_id)
2039+
return self._make_request("POST", path, body, **options)
2040+
19912041
def restore_coupon(self, coupon_id, body, **options):
19922042
"""Restore an inactive coupon
19932043

recurly/resources.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2739,6 +2739,22 @@ class UniqueCouponCodeParams(Resource):
27392739
}
27402740

27412741

2742+
class UniqueCouponCodeGenerationResponse(Resource):
2743+
"""
2744+
Attributes
2745+
----------
2746+
object : str
2747+
Object type
2748+
unique_coupon_codes : :obj:`list` of :obj:`UniqueCouponCode`
2749+
An array containing the newly generated unique coupon codes.
2750+
"""
2751+
2752+
schema = {
2753+
"object": str,
2754+
"unique_coupon_codes": ["UniqueCouponCode"],
2755+
}
2756+
2757+
27422758
class UniqueCouponCode(Resource):
27432759
"""
27442760
Attributes

0 commit comments

Comments
 (0)