{"id":13411778,"url":"https://github.com/pay-rails/pay","last_synced_at":"2025-10-30T21:02:54.623Z","repository":{"id":37431733,"uuid":"80657370","full_name":"pay-rails/pay","owner":"pay-rails","description":"Payments for Ruby on Rails apps","archived":false,"fork":false,"pushed_at":"2025-10-07T00:10:08.000Z","size":6422,"stargazers_count":2149,"open_issues_count":2,"forks_count":339,"subscribers_count":29,"default_branch":"main","last_synced_at":"2025-10-22T05:50:50.011Z","etag":null,"topics":["braintree","engine","hacktoberfest","paddle","pay","payment-provider","payments","rails","sca","stripe","subscription"],"latest_commit_sha":null,"homepage":"https://github.com/pay-rails/pay","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pay-rails.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/contributing/adding_a_payment_processor.md","funding":".github/FUNDING.yml","license":"MIT-LICENSE","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["excid3"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2017-02-01T19:50:52.000Z","updated_at":"2025-10-20T07:28:15.000Z","dependencies_parsed_at":"2023-02-18T00:15:56.446Z","dependency_job_id":"f0995b1a-11d7-4190-8718-9f6d8bfd88df","html_url":"https://github.com/pay-rails/pay","commit_stats":{"total_commits":1572,"total_committers":125,"mean_commits":12.576,"dds":0.3371501272264631,"last_synced_commit":"937b85b55e2c94ae2194dfc28ac03c56a7d05e7d"},"previous_names":[],"tags_count":145,"template":false,"template_full_name":null,"purl":"pkg:github/pay-rails/pay","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pay-rails%2Fpay","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pay-rails%2Fpay/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pay-rails%2Fpay/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pay-rails%2Fpay/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pay-rails","download_url":"https://codeload.github.com/pay-rails/pay/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pay-rails%2Fpay/sbom","scorecard":{"id":724348,"data":{"date":"2025-08-11","repo":{"name":"github.com/pay-rails/pay","commit":"d7b3d7ad749c4624b5357e8264454104179c579c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.3,"checks":[{"name":"Code-Review","score":1,"reason":"Found 5/30 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/publish_gem.yml:19","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/publish_gem.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: MIT-LICENSE:0","Info: FSF or OSI recognized license: MIT License: MIT-LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/pay-rails/pay/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/pay-rails/pay/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:56: update your workflow using https://app.stepsecurity.io/secureworkflow/pay-rails/pay/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/pay-rails/pay/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:107: update your workflow using https://app.stepsecurity.io/secureworkflow/pay-rails/pay/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:109: update your workflow using https://app.stepsecurity.io/secureworkflow/pay-rails/pay/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:158: update your workflow using https://app.stepsecurity.io/secureworkflow/pay-rails/pay/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:160: update your workflow using https://app.stepsecurity.io/secureworkflow/pay-rails/pay/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish_gem.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/pay-rails/pay/publish_gem.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish_gem.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/pay-rails/pay/publish_gem.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish_gem.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/pay-rails/pay/publish_gem.yml/main?enable=pin","Warn: containerImage not pinned by hash: .devcontainer/Dockerfile:3","Info:   0 out of   5 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   6 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 11 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":8,"reason":"2 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-76r7-hhxj-r776","Warn: Project is vulnerable to: GHSA-r4mg-4433-c7g3"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T12:19:45.706Z","repository_id":37431733,"created_at":"2025-08-22T12:19:45.706Z","updated_at":"2025-08-22T12:19:45.706Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280756678,"owners_count":26385389,"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","status":"online","status_checked_at":"2025-10-24T02:00:06.418Z","response_time":73,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["braintree","engine","hacktoberfest","paddle","pay","payment-provider","payments","rails","sca","stripe","subscription"],"created_at":"2024-07-30T20:01:16.840Z","updated_at":"2025-10-30T21:02:54.555Z","avatar_url":"https://github.com/pay-rails.png","language":"Ruby","funding_links":["https://github.com/sponsors/excid3"],"categories":["Ruby","🚂 **Acelere usando Rails**","Payments"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg src=\"docs/images/logo.svg\" height=\"50px\"\u003e\u003c/p\u003e\n\n# 💳 Pay - Payments engine for Ruby on Rails\n\n[![Build Status](https://github.com/pay-rails/pay/workflows/Tests/badge.svg)](https://github.com/pay-rails/pay/actions) [![Gem Version](https://badge.fury.io/rb/pay.svg)](https://badge.fury.io/rb/pay) \u003cimg src=\"docs/images/stripe_partner_badge.svg\" height=\"26px\"\u003e\n\nPay is a payments engine for Ruby on Rails 6.0 and higher.\n\n\u003e [!TIP]\n\u003e Check out [Jumpstart](https://jumpstartrails.com) for Rails Starter Kit with Pay already integrated!\n\n**Upgrading?** Check the [UPGRADE](UPGRADE.md) guide for required changes and/or migration when upgrading from a previous version of Pay.\n\n## 🧑‍💻 Tutorial\n\nWant to see how Pay works? Check out our video getting started guide.\n\n\u003ca href=\"https://www.youtube.com/watch?v=hYlOmqyJIgc\" target=\"_blank\"\u003e\u003cimg width=\"50%\" src=\"http://i3.ytimg.com/vi/hYlOmqyJIgc/maxresdefault.jpg\"\u003e\u003c/a\u003e\n\n## 🏦 Payment Processors\n\nOur supported payment processors are:\n\n- Stripe ([SCA Compatible](https://stripe.com/docs/strong-customer-authentication) using API version `2022-11-15`)\n- Paddle (SCA Compatible \u0026 supports PayPal)\n- Braintree (supports PayPal)\n- Lemon Squeezy (supports PayPal)\n- [Fake Processor](docs/fake_processor/1_overview.md) (used for generic trials without cards, free subscriptions, testing, etc)\n\nWant to add a new payment provider? Contributions are welcome.\n\n\u003e We make our best attempt to standardize the different payment providers. They function differently so keep that in mind if you plan on doing more complex payments. It would be best to stick with a single payment provider in that case so you don't run into discrepancies.\n\n## 📚 Docs\n\n* [Installation](docs/1_installation.md)\n* [Configuration](docs/2_configuration.md)\n* **Usage**\n  * [Customers](docs/3_customers.md)\n  * [Payment Methods](docs/4_payment_methods.md)\n  * [Charges](docs/5_charges.md)\n  * [Subscriptions](docs/6_subscriptions.md)\n  * [Routes \u0026 Webhooks](docs/7_webhooks.md)\n  * [Customizing Pay Models](docs/8_customizing_models.md)\n\n* **Payment Processors**\n  * [Stripe](docs/stripe/1_overview.md)\n  * [Braintree](docs/braintree/1_overview.md)\n  * [Paddle](docs/paddle_billing/1_overview.md)\n  * [Lemon Squeezy](docs/lemon_squeezy/1_overview.md)\n  * [Fake Processor](docs/fake_processor/1_overview.md)\n  * [Asaas (Community)](https://github.com/PedroAugustoRamalhoDuarte/pay-asaas)\n* **Marketplaces**\n  * [Stripe Connect](docs/marketplaces/stripe_connect.md)\n* **Contributing**\n  * [Adding A Payment Processor](docs/contributing/adding_a_payment_processor.md)\n\n## 🙏 Contributing\n\nIf you have an issue you'd like to submit, please do so using the issue tracker in GitHub. In order for us to help you in the best way possible, please be as detailed as you can.\n\nFor those using devcontainers, if you want to test the application with different databases:\n1. Uncomment the `DATABASE_URL` corresponding to the database type you wish to use in the `.devcontainer/devcontainer.json` file.\n2. Rebuild the devcontainer, which will configure the application to use the selected database for your development environment.\n\nIf you'd like to open a PR please make sure the following things pass:\n\n```ruby\nbin/rails db:test:prepare\nbin/rails test\nbundle exec standardrb\n```\n\n## 📝 License\n\nThe gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpay-rails%2Fpay","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpay-rails%2Fpay","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpay-rails%2Fpay/lists"}