{ "info": { "author": "Micha\u0142 Sa\u0142aban", "author_email": "michal@salaban.info", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "Revolut API client for Python\n=============================\n\n|travis|_ |coveralls|_\n\n.. |travis| image:: https://travis-ci.com/emesik/revolut-python.svg\n.. _travis: https://travis-ci.com/emesik/revolut-python\n\n\n.. |coveralls| image:: https://coveralls.io/repos/github/emesik/revolut-python/badge.svg\n.. _coveralls: https://coveralls.io/github/emesik/revolut-python\n\nA Python wrapper for Revolut API, Python 2.x and 3.x compatible.\n\nRelease 0.6, a working beta\n\nWhat is supported?\n------------------\n\nAs listed in `Revolut docs`_:\n\n.. _`Revolut docs`: https://revolutdev.github.io/business-api/\n\n+------------------------------------+\n| **Accounts** |\n+------------------------------+-----+\n| Get Accounts | yes |\n+------------------------------+-----+\n| Get Account | yes |\n+------------------------------+-----+\n| Get Account Details | yes |\n+------------------------------+-----+\n| **Counterparties** |\n+------------------------------+-----+\n| Add Revolut Counterparty | yes |\n+------------------------------+-----+\n| Add non-Revolut Counterparty | yes |\n+------------------------------+-----+\n| Delete Counterparty | yes |\n+------------------------------+-----+\n| Get Counterparty | yes |\n+------------------------------+-----+\n| Get Counterparties | yes |\n+------------------------------+-----+\n| **Payments** |\n+------------------------------+-----+\n| Transfer | yes |\n+------------------------------+-----+\n| Create Payment | yes |\n+------------------------------+-----+\n| Schedule Payment | no |\n+------------------------------+-----+\n| Check Payment Status | yes |\n+------------------------------+-----+\n| Cancel Payment | no |\n+------------------------------+-----+\n| Get Transactions | yes |\n+------------------------------+-----+\n\nAuthorization\n-------------\n\nIn September 2019 Revolut introduced much more complex authorization system based on OAuth2.\nSince version 0.6 this module supports only the new authorization model and old access keys\nbecome obsolete.\n\nThe flow\n~~~~~~~~\n\nThis description should help you get through the auth mess. It assumes you want to run the module\nin a non-interactive way (e.g. as a backend for a web service). Mobile applications will require\nsome additional research on your side.\n\n 1. Make sure you have OpenSSL installed.\n 2. Run `$ revolut_genkey.sh` to generate key pair. Answer questions about your organization.\n 3. Two files will be generated: `prvkey.pem` and `pubkey.pem`. Store them in a safe place.\n The script will also print the contents of `pubkey.pem` to the console. This is your\n *X509 public key*.\n 4. In Revolut panel go to *Settings / API* and click *Set up API access*.\n 5. Paste the public key into the form field.\n 6. If you don't know what *OAuth redirect URI* means and why you need it, enter some\n bullshit URL there. It'd be better, however, if it pointed to your domain. Submit the form.\n 7. You'll land back in API settings, this time you will be presented with `client_id` and `iss`\n values needed in further steps.\n 8. Click *Enable API access to your account*, continue with *Authorize*.\n 9. Confirm with SMS code.\n 10. After a couple of seconds you'll be redirected to the URL you have provided as *OAuth\n redirect*. Check the address bar. It will contain a *code* parameter. This is your\n `auth_code`.\n 11. Run `$ revolut_getjwt.py prvkey.pem `. The output will be your `jwt`.\n 12. Run `$ revolut_gettokens.py `. The script will return\n `access_token` (with expiration time) and `refresh_token`.\n (If you do it too slowly, the auth code expires and you get \"unauthorized_client\" error.\n Return to step 8.)\n\nNow you're almost done, with some pieces of data on your hand. There are two ways to continue:\n\n 1. Create `revolut.session.TemporarySession` with the `access_token` and use it until the token\n expires.\n 2. Create `revolut.session.RenewableSession` with `refresh_token`, `client_id` and `jwt`. It\n will be more durable, creating fresh `access_token` each time.\n\nHowever, it seems that **after 90 days your API access expires anyway** and you'd have to click\n*Refresh access* in the panel and restart the above process from point 8. Or whatever the EU\nshitheads invented in PSD2.\n\n\nCopyrights\n----------\n\nReleased under the BSD 3-Clause License. See `LICENSE.txt`_.\n\nCopyright (c) 2018 Micha\u0142 Sa\u0142aban \n\n.. _`LICENSE.txt`: LICENSE.txt\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/emesik/revolut-python/", "keywords": "revolut payments", "license": "BSD-3-Clause", "maintainer": "", "maintainer_email": "", "name": "revolut-python", "package_url": "https://pypi.org/project/revolut-python/", "platform": "", "project_url": "https://pypi.org/project/revolut-python/", "project_urls": { "Homepage": "https://github.com/emesik/revolut-python/" }, "release_url": "https://pypi.org/project/revolut-python/0.6/", "requires_dist": null, "requires_python": "", "summary": "Revolut API client for Python", "version": "0.6" }, "last_serial": 5916839, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "98fa08686bba5631fc0df9a004a1e4bc", "sha256": "3fc7a81dda756d4a78f06236b40e4ec59fe2bf62a879dc87173a9f9bd6f50b2f" }, "downloads": -1, "filename": "revolut-python-0.1.tar.gz", "has_sig": false, "md5_digest": "98fa08686bba5631fc0df9a004a1e4bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5190, "upload_time": "2018-11-21T22:04:02", "url": "https://files.pythonhosted.org/packages/9e/cb/bd90f05323f55c6a3e59d135f8cdc7f6a5145799787ba91cd93531ee767c/revolut-python-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "0c9078a539d2ba757c1b2afb3a7ef898", "sha256": "f6f9bd97049924992e76ea391a59bc2ec3671824fef25982157f637f3e12f76d" }, "downloads": -1, "filename": "revolut-python-0.2.tar.gz", "has_sig": false, "md5_digest": "0c9078a539d2ba757c1b2afb3a7ef898", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5663, "upload_time": "2018-11-25T16:44:18", "url": "https://files.pythonhosted.org/packages/c0/f5/fee9f30ac1fa7a385faf487247bf2eec4e2c2d44ad7229f20ce589e0fdb1/revolut-python-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "91597afe733ec60e82a2da03dab0938d", "sha256": "7ed6635e1eb17ef77ecaf71d350f03c9e795bca6229e11710962459d49720a3a" }, "downloads": -1, "filename": "revolut-python-0.3.tar.gz", "has_sig": false, "md5_digest": "91597afe733ec60e82a2da03dab0938d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5904, "upload_time": "2018-12-17T15:23:46", "url": "https://files.pythonhosted.org/packages/e5/ae/67727062f4678c6bd5316cbbe8cbf7e21c2c8bbcc1aa166c02917b2ea9bb/revolut-python-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "931ec0f20667857a01fb9980a2bddca9", "sha256": "784ab43976765fae5b19d52a6b4272f668d0d83921639ac070b08b8b5ef41cb4" }, "downloads": -1, "filename": "revolut-python-0.4.tar.gz", "has_sig": false, "md5_digest": "931ec0f20667857a01fb9980a2bddca9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5986, "upload_time": "2019-01-18T10:13:16", "url": "https://files.pythonhosted.org/packages/0c/0e/21eb39bbca195e34e2e576b977590ab4609b601156d6e6c8146e769b9d2d/revolut-python-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "caf423097c92e0d8ecc2181b6e73b4a4", "sha256": "ed70d015093bb9f8e9116c279c977c687e8d815be6068dccfb32d0cd5ffc081b" }, "downloads": -1, "filename": "revolut-python-0.5.tar.gz", "has_sig": false, "md5_digest": "caf423097c92e0d8ecc2181b6e73b4a4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6094, "upload_time": "2019-02-18T15:49:17", "url": "https://files.pythonhosted.org/packages/36/59/2e0ed4f087f208c3b60b78a9e90b95f2f473b31f29b9e4f082c9b2518384/revolut-python-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "976f97b40a86b0f1da784bff302db69d", "sha256": "157ec21f0a42c8c840ddca353a3a381686b22542adc61db8239a06375873ee7b" }, "downloads": -1, "filename": "revolut-python-0.6.tar.gz", "has_sig": false, "md5_digest": "976f97b40a86b0f1da784bff302db69d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9716, "upload_time": "2019-10-02T08:54:43", "url": "https://files.pythonhosted.org/packages/ef/fa/7da4a87e45f2d67497631a9e72c63355537a71e9e43d0d9160a89a489de5/revolut-python-0.6.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "976f97b40a86b0f1da784bff302db69d", "sha256": "157ec21f0a42c8c840ddca353a3a381686b22542adc61db8239a06375873ee7b" }, "downloads": -1, "filename": "revolut-python-0.6.tar.gz", "has_sig": false, "md5_digest": "976f97b40a86b0f1da784bff302db69d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9716, "upload_time": "2019-10-02T08:54:43", "url": "https://files.pythonhosted.org/packages/ef/fa/7da4a87e45f2d67497631a9e72c63355537a71e9e43d0d9160a89a489de5/revolut-python-0.6.tar.gz" } ] }