{"id":15562221,"url":"https://github.com/deanpcmad/paddle","last_synced_at":"2025-10-13T18:37:48.473Z","repository":{"id":56887221,"uuid":"397939512","full_name":"deanpcmad/paddle","owner":"deanpcmad","description":"Ruby library for the Paddle API","archived":false,"fork":false,"pushed_at":"2024-12-20T17:32:40.000Z","size":256,"stargazers_count":19,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-27T06:05:47.677Z","etag":null,"topics":["paddle","payment-gateway","payments","ruby","rubygem"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deanpcmad.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"buy_me_a_coffee":"deanpcmad","ko_fi":"deanpcmad"}},"created_at":"2021-08-19T12:43:03.000Z","updated_at":"2025-06-03T02:08:04.000Z","dependencies_parsed_at":"2023-12-27T12:31:08.525Z","dependency_job_id":"8ba9c3bc-d801-4a74-b117-72d086a53b82","html_url":"https://github.com/deanpcmad/paddle","commit_stats":null,"previous_names":["deanpcmad/paddle"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/deanpcmad/paddle","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deanpcmad%2Fpaddle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deanpcmad%2Fpaddle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deanpcmad%2Fpaddle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deanpcmad%2Fpaddle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deanpcmad","download_url":"https://codeload.github.com/deanpcmad/paddle/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deanpcmad%2Fpaddle/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264538585,"owners_count":23624436,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["paddle","payment-gateway","payments","ruby","rubygem"],"created_at":"2024-10-02T16:12:30.736Z","updated_at":"2025-10-13T18:37:43.439Z","avatar_url":"https://github.com/deanpcmad.png","language":"Ruby","readme":"# Paddle Ruby Library\n\nThe easiest and most complete Ruby library for the Paddle APIs, both Classic and Billing.\n\n## Installation\n\nAdd this line to your application's Gemfile:\n\n```ruby\ngem \"paddle\", \"~\u003e 2.6\"\n```\n\n## Billing API\n\nFor accessing the new Billing API from Paddle. For more info, view the [Paddle Billing](https://www.paddle.com/billing) page.\n\n### Configuration\n\nFirstly you'll need to generate and set your API Key and the environment.\n\nYou can find and generate an API key [here for production](https://vendors.paddle.com/authentication),\nor [here for sandbox](https://sandbox-vendors.paddle.com/authentication)\n\n```ruby\nPaddle.configure do |config|\n  # Use :development or :sandbox for the Sandbox API\n  # Or use :production for the Production API\n  config.environment = :sandbox\n  config.api_key = ENV[\"PADDLE_API_KEY\"]\n\n  # Set the API version. Defaults to 1\n  config.version = 1\nend\n```\n\n### Resources\n\nThe gem maps as closely as we can to the Paddle API so you can easily convert API examples to gem code.\n\nResponses are created as objects like `Paddle::Product`. Having types like `Paddle::Product` is handy for understanding what\ntype of object you're working with. They're built using OpenStruct so you can easily access data in a Ruby-ish way.\n\n### Pagination\n\nSome of the endpoints return pages of results. The result object will have a `data` key to access the results.\n\nAn example of using collections, including pagination:\n\n```ruby\nresults = Paddle::Product.list(per_page: 10)\n#=\u003e Paddle::Collection\n\nresults.total\n#=\u003e 10\n\nresults.data\n#=\u003e [#\u003cPaddle::Product\u003e, #\u003cPaddle::Product\u003e]\n\nresults.each do |result|\n  puts result.id\nend\n\nresults.first\n#=\u003e #\u003cPaddle::Product\u003e\n\nresults.last\n#=\u003e #\u003cPaddle::Product\u003e\n\n# Retrieve the next page\nPaddle::Product.list(per_page: 10, after: \"abc123\")\n#=\u003e Paddle::Collection\n```\n\n### Caveats\n\n\u003e[!NOTE]\n\u003e\n\u003e The Paddle API doesn't take `nil` values for optional parameters. If you want to remove a value, you'll need to pass `\"null\"` instead.\n\n### Updating records\n\nFor API endpoints that support it, you can use the `update` method to update a record, like so:\n\n```ruby\nPaddle::Product.retrieve(id: \"pro_abc123\").update(name: \"My New Name\")\n```\n\n### Products\n\n```ruby\n# List all products\n# https://developer.paddle.com/api-reference/products/list-products\nPaddle::Product.list\nPaddle::Product.list(status: \"active\")\nPaddle::Product.list(status: \"archived\")\nPaddle::Product.list(tax_category: \"saas\")\n\n# Create a product\n# https://developer.paddle.com/api-reference/products/create-product\nPaddle::Product.create(name: \"My SAAS Plan\", tax_category: \"saas\")\nPaddle::Product.create(name: \"My Standard Product\", tax_category: \"standard\")\n\n# Retrieve a product\nproduct = Paddle::Product.retrieve(id: \"pro_abc123\")\n\n# Update a product\n# https://developer.paddle.com/api-reference/products/update-product\nproduct.update(description: \"This is a plan\")\n# or\nPaddle::Product.update(id: \"pro_abc123\", description: \"This is a plan\")\n```\n\n### Prices\n\n```ruby\n# List all prices\n# https://developer.paddle.com/api-reference/prices/list-prices\nPaddle::Price.list\nPaddle::Price.list(status: \"active\")\nPaddle::Price.list(status: \"archived\")\nPaddle::Price.list(product_id: \"pro_abc123\")\n\n# Create a price\n# Note that unit_price amount should be a string\n# https://developer.paddle.com/api-reference/prices/create-price\nPaddle::Price.create(product_id: \"pro_abc123\", description: \"A one off price\", amount: \"1000\", currency: \"GBP\")\n\n# Retrieve a price\nprice = Paddle::Price.retrieve(id: \"pri_123abc\")\n\n# Update a price\n# https://developer.paddle.com/api-reference/prices/update-price\nprice.update(description: \"An updated description\")\n# or\nPaddle::Price.update(id: \"pri_123abc\", description: \"An updated description\")\n```\n\n### Pricing Preview\n\n```ruby\n# Preview calculations for one or more prices\n# This is normally used when building pricing pages\n# https://developer.paddle.com/api-reference/pricing-preview/preview-prices\nPaddle::PricingPreview.generate(items: [ { price_id: \"pri_123abc\", quantity: 5 } ])\nPaddle::PricingPreview.generate(items: [ { price_id: \"pri_123abc\", quantity: 5 } ], currency_code: \"GBP\")\nPaddle::PricingPreview.generate(items: [ { price_id: \"pri_123abc\", quantity: 5 } ], customer_ip_address: \"1.1.1.1\")\n```\n\n### Discounts\n\n```ruby\n# List all discounts\n# https://developer.paddle.com/api-reference/discounts/list-discounts\nPaddle::Discount.list\nPaddle::Discount.list(status: \"active\")\n\n# Create a discount\n# Note that amount should be a string\n# https://developer.paddle.com/api-reference/discounts/create-discount\nPaddle::Discount.create(description: \"$5 off\", type: \"flat\", amount: \"500\", currency_code: \"USD\")\nPaddle::Discount.create(description: \"10% Off\", type: \"percentage\", amount: \"10\", code: \"10OFF\")\n\n# Retrieve a discount\ndiscount = Paddle::Discount.retrieve(id: \"dsc_abc123\")\n\n# Update a discount\n# https://developer.paddle.com/api-reference/discounts/update-discount\ndiscount.update(description: \"An updated description\")\n# or\nPaddle::Discount.update(id: \"dsc_abc123\", description: \"An updated description\")\n```\n\n### Customers\n\n```ruby\n# List all customers\n# https://developer.paddle.com/api-reference/customers/list-customers\nPaddle::Customer.list\nPaddle::Customer.list(status: \"active\")\nPaddle::Customer.list(email: \"me@mydomain.com\")\n\n# Create a customer\n# https://developer.paddle.com/api-reference/customers/create-customer\n# Returns a Paddle::Errors::ConflictError if the email is already used on Paddle\nPaddle::Customer.create(email: \"myemail@mydomain.com\", name: \"Customer Name\")\n\n# Retrieve a customer\ncustomer = Paddle::Customer.retrieve(id: \"ctm_abc123\")\n\n# Update a customer\n# https://developer.paddle.com/api-reference/customers/update-customer\ncustomer.update(status: \"archived\")\n# or\nPaddle::Customer.update(id: \"ctm_abc123\", status: \"archived\")\n\n# Retrieve credit balance for a customer\n# https://developer.paddle.com/api-reference/customers/list-credit-balances\nPaddle::Customer.credit(id: \"ctm_abc123\")\n```\n\n### Addresses\n\n```ruby\n# List all addresses for a customer\n# https://developer.paddle.com/api-reference/addresses/list-addresses\nPaddle::Address.list(customer: \"ctm_abc123\")\n\n# Create an address\n# https://developer.paddle.com/api-reference/addresses/create-address\nPaddle::Address.create(customer: \"ctm_abc123\", country_code: \"GB\", postal_code: \"SW1A 2AA\")\n\n# Retrieve an address\naddress = Paddle::Address.retrieve(customer: \"ctm_abc123\", id: \"add_abc123\")\n\n# Update an address\n# https://developer.paddle.com/api-reference/addresses/update-address\naddress.update(status: \"archived\")\n# or\nPaddle::Address.update(customer: \"ctm_abc123\", id: \"add_abc123\", status: \"archived\")\n```\n\n### Businesses\n\n```ruby\n# List all businesses for a customer\n# https://developer.paddle.com/api-reference/businesses/list-businesses\nPaddle::Business.list(customer: \"ctm_abc123\")\n\n# Create a business\n# https://developer.paddle.com/api-reference/businesses/create-business\nPaddle::Business.create(customer: \"ctm_abc123\", name: \"My Ltd Company\")\n\n# Retrieve a business\nbusiness = Paddle::Business.retrieve(customer: \"ctm_abc123\", id: \"biz_abc123\")\n\n# Update a business\n# https://developer.paddle.com/api-reference/businesses/update-business\nbusiness.update(status: \"archived\")\n# or\nPaddle::Business.update(customer: \"ctm_abc123\", id: \"biz_abc123\", status: \"archived\")\n```\n\n### Transactions\n\n```ruby\n# List all transactions\n# https://developer.paddle.com/api-reference/transactions/list-transactions\nPaddle::Transaction.list(customer_id: \"ctm_abc123\")\nPaddle::Transaction.list(subscription_id: \"sub_abc123\")\nPaddle::Transaction.list(status: \"completed\")\n\n# Create a transaction\n# https://developer.paddle.com/api-reference/transactions/create-transaction\nPaddle::Transaction.create(items: [ { price_id: \"pri_abc123\", quantity: 1 } ])\n\n# Retrieve a transaction\nPaddle::Transaction.retrieve(id: \"txn_abc123\")\n\n# Retrieve a transaction with extra information\n# extra can be either \"address\", \"adjustment\", \"adjustments_totals\", \"business\", \"customer\", \"discount\"\ntransaction = Paddle::Transaction.retrieve(id: \"txn_abc123\", extra: \"customer\")\n\n# Update a transaction\n# https://developer.paddle.com/api-reference/transaction/update-transaction\ntransaction.update(items: [ { price_id: \"pri_abc123\", quantity: 2 } ])\n# or\nPaddle::Transaction.update(id: \"txn_abc123\", items: [ { price_id: \"pri_abc123\", quantity: 2 } ])\n\n# Preview a transaction\n# https://developer.paddle.com/api-reference/transaction/preview-transaction\nPaddle::Transaction.preview(items: [ { price_id: \"pri_123abc\", quantity: 5 } ])\n\n# Get a PDF invoice for a transaction\n# disposition defaults to \"attachment\"\n# Returns a raw URL. This URL is not permanent and will expire.\n# https://developer.paddle.com/api-reference/transaction/get-invoice-pdf\nPaddle::Transaction.invoice(id: \"txn_abc123\", disposition: \"inline\")\n#=\u003e https://paddle-sandbox-invoice...\n```\n\n### Subscriptions\n\n```ruby\n# List all subscriptions\n# https://developer.paddle.com/api-reference/subscriptions/list-subscriptions\nPaddle::Subscription.list(customer_id: \"ctm_abc123\")\nPaddle::Subscription.list(price_id: \"pri_abc123\")\nPaddle::Subscription.list(status: \"active\")\nPaddle::Subscription.list(status: \"canceled\")\nPaddle::Subscription.list(collection_mode: \"automatic\")\nPaddle::Subscription.list(scheduled_change_action: \"cancel\")\n\n# Retrieve a subscription\nPaddle::Subscription.retrieve(id: \"sub_abc123\")\n\n# Retrieve a subscription with extra information\n# extra can be either \"next_transaction\" or \"recurring_transaction_details\"\nsubscription = Paddle::Subscription.retrieve(id: \"sub_abc123\", extra: \"next_transaction\")\n\n# Preview an update to a subscription\n# https://developer.paddle.com/api-reference/subscriptions/preview-subscription\nPaddle::Subscription.preview(id: \"sub_abc123\", items: [ { price_id: \"pri_123abc\", quantity: 2 } ])\n\n# Update a subscription\n# https://developer.paddle.com/api-reference/subscriptions/update-subscription\nsubscription.update(billing_details: {purchase_order_number: \"PO-1234\"})\n# or\nPaddle::Subscription.update(id: \"sub_abc123\", billing_details: {purchase_order_number: \"PO-1234\"})\n\n# Get a transaction to update payment method\n# https://developer.paddle.com/api-reference/subscriptions/update-payment-method\nPaddle::Subscription.get_transaction(id: \"sub_abc123\")\n\n# Create a one-time charge for a subscription\n# https://developer.paddle.com/api-reference/subscriptions/create-one-time-charge\nPaddle::Subscription.charge(id: \"sub_abc123\", items: [ { price_id: \"pri_123abc\", quantity: 2 } ], effective_from: \"immediately\")\n\n# Pause a subscription\n# https://developer.paddle.com/api-reference/subscriptions/pause-subscription\nPaddle::Subscription.pause(id: \"sub_abc123\")\nPaddle::Subscription.pause(id: \"sub_abc123\", effective_from: \"next_billing_period\")\nPaddle::Subscription.pause(id: \"sub_abc123\", effective_from: \"immediately\")\n\n# Resume a paused subscription\n# https://developer.paddle.com/api-reference/subscriptions/resume-subscription\nPaddle::Subscription.resume(id: \"sub_abc123\", effective_from: \"next_billing_period\")\nPaddle::Subscription.resume(id: \"sub_abc123\", effective_from: \"immediately\")\n\n# Cancel a subscription\n# https://developer.paddle.com/api-reference/subscriptions/cancel-subscription\nPaddle::Subscription.cancel(id: \"sub_abc123\", effective_from: \"next_billing_period\")\nPaddle::Subscription.cancel(id: \"sub_abc123\", effective_from: \"immediately\")\n\n# Activate a trialing subscription\n# https://developer.paddle.com/api-reference/subscriptions/activate-subscription\nPaddle::Subscription.activate(id: \"sub_abc123\")\n```\n\n### Customer Portal Sessions\n\n```ruby\n# Create a Customer Portal Session\n# https://developer.paddle.com/api-reference/customer-portals/create-customer-portal-session\nPaddle::PortalSession.create customer: \"ctm_abc123\"\nPaddle::PortalSession.create customer: \"ctm_abc123\", subscription_ids: [\"sub_abc123\"]\n```\n\n\n### Adjustments\n\n```ruby\n# List all adjustments\n# https://developer.paddle.com/api-reference/adjustments/list-adjustments\nPaddle::Adjustment.list(subscription_id: \"sub_abc123\")\nPaddle::Adjustment.list(transaction_id: \"txn_abc123\")\nPaddle::Adjustment.list(action: \"refund\")\n\n# Create an adjustment\n# https://developer.paddle.com/api-reference/adjustments/create-adjustment\nPaddle::Adjustment.create(\n  action: \"refund\",\n  transaction_id: \"txn_abc123\",\n  reason: \"Requested by customer\",\n  items: [\n    {\n      type: \"full\",\n      item_id: \"txnitm_anc123\"\n    }\n  ]\n)\n\n# Get a credit note for an adjustment\n# disposition defaults to \"attachment\"\n# Returns a raw URL. This URL is not permanent and will expire.\n# https://developer.paddle.com/api-reference/adjustments/get-credit-note-pdf\nPaddle::Adjustment.credit_note(id: \"adj_abc123\", disposition: \"inline\")\n```\n\n### Event Types\n\n```ruby\n# List all event types\nPaddle::EventType.list\n```\n\n### Events\n\n```ruby\n# List all events\n# https://developer.paddle.com/api-reference/events/list-events\nPaddle::Event.list\n```\n\n### Notification Settings\n\nUsed for creating webhook and email notifications\n\n```ruby\n# List all notification settings\nPaddle::NotificationSetting.list\n\n# Retrieve a notification setting\nsetting = Paddle::NotificationSetting.retrieve(id: \"ntfset_abc123\")\n\n# Create a notification setting\n# https://developer.paddle.com/api-reference/notification-settings/create-notification-setting\nPaddle::NotificationSetting.create(\n  description: \"Webhook for App\",\n  destination: \"https://myapp.com/webhook\",\n  type: \"webhook\",\n  subscribed_events: [\n    \"subscription.activated\",\n    \"transaction.completed\"\n  ]\n)\n\n# Update a notification setting\n# https://developer.paddle.com/api-reference/notification-settings/update-notification-setting\nsetting.update(subscribed_events: %w[subscription.activated transaction.completed transaction.billed])\n# or\nPaddle::NotificationSetting.update(id: \"ntfset_abc123\",\n  subscribed_events: [\n    \"subscription.activated\",\n    \"transaction.completed\",\n    \"transaction.billed\"\n  ]\n)\n\n# Delete a notification setting\nPaddle::NotificationSetting.delete(id: \"ntfset_abc123\")\n```\n\n### Notifications\n\n```ruby\n# List all notifications\nPaddle::Notification.list\nPaddle::Notification.list(notification_setting_id: \"ntfset_abc123\")\nPaddle::Notification.list(status: \"delivered\")\nPaddle::Notification.list(status: \"failed\")\n\n# Retrieve a notification\nPaddle::Notification.retrieve(id: \"ntf_abc123\")\n\n# Replay a notification\n# Attempts to resend a notification\n# (currently not working)\nPaddle::Notification.replay(id: \"ntf_abc123\")\n\n# List all logs for a notification\n# https://developer.paddle.com/api-reference/notifications/list-notification-logs\nPaddle::Notification.logs(id: \"ntf_abc123\")\n```\n\n### Reports\n\n```ruby\n# List all reports\nPaddle::Report.list\n\n# Retrieve a report\nPaddle::Report.retrieve(id: \"rpt_abc123\")\n\n# Get CSV download link for a report\n# Returns a raw URL. This URL is not permanent and will expire.\n# https://developer.paddle.com/api-reference/reports/get-report-csv\nPaddle::Report.csv(id: \"rpt_abc123\")\n\n# Create a Report\n# https://developer.paddle.com/api-reference/reports/create-report\nPaddle::Report.create(\n  type: \"transactions\",\n  filters: [\n    {name: \"updated_at\", operator: \"lt\", value: \"2024-04-30\"},\n    {name: \"updated_at\", operator: \"gte\", value: \"2024-04-01\"}\n  ]\n)\n```\n\n### Webhook Simulation Types\n\nRetrieves a list of Simulation Types - https://developer.paddle.com/api-reference/simulation-types/overview\n\n```ruby\nPaddle::SimulationType.list\n```\n\n### Webhook Simulations\n\n```ruby\n# List all simulations\nPaddle::Simulation.list\nPaddle::Simulation.list(status: \"archived\")\nPaddle::Simulation.list(notification_setting_id: \"nftset_abc123\")\n\n# Create a simulation\n# https://developer.paddle.com/api-reference/simulations/create-simulation\nPaddle::Simulation.create(notification_setting_id: \"ntfset_abc123\", name: \"Customer Create\", type: \"customer.completed\")\nPaddle::Simulation.create(notification_setting_id: \"ntfset_abc123\", name: \"Subscription Created\", type: \"subscription_creation\")\n\n# Retrieve a simulation\nPaddle::Simulation.retrieve(id: \"ntfsim_abc123\")\n\n# Update a simulation\n# https://developer.paddle.com/api-reference/simulations/update-simulation\nPaddle::Simulation.update(id: \"ntfsim_abc123\", name: \"Simulation 2\")\nPaddle::Simulation.update(id: \"ntfsim_abc123\", status: \"archived\")\n\n# List all simulation runs\nPaddle::Simulation.runs(id: \"ntfsim_abc123\")\n\n# Create a simulation run\n# https://developer.paddle.com/api-reference/simulations/create-simulation-run\nPaddle::SimulationRun.create(simulation_id: \"ntfsim_abc123\")\n\n# Retrieve a simulation run\nPaddle::SimulationRun.retrieve(simulation_id: \"ntfsim_abc123\", id: \"ntfsimrun_abc123\")\n\n# List all simulation run events\nPaddle::SimulationRun.events(simulation_id: \"ntfsim_abc123\", run_id: \"ntfsimrun_abc123\")\n\n# Replay a simulation run event\n# https://developer.paddle.com/api-reference/simulations/replay-simulation-run-event\nPaddle::SimulationRunEvent.replay(simulation_id: \"ntfsim_abc123\", run_id: \"ntfsimrun_abc123\", id: \"ntfsimevt_abc123\")\n```\n\n## Classic API\n\nFor accessing the Paddle Classic API\n\n### Set Client Details\n\nFirstly you'll need to set your Vendor ID, Vendor Auth Code and if you want\nto use the Sandbox API or not.\n\nYou can find your vendor details [here for production](https://vendors.paddle.com/authentication),\nor [here for sandbox](https://sandbox-vendors.paddle.com/authentication)\n\n```ruby\n@client = Paddle::Classic::Client.new(\n  vendor_id: \"\",\n  vendor_auth_code: \"\",\n  # Use the sandbox version of the API\n  sandbox: true\n)\n```\n\n### Plans\n\n```ruby\n# Retrieves a list of Plans\n@client.plans.list\n```\n\n### Subscription Users\n\n```ruby\n# List all users subscribed to any plan\n@client.users.list\n@client.users.list(subscription_id: \"abc123\")\n@client.users.list(plan_id: \"abc123\")\n@client.users.list(state: \"active\")\n@client.users.list(state: \"deleted\")\n\n# Update a user's subscription\n# https://developer.paddle.com/api-reference/e3872343dfbba-update-user\n@client.users.update(subscription_id: \"abc123\")\n\n# Pause a user's subscription\n@client.users.pause(subscription_id: \"abc123\")\n\n# Unpause a user's subscription\n@client.users.unpause(subscription_id: \"abc123\")\n\n# Update the Postcode/ZIP Code of a user's subscription\n@client.users.update_postcode(subscription_id: \"abc123\", postcode: \"123abc\")\n\n# Cancel a user's subscription\n@client.users.cancel(subscription_id: \"abc123\")\n```\n\n## Contributing\n\nBug reports and pull requests are welcome on GitHub at https://github.com/deanpcmad/paddle.\n\n## License\n\nThe gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).\n","funding_links":["https://buymeacoffee.com/deanpcmad","https://ko-fi.com/deanpcmad"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeanpcmad%2Fpaddle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeanpcmad%2Fpaddle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeanpcmad%2Fpaddle/lists"}