{"id":20272337,"url":"https://github.com/steemit/conveyor","last_synced_at":"2025-10-19T04:21:05.122Z","repository":{"id":72308875,"uuid":"103377285","full_name":"steemit/conveyor","owner":"steemit","description":"Conveyor - Steemit APIs","archived":false,"fork":false,"pushed_at":"2019-11-07T15:34:37.000Z","size":10424,"stargazers_count":3,"open_issues_count":8,"forks_count":11,"subscribers_count":21,"default_branch":"master","last_synced_at":"2025-04-11T04:42:15.151Z","etag":null,"topics":["blockchain","jsonrpc2","service","steem","steemit"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/steemit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2017-09-13T08:58:04.000Z","updated_at":"2020-11-22T16:10:59.000Z","dependencies_parsed_at":null,"dependency_job_id":"93af6e7a-6e30-4ab2-86ff-a774e2268065","html_url":"https://github.com/steemit/conveyor","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/steemit/conveyor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steemit%2Fconveyor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steemit%2Fconveyor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steemit%2Fconveyor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steemit%2Fconveyor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/steemit","download_url":"https://codeload.github.com/steemit/conveyor/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/steemit%2Fconveyor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272800967,"owners_count":24995185,"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-08-30T02:00:09.474Z","response_time":77,"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":["blockchain","jsonrpc2","service","steem","steemit"],"created_at":"2024-11-14T12:43:02.210Z","updated_at":"2025-10-19T04:21:05.056Z","avatar_url":"https://github.com/steemit.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\nconveyor\n========\n\nSteemit API\n\nAdditional docs may be found here:\n- [docs/Conveyor.md](./docs/Conveyor.md)\n- [docs/Conveyor.html](./docs/Conveyor.html)\n- [user-data/README.md](./user-data/README.md)\n\n\nFeature flags\n-------------\n\nFeature flags allows our apps (condenser mainly) to hide certain features behind flags.\n\nFlags can be set individually for users or probabilistically to roll out a feature incrementally, for example `set_flag_probability orange_theme 0.5` will enable the flag for ~50% of our users. Changing the flag probability does not re-randomize the user selection so that a user that had their flag enabled at 0.5 will still have it enabled when going to 0.75. This is achieved by seeding a PRNG with the shasum of username+flag.\n\nFlags set individually per user always takes precedence.\n\n### API\n\n#### `get_feature_flags \u003caccount\u003e`\n\nGet feature flags object for the username `\u003caccount\u003e`.\n\n*Authenticated: requires signature of `\u003caccount\u003e` or an admin account.*\n\nReturns: Key value mapping of feature flags, missing flags should be treated as `false` by the client.\n\n```js\n{\n    horse_hockey_minigame_unlocked: true,\n    donovan_theme: false\n}\n```\n\n\n#### `get_feature_flag \u003caccount\u003e \u003cflag\u003e`\n\nGet specific `\u003cflag\u003e` for the username `\u003caccount\u003e`.\n\n*Authenticated: requires signature of \u003caccount\u003e or an admin account.*\n\nReturns: false/true\n\n\n#### `set_feature_flag \u003caccount\u003e \u003cflag\u003e \u003cvalue\u003e`\n\nSet a `\u003cflag\u003e` override for the username `\u003caccount\u003e`.\n\n*Authenticated: requires signature of an admin account.*\n\n\n#### `set_feature_flag_probability \u003cflag\u003e \u003cprobability\u003e`\n\nSet the `\u003cprobability\u003e` expressed as a fraction `0.0` to `1.0` that a `\u003cflag\u003e` will resolve to true.\n\n*Authenticated: requires signature of an admin account.*\n\n\n#### `get_feature_flag_probabilities`\n\nGet all the set flag probabilities.\n\n*Authenticated: requires signature of an admin account.*\n\n```js\n{\n    horse_hockey_minigame_unlocked: 1.0,\n    donovan_theme: 0.5,\n    lucky_af: 0.0001\n}\n```\n\n\nUser data\n---------\n\nConveyor is the central point for storing sensitive user data (email, phone, etc). No other services should store this data and should instead query for it here every time.\n\n### API\n\n#### `get_user_data \u003caccount\u003e`\n\nReturn user data for `\u003caccount\u003e`, returns an error if the account is not found.\n\n*Authenticated: requires signature of an admin account or the requested user.*\n\n```js\n{\n    phone: '+1480080085',\n    email: 'foo@bar.com'\n}\n```\n\n\n#### `set_user_data \u003caccount\u003e \u003cdata\u003e`\n\nSet user data for `\u003caccount\u003e`.\n\n*Authenticated: requires signature of an admin account.*\n\n`\u003cdata\u003e` is an object with the keys `email` and `phone`.\n\n\n#### `is_email_registered \u003cemail\u003e`\n\nCheck if the `\u003cemail\u003e` address is in the database.\n\n*Authenticated: requires signature of an admin account.*\n\nReturns `true` or `false`\n\n\n#### `is_phone_registered \u003cphone\u003e`\n\nCheck if the `\u003cphone\u003e` number is in the database.\n\n*Authenticated: requires signature of an admin account.*\n\nReturns `true` or `false`\n\n\n\nUser tags\n---------\n\nTagging mechanism for other services, allows defining and assigning tags to accounts (or other identifiers) and querying for them.\n\n### API\n\n#### `define_tag \u003cname\u003e \u003cdescription\u003e`\n\nDefine a new tag, valid tag names include only alphanumeric characters and underscore (`_`), description is required.\n\n*Authenticated: requires signature of an admin account.*\n\n\n#### `list_tags`\n\nList all defined tags.\n\n*Authenticated: requires signature of an admin account.*\n\n```js\n[ { name: 'make_site_unbearable', description: 'Slows down the site for user by adding a sleep(5) to every request.' },\n  { name: 'accepted_tos', description: 'User has accepted the terms of service' } ]\n```\n\n#### `assign_tag \u003cuid\u003e \u003ctag\u003e [memo]`\n\nAssign `\u003ctag\u003e` to user, throws if tag is not defined.\n\nNote that this is a no-op if user already has the tag.\n\n*Authenticated: requires signature of an admin account.*\n\n\n#### `unassign_tag \u003cuid\u003e \u003ctag\u003e`\n\nRemove `\u003ctag\u003e` from user.\n\nNote that this is a no-op if user already has the tag.\n\n*Authenticated: requires signature of an admin account.*\n\n\n#### `get_users_by_tags \u003ctags\u003e`\n\nGet a list of users that has `\u003ctags\u003e` assigned, `\u003ctags\u003e` can be either\na string or an array of strings in which case the user must have all the tags given\nto be included in the response.\n\n*Authenticated: requires signature of an admin account.*\n\n```js\n[ 'some_user', 'another_user' ]\n```\n\n\n#### `get_tags_for_user \u003cuid\u003e`\n\nGet a list of tags assigned to `\u003cuid\u003e`.\n\n```js\n[ 'some_tag', 'another_tag' ]\n```\n\n*Authenticated: requires signature of an admin account.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteemit%2Fconveyor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsteemit%2Fconveyor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsteemit%2Fconveyor/lists"}