{"id":30055160,"url":"https://github.com/eoan-ermine/e621-py","last_synced_at":"2025-10-29T06:43:18.928Z","repository":{"id":40309593,"uuid":"330454094","full_name":"eoan-ermine/e621-py","owner":"eoan-ermine","description":"A feature-rich high-level e621 and e926 API wrapper.","archived":false,"fork":false,"pushed_at":"2022-11-07T17:19:43.000Z","size":105,"stargazers_count":22,"open_issues_count":4,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-09-29T05:02:11.397Z","etag":null,"topics":["api","e621","e926","furry","yiff"],"latest_commit_sha":null,"homepage":"","language":"Python","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/eoan-ermine.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-01-17T18:04:04.000Z","updated_at":"2025-04-02T22:16:29.000Z","dependencies_parsed_at":"2023-01-22T11:45:52.859Z","dependency_job_id":null,"html_url":"https://github.com/eoan-ermine/e621-py","commit_stats":null,"previous_names":["eoan-ermine/e621-py","patriotrossii/e621-py"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/eoan-ermine/e621-py","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoan-ermine%2Fe621-py","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoan-ermine%2Fe621-py/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoan-ermine%2Fe621-py/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoan-ermine%2Fe621-py/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eoan-ermine","download_url":"https://codeload.github.com/eoan-ermine/e621-py/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eoan-ermine%2Fe621-py/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281577681,"owners_count":26524886,"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-29T02:00:06.901Z","response_time":59,"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":["api","e621","e926","furry","yiff"],"created_at":"2025-08-07T21:48:01.914Z","updated_at":"2025-10-29T06:43:18.912Z","avatar_url":"https://github.com/eoan-ermine.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# e621\ne621 is a feature-rich high-level e621 and e926 API wrapper.\n\nIt provides access to almost all of the endpoints available. The only exceptions are unstable and admin-only endpoints.\n\ne621 API documentation is currently highly undocumented, unstable, and sometimes even untruthful. We tried to wrap it in a sanest possible way, properly documenting all the possible ways to interact with it. However, if you still have any questions, bugs to report, or features to request -- please, create an issue on our [github page](\"https://github.com/PatriotRossii/e621-py\") and we will reply as soon as we can.\n\n\n## Installation\n```bash\n$ pip install e621\n```\n\n## Quickstart\nWe translate everything the API returns to python data types created with pydantic. Everything is 100% typehinted so you get autocomplete everywhere and your IDE will warn you if you are sending invalid arguments or using nonexistent attributes.\n\n### Creating the api client\n* To create the most basic client, all you need to do is\n```python\nfrom e621 import E621\n\napi = E621()\n```\n\n* If you wish to get information about your account, use your blacklist or create/update/delete any of the e621's entities, you will have to create an api key and put it into the API client as such:\n```python\napi = E621((\"your_e621_login\", \"your_e621_api_key\"))\n```\n\n### Searching\nThe majority of the endpoints allow you to query for a list of their entities, be it posts, pools or tags.\n* To search for posts that match the \"canine\" but not the \"3d\" tag:\n```python\nposts = api.posts.search(\"canine -3d\")\n# Or\nposts = api.posts.search([\"canine\", \"-3d\"])\n```\n* To search for pools whose names start with \"hello\" and end with \"kitty\":\n```python\nposts = api.pools.search(name_matches=\"hello*kitty\")\n```\n* e621 searching api is paginated, which means that if you want to get a lot of posts, you will have to make multiple requests with a different \"page\" parameter. To simplify interactions with paginated queries, all of our searching endpoints support the \"limit\", \"page\", and \"ignore_pagination\" parameters. If you wish to get a specific number of entities, simply pass the \"limit\" and \"ignore_pagination\" arguments:\n```python\ntags = api.tags.search(name_matches=\"large_*\", limit=900, ignore_pagination=True)\n```\n### Accessing Attributes\nWhen you have retrieved the entities, you can access any of their attributes without dealing with json.\n```python\nfor post in posts:\n    print(post.score.total, post.all_tags, post.relationships.parent_id)\n    with open(f\"{post.id}.{post.file.ext}\", \"wb\") as f:\n        f.write(requests.get(post.file.url).content)\n```\n### Getting\nMany entities that have unique identifiers (such as post_id or username) support indexing using these ids:\n```python\npost = api.posts.get(3291457)\nposts = api.posts.get([3291457, 3069995])\npool = api.pools.get(28232)\nuser = api.users.get(\"fox\")\n```\n### Updating\n```python\napi.posts.update(3291457, tag_string_diff=\"canine -male\", description=\"Rick roll?\")\n```\n### Creating\n```python\nfrom pathlib import Path\n\napi.posts.create(\n    tag_string=\"canine 3d rick_roll\",\n    file=Path(\"path/to/rickroll.webm\"),\n    rating=\"s\",\n    sources=[],\n    description=\"Rick roll?\"\n)\n```\n\n## FAQ\n* For more information on these and other api endpoints, please, visit our [endpoint reference](TODO)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feoan-ermine%2Fe621-py","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feoan-ermine%2Fe621-py","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feoan-ermine%2Fe621-py/lists"}