openapi: 3.1.0 info: title: Cosmily V1 API Docs! description: Skin-tech community termsOfService: 'http://swagger.io/terms/' contact: email: info@cosmily.com license: name: 'Apache, 2.0' url: 'http://www.apache.org/licenses/LICENSE-2.0.html' version: 1.0.0 servers: - url: 'https://{environment}.cosmily.com/api/{version}' variables: environment: default: api enum: - api - staging version: default: v1 enum: - v1 tags: - name: Cosmily V1 description: 'Skincare brands, products, and ingredients on Cosmily' externalDocs: description: Cosmily.com url: 'https://cosmily.com' paths: /analyze/ingredient_list: $ref: 'paths/analyze.ingredient_list.yml' /analyze/ingredient_groups: $ref: 'paths/analyze.ingredient_groups.yml' /analyze/ingredient_group: $ref: 'paths/analyze.ingredient_group.yml' '/analyze/claim/{token}': $ref: 'paths/analyze.claim.(token).yml' '/analyze/shared/{token}': $ref: 'paths/analyze.shared.(token).yml' '/analyze/{token}/ingredient_feelings': $ref: 'paths/analyze.(token).ingredient_feelings.yml' '/analyze/{token}/categorize': $ref: 'paths/analyze.(token).categorize.yml' '/analyze/{token}/missing_ingredients': $ref: 'paths/analyze.(token).missing_ingredients.yml' '/analyze/{token}/personalize': $ref: 'paths/analyze.(token).personalize.yml' '/analyze/{token}/skin_calc': $ref: 'paths/analyze.(token).skin_calc.yml' '/analyze/{token}/rules': $ref: 'paths/analyze.(token).rules.yml' '/analyze/{token}/similar_products': $ref: 'paths/analyze.(token).similar_products.yml' /analyze/effects: $ref: 'paths/analyze.effects.yml' /analyze/extract_label: $ref: 'paths/analyze.extract_label.yml' /articles: $ref: paths/articles.yml '/articles/{id_or_alias}': $ref: 'paths/articles.(id_or_alias).yml' /brands: $ref: paths/brands.yml '/brands/{id_or_alias}': allOf: - $ref: 'paths/brands.(id_or_alias).yml' - $ref: 'paths/brands.(id_or_alias).update.yml' '/brands/{id_or_alias}/products': $ref: 'paths/brands.(id_or_alias).products.yml' '/brands/{id_or_alias}/transfer_ownership': $ref: 'paths/brands.(id_or_alias).transfer_ownership.yml' '/breadcrumbs/product_category/{id_or_alias}': $ref: 'paths/breadcrumbs.product_category.(id_or_alias).yml' '/breadcrumbs/product/{id_or_alias}': $ref: 'paths/breadcrumbs.product.(id_or_alias).yml' '/buy/{id_or_alias}/amzn': $ref: 'paths/buy.(id_or_alias).amzn.yml' '/buy/{id_or_alias}': $ref: 'paths/buy.(id_or_alias).yml' /census/countries: $ref: 'paths/census.countries.yml' /compare/expand: $ref: 'paths/compare.expand.yml' /compare/share: $ref: 'paths/compare.share.yml' '/compare/shared/{token}': $ref: 'paths/compare.shared.(token).yml' /contests/most_liked_routine/leaderboard/previous_week: $ref: paths/contests.most_liked_routine.leaderboard.previous_week.yml /contests/most_liked_routine/leaderboard: $ref: paths/contests.most_liked_routine.leaderboard.yml /contests/most_liked_routine/leaderboard/{week_number}: $ref: paths/contests.most_liked_routine.leaderboard.(week_number).yml /contests/current_week: $ref: paths/contests.current_week.yml /contests/previous_week: $ref: paths/contests.previous_week.yml '/contests/{week_number}': $ref: 'paths/contests.(week_number).yml' /facets: $ref: paths/facets.yml '/facets/{id}': $ref: 'paths/facets.(id).yml' '/facets/update/{id}': $ref: 'paths/facets.update.(id).yml' '/facets/create': $ref: 'paths/facets.create.yml' /featured: $ref: paths/featured.yml /following/ingredient_feelings/negative: $ref: paths/following.ingredient_feelings.negative.yml /following/ingredient_feelings/positive: $ref: paths/following.ingredient_feelings.positive.yml /ingredients: $ref: paths/ingredients.yml '/ingredients/{id_or_alias}': $ref: 'paths/ingredients.(id_or_alias).yml' '/ingredients/{id_or_alias}/products': $ref: 'paths/ingredients.(id_or_alias).products.yml' '/ingredients/{id_or_alias}/endorsed_opinions': $ref: 'paths/ingredients.(id_or_alias).endorsed_opinions.yml' '/ingredients/{id_or_alias}/featured_opinion': $ref: 'paths/ingredients.(id_or_alias).featured_opinion.yml' '/ingredients/{id_or_alias}/feeling/positive': $ref: 'paths/ingredients.(id_or_alias).feeling.positive.yml' '/ingredients/{id_or_alias}/feeling/negative': $ref: 'paths/ingredients.(id_or_alias).feeling.negative.yml' '/ingredients/{id_or_alias}/feeling': $ref: 'paths/ingredients.(id_or_alias).feeling.delete.yml' '/ingredients/{id_or_alias}/submit_feedback': $ref: 'paths/ingredients.(id_or_alias).submit_feedback.yml' '/ingredients/create': $ref: 'paths/ingredients.create.yml' '/ingredient_feelings/{id}': $ref: 'paths/ingredient_feelings.(id).yml' '/ingredient_matchers/{token}/suggested_category': $ref: 'paths/ingredient_matchers.(token).suggested_category.yml' '/ingredient_matchers/{token}.yml': $ref: 'paths/ingredient_matchers.(token).yml' '/ingredient_opinions/{opinion_uuid}/current': $ref: 'paths/ingredient_opinions.(opinion_uuid).current.yml' '/ingredient_opinions/{opinion_uuid}/history': $ref: 'paths/ingredient_opinions.(opinion_uuid).history.yml' '/ingredient_opinions/entry/{entry_uuid}': $ref: 'paths/ingredient_opinions.entry.(entry_uuid).yml' '/ingredient_opinions/hashtag/{hashtag}': $ref: 'paths/ingredient_opinions.hashtag.(hashtag).yml' '/ingredient_opinions/create': $ref: 'paths/ingredient_opinions.create.yml' '/ingredient_opinions/{opinion_uuid}': allOf: - $ref: 'paths/ingredient_opinions.(opinion_uuid).patch.yml' - $ref: 'paths/ingredient_opinions.(opinion_uuid).delete.yml' /my/user: $ref: 'paths/my.user.yml' /my/user/supergroups: $ref: 'paths/my.user.supergroups.yml' /my/favorite_products: $ref: 'paths/my.favorite_products.yml' /my/favorite_routines: $ref: 'paths/my.favorite_routines.yml' /my/followed_by: $ref: 'paths/my.followed_by.yml' /my/following: $ref: 'paths/my.following.yml' /my/ingredient_analyses: $ref: 'paths/my.ingredient_analyses.yml' /my/ingredient_feelings: $ref: 'paths/my.ingredient_feelings.yml' /my/ingredient_feelings/negative: $ref: 'paths/my.ingredient_feelings.negative.yml' /my/ingredient_feelings/positive: $ref: 'paths/my.ingredient_feelings.positive.yml' '/my/ingredient_feelings/{ingredient_id_or_alias}': $ref: 'paths/my.ingredient_feelings.(ingredient_id_or_alias).yml' /my/ingredient_opinions: $ref: 'paths/my.ingredient_opinions.yml' '/my/ingredient_opinions/{ingredient_id_or_alias}': $ref: 'paths/my.ingredient_opinions.(ingredient_id_or_alias).yml' /my/ingredient_feedback: $ref: 'paths/my.ingredient_feedback.yml' '/my/ingredient_feedback/{ingredient_id_or_alias}': $ref: 'paths/my.ingredient_feedback.(ingredient_id_or_alias).yml' /my/product_drafts/authored: $ref: 'paths/my.product_drafts.authored.yml' /my/product_drafts/reviewed: $ref: 'paths/my.product_drafts.reviewed.yml' /my/products: $ref: 'paths/my.products.yml' /my/product_pitches: $ref: 'paths/my.product_pitches.yml' /my/product_tutorials: $ref: 'paths/my.product_tutorials.yml' /my/contests/current_week: $ref: 'paths/my.contests.current_week.yml' /my/contests/previous_week: $ref: 'paths/my.contests.previous_week.yml' /my/routines: $ref: 'paths/my.routines.yml' /my/current_routine_ids: $ref: 'paths/my.current_routine_ids.yml' /my/routine_requests: $ref: 'paths/my.routine_requests.yml' '/my/compatibility/product/{id_or_alias}': $ref: 'paths/my.compatibility.product.(id_or_alias).yml' /my/intake_decision: $ref: 'paths/my.intake_decision.yml' /my/survey/active/intake_decision: $ref: 'paths/my.survey.active.intake_decision.yml' /my/survey/answered: $ref: 'paths/my.survey.answered.yml' /my/survey/unanswered: $ref: 'paths/my.survey.unanswered.yml' /my/survey_answers: $ref: 'paths/my.survey_answers.create.yml' /my/survey_answers/reset: $ref: 'paths/my.survey_answers.reset.yml' /product_categories: $ref: paths/product_categories.yml '/product_categories/{id_or_alias}': $ref: 'paths/product_categories.(id_or_alias).yml' '/product_categories/{id_or_alias}/best_in': $ref: 'paths/product_categories.(id_or_alias).best_in.yml' '/product_categories/{id_or_alias}/products': $ref: 'paths/product_categories.(id_or_alias).products.yml' /product_drafts: $ref: paths/product_drafts.yml '/product_drafts/{id}': allOf: - $ref: 'paths/product_drafts.(id).yml' - $ref: 'paths/product_drafts.(id).delete.yml' '/product_drafts/{id}/product_image': $ref: 'paths/product_drafts.(id).product_image.yml' /product_drafts/approve: $ref: 'paths/product_drafts.approve.yml' /product_drafts/auto_classify: $ref: 'paths/product_drafts.auto_classify.yml' /product_drafts/create: $ref: 'paths/product_drafts.create.yml' /product_drafts/update: $ref: 'paths/product_drafts.update.yml' /product_pitches/create: $ref: 'paths/product_pitches.create.yml' '/product_pitches/{id}/assign_affiliate': $ref: 'paths/product_pitches.(id).assign_affiliate.yml' '/product_pitches/{id}/add_ingredient_opinion': $ref: 'paths/product_pitches.(id).add_ingredient_opinion.yml' '/product_pitches/{id}/remove_ingredient_opinion': $ref: 'paths/product_pitches.(id).remove_ingredient_opinion.yml' '/product_pitches/{id}/ingredient_opinions': $ref: 'paths/product_pitches.(id).ingredient_opinions.yml' /product_tutorials: $ref: paths/product_tutorials.yml /product_tutorials/create: $ref: 'paths/product_tutorials.create.yml' '/product_tutorials/{id}': $ref: 'paths/product_tutorials.(id).yml' '/product_tutorials/{id}/product_tutorial_instructions': $ref: 'paths/product_tutorials.(id).product_tutorial_instructions.yml' '/product_tutorials/{id}/product_tutorial_instructions/create': $ref: 'paths/product_tutorials.(id).product_tutorial_instructions.create.yml' '/product_tutorials/{id}/product_tutorial_instructions/{instruction_id}': $ref: 'paths/product_tutorials.(id).product_tutorial_instructions.(instruction_id).yml' '/product_tutorials/{id}/product_tutorial_warnings': $ref: 'paths/product_tutorials.(id).product_tutorial_warnings.yml' '/product_tutorials/{id}/product_tutorial_warnings/create': $ref: 'paths/product_tutorials.(id).product_tutorial_warnings.create.yml' '/product_tutorials/{id}/product_tutorial_warnings/{warning_id}': $ref: 'paths/product_tutorials.(id).product_tutorial_warnings.(warning_id).yml' '/product_tutorials/{id}/publish': $ref: 'paths/product_tutorials.(id).publish.yml' '/product_tutorials/{id}/set_general_info': $ref: 'paths/product_tutorials.(id).set_general_info.yml' '/product_tutorials/{id}/set_media_url': $ref: 'paths/product_tutorials.(id).set_media_url.yml' '/product_tutorials/{id}/set_quantity': $ref: 'paths/product_tutorials.(id).set_quantity.yml' /products: $ref: paths/products.yml /products/create: $ref: 'paths/products.create.yml' /products/favorite_lookup: $ref: 'paths/products.favorite_lookup.yml' /products/recent: $ref: 'paths/products.recent.yml' /products/search: $ref: 'paths/products.search.yml' /products/lookup: $ref: 'paths/products.lookup.yml' '/products/{id_or_alias}': $ref: 'paths/products.(id_or_alias).yml' '/products/{id_or_alias}/product_image': allOf: - $ref: 'paths/products.(id_or_alias).product_image.update.yml' - $ref: 'paths/products.(id_or_alias).product_image.delete.yml' '/products/{id_or_alias}/analysis': $ref: 'paths/products.(id_or_alias).analysis.yml' '/products/{id_or_alias}/effects': $ref: 'paths/products.(id_or_alias).effects.yml' '/products/{id_or_alias}/similar': $ref: 'paths/products.(id_or_alias).similar.yml' '/products/{id_or_alias}/top_routines': $ref: 'paths/products.(id_or_alias).top_routines.yml' '/products/{id_or_alias}/top_users': $ref: 'paths/products.(id_or_alias).top_users.yml' '/products/{id_or_alias}/favorite': allOf: - $ref: 'paths/products.(id_or_alias).favorite.create.yml' - $ref: 'paths/products.(id_or_alias).favorite.delete.yml' '/products/{id_or_alias}/favorited_by': $ref: 'paths/products.(id_or_alias).favorited_by.yml' '/products/{id_or_alias}/routine_candidates': $ref: 'paths/products.(id_or_alias).routine_candidates.yml' '/products/{id_or_alias}/product_tutorials': $ref: 'paths/products.(id_or_alias).product_tutorials.yml' '/products/{id_or_alias}/product_tutorials/featured': $ref: 'paths/products.(id_or_alias).product_tutorials.featured.yml' '/products/{id_or_alias}/publish': $ref: 'paths/products.(id_or_alias).publish.yml' '/products/{id_or_alias}/attest_brand': $ref: 'paths/products.(id_or_alias).attest_brand.yml' '/products/{id}': $ref: 'paths/products.(id).delete.yml' /routines: $ref: paths/routines.yml /routines/create: $ref: paths/routines.create.yml /routines/request: $ref: paths/routines.request.yml '/routines/request/{id}': $ref: 'paths/routines.request.(id).delete.yml' /routines/favorite_lookup: $ref: paths/routines.favorite_lookup.yml '/routines/{id}': allOf: - $ref: 'paths/routines.(id).yml' - $ref: 'paths/routines.(id).delete.yml' '/routines/{id}/compatibility': $ref: paths/routines.(id).compatibility.yml '/routines/{id}/analyze/{token}/compatibility': $ref: paths/routines.(id).analyze.(token).compatibility.yml '/routines/{id}/favorite': allOf: - $ref: 'paths/routines.(id).favorite.create.yml' - $ref: 'paths/routines.(id).favorite.delete.yml' '/routines/{id}/favorited_by': $ref: 'paths/routines.(id).favorited_by.yml' '/routines/{id}/publish': $ref: 'paths/routines.(id).publish.yml' '/routines/{id}/update': $ref: 'paths/routines.(id).update.yml' '/routines/{id}/update_routine_step_order': $ref: 'paths/routines.(id).update_routine_step_order.yml' '/routines/{id}/add_routine_step': $ref: 'paths/routines.(id).add_routine_step.yml' '/routines/{id}/product_pitches': $ref: 'paths/routines.(id).product_pitches.yml' '/routines/{id}/detailed_summary.yml': $ref: 'paths/routines.(id).detailed_summary.yml' '/routines/{id}/routine_steps': $ref: 'paths/routines.(id).routine_steps.yml' '/routines/{id}/routine_steps/{routine_step_id}/assign_pitch': $ref: 'paths/routines.(id).routine_steps.(routine_step_id).assign_pitch.yml' '/routines/{id}/routine_steps/{routine_step_id}/assign_product': $ref: 'paths/routines.(id).routine_steps.(routine_step_id).assign_product.yml' '/routines/{id}/routine_steps/{routine_step_id}/assign_product_tutorial': $ref: 'paths/routines.(id).routine_steps.(routine_step_id).assign_product_tutorial.yml' /rownd: $ref: 'paths/rownd.yml' /sitemap/comparisons: $ref: 'paths/sitemap.comparisons.yml' /sitemap/ingredients: $ref: 'paths/sitemap.ingredients.yml' /sitemap/products: $ref: 'paths/sitemap.products.yml' /stats/analyze/created_per_day: $ref: 'paths/stats.analyze.created_per_day.yml' /stats/ingredient_opinions/created_per_day: $ref: 'paths/stats.ingredient_opinions.created_per_day.yml' /stats/product_buy_clicks/created_per_day: $ref: 'paths/stats.product_buy_clicks.created_per_day.yml' /stats/product_tutorials/created_per_day: $ref: 'paths/stats.product_tutorials.created_per_day.yml' /stats/products/created_per_day: $ref: 'paths/stats.products.created_per_day.yml' /stats/routines/created_per_day: $ref: 'paths/stats.routines.created_per_day.yml' /stats/users/created_per_day: $ref: 'paths/stats.users.created_per_day.yml' /unit_of_measurements: $ref: paths/unit_of_measurements.yml /unit_of_measurements/create: $ref: 'paths/unit_of_measurements.create.yml' '/unit_of_measurements/{id}': $ref: 'paths/unit_of_measurements.(id).yml' /users: $ref: paths/users.yml '/users/{id_or_username}': $ref: 'paths/users.(id_or_username).yml' '/users/{id_or_username}/favorite_products': $ref: 'paths/users.(id_or_username).favorite_products.yml' '/users/{id_or_username}/favorite_routines': $ref: 'paths/users.(id_or_username).favorite_routines.yml' '/users/{id_or_username}/ingredient_feelings': $ref: 'paths/users.(id_or_username).ingredient_feelings.yml' '/users/{id_or_username}/ingredient_feelings/{ingredient_id_or_alias}': $ref: 'paths/users.(id_or_username).ingredient_feelings.(ingredient_id_or_alias).yml' '/users/{id_or_username}/ingredient_opinions': $ref: 'paths/users.(id_or_username).ingredient_opinions.yml' '/users/{id_or_username}/product_tutorials': $ref: 'paths/users.(id_or_username).product_tutorials.yml' '/users/{id_or_username}/routines': $ref: 'paths/users.(id_or_username).routines.yml' '/users/{id}/identity/email': $ref: 'paths/users.(id).identity.email.yml' '/users/{id}/identity/confirm_email_change': $ref: 'paths/users.(id).identity.confirm_email_change.yml' '/users/{id}/identity/username': $ref: 'paths/users.(id).identity.username.yml' '/users/{id}/skin_profile/survey': $ref: 'paths/users.(id).skin_profile.survey.yml' '/users/{id}/skin_profile/unanswered': $ref: 'paths/users.(id).skin_profile.unanswered.yml' '/users/experts': $ref: 'paths/users.experts.yml' '/users/lookup': $ref: 'paths/users.lookup.yml' '/users/{id}/brands': $ref: 'paths/users.(id).brands.yml' '/users/{id}/follow': $ref: 'paths/users.(id).follow.yml' '/users/{id}/followed_by': $ref: 'paths/users.(id).followed_by.yml' '/users/{id}/following': $ref: 'paths/users.(id).following.yml' '/users/{id}/unfollow': $ref: 'paths/users.(id).unfollow.yml' '/users/{id}/profile': $ref: 'paths/users.(id).profile.update.yml' '/users/{id}/profile_picture': allOf: - $ref: 'paths/users.(id).profile_picture.yml' - $ref: 'paths/users.(id).profile_picture.delete.yml' '/users/{id}/skin_profile': $ref: 'paths/users.(id).skin_profile.update.yml' '/users/{id}/resend_verification_email': $ref: 'paths/users.(id).resend_verification_email.yml' '/users/{id}/user_type': $ref: 'paths/users.(id).user_type.update.yml' /users/send_invite_link: $ref: 'paths/users.send_invite_link.yml' '/user_relationships/lookup': $ref: 'paths/user_relationships.lookup.yml' components: securitySchemes: bearerToken: type: http scheme: bearer bearerFormat: JWT security: - bearerToken: []