{
  "generated_at": "2026-02-26T04:54:36.819055+00:00",
  "env": "prod",
  "services": [
    {
      "name": "ows-abacus-account",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-abacus-account.git",
      "team": "abacus",
      "endpoints": {
        "total": 42,
        "used": {
          "count": 32,
          "percent": 76.2
        },
        "unused": {
          "count": 10,
          "percent": 23.8
        }
      },
      "functions": {
        "total": 16,
        "dead": 5,
        "dead_percent": 31.2
      },
      "details": [
        {
          "method": "POST",
          "path": "/account",
          "handler": "AccountCreateView",
          "file": "account.py",
          "line": 214,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-contract-vat-detail",
          "handler": "AccountContractVatDetailCreate",
          "file": "account_contract_vat_detail.py",
          "line": 40,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee",
          "handler": "AccountPayeeCreateView",
          "file": "account_payee.py",
          "line": 229,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:object_id>",
          "handler": "AccountPayeeItemView",
          "file": "account_payee.py",
          "line": 222,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/account-payee/<int:object_id>",
          "handler": "AccountPayeeItemView",
          "file": "account_payee.py",
          "line": 222,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payee/dataloader",
          "handler": "AccountPayeeList",
          "file": "account_payee.py",
          "line": 145,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payee/dataloader/account",
          "handler": "AccountPayeeByAccountIdList",
          "file": "account_payee.py",
          "line": 139,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payment-term-template/<int:template_id>/account-payment-term",
          "handler": "AccountPaymentTermTemplateCreateView",
          "file": "account_payment_term_template.py",
          "line": 40,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payment-term/",
          "handler": "AccountPaymentTermCreateView",
          "file": "account_payment_term.py",
          "line": 86,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payment-term/<int:object_id>/",
          "handler": "AccountPaymentTermItemView",
          "file": "account_payment_term.py",
          "line": 80,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payment-terms/snapshot",
          "handler": "get_account_payment_terms_snapshot_tsv",
          "file": "account_payment_term.py",
          "line": 169,
          "status": "unused",
          "dead_functions": [
            "logic/account_payment_term.py::account_payment_terms_export",
            "models/account_payment_term/AccountPaymentTerm.py::stream_all"
          ]
        },
        {
          "method": "GET",
          "path": "/account-tax-info/<int:object_id>",
          "handler": "AccountTaxInfoItemView",
          "file": "account_tax_info.py",
          "line": 112,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/account-tax-info/<int:object_id>",
          "handler": "AccountTaxInfoItemView",
          "file": "account_tax_info.py",
          "line": 112,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-tax-info/snapshot",
          "handler": "get_account_tax_info_snapshot_tsv",
          "file": "account_tax_info.py",
          "line": 152,
          "status": "unused",
          "dead_functions": [
            "logic/account_tax_info.py::account_tax_info_export"
          ]
        },
        {
          "method": "POST",
          "path": "/account/<int:account_id>/payment-hold",
          "handler": "PaymentHoldCreate",
          "file": "payment_hold.py",
          "line": 70,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/<int:object_id>",
          "handler": "AccountItemView",
          "file": "account.py",
          "line": 208,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/account/<int:object_id>",
          "handler": "AccountItemView",
          "file": "account.py",
          "line": 208,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/<int:object_id>/account-payee-history",
          "handler": "account_payee_history",
          "file": "account_payee_history.py",
          "line": 22,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/<int:object_id>/account-payee/",
          "handler": "get_account_payee_by_account_id",
          "file": "account_payee.py",
          "line": 239,
          "status": "unused",
          "dead_functions": [
            "logic/account_payee.py::get_account_payee_by_account_id"
          ]
        },
        {
          "method": "GET",
          "path": "/account/<int:object_id>/account-payment-term/",
          "handler": "get_account_payment_term_by_account_id",
          "file": "account_payment_term.py",
          "line": 96,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/<int:object_id>/account-tax-info-history",
          "handler": "account_tax_info_history",
          "file": "account_tax_info_history.py",
          "line": 21,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/<int:object_id>/account-tax-info/",
          "handler": "get_account_tax_info_by_account_id",
          "file": "account_tax_info.py",
          "line": 123,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/<int:object_id>/payment-eligibility-status/",
          "handler": "get_account_payment_eligibility_status",
          "file": "account.py",
          "line": 241,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/<int:object_id>/payment-hold",
          "handler": "payment_hold_status",
          "file": "payment_hold.py",
          "line": 40,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/<int:object_id>/payment-hold-history",
          "handler": "payment_hold_history",
          "file": "payment_hold_history.py",
          "line": 19,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/<int:object_id>/sap/",
          "handler": "get_sap_formatted_account_info",
          "file": "account.py",
          "line": 273,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account/account-payment-term/dataloader",
          "handler": "get_account_payment_term_by_account_id_dataloaded",
          "file": "account_payment_term.py",
          "line": 128,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account/dataloader",
          "handler": "AccountsDataloader",
          "file": "account.py",
          "line": 220,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/accounts/",
          "handler": "AccountList",
          "file": "account.py",
          "line": 226,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/accounts/",
          "handler": "AccountList",
          "file": "account.py",
          "line": 226,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/accounts/account-tax-info",
          "handler": "get_account_tax_info_list",
          "file": "account_tax_info.py",
          "line": 174,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/eligible-accounts",
          "handler": "EligibleAccountList",
          "file": "account.py",
          "line": 232,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "base.py",
          "line": 14,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-entity-payoneer-programs",
          "handler": "get_payment_entity_payoneer_programs_list",
          "file": "payment_entity_payoneer_program.py",
          "line": 37,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-entity/<int:object_id>/payment-entity-payoneer-program",
          "handler": "get_payment_entity_payoneer_program_by_payment_entity",
          "file": "payment_entity_payoneer_program.py",
          "line": 23,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-group/<int:payment_group_id>/eligible-accounts",
          "handler": "get_payment_group_eligible_accounts",
          "file": "payment_group.py",
          "line": 19,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payment-holds",
          "handler": "list_payment_holds",
          "file": "payment_hold.py",
          "line": 52,
          "status": "unused",
          "dead_functions": [
            "logic/payment_hold.py::get_payment_holds"
          ]
        },
        {
          "method": "GET",
          "path": "/payoneer-program",
          "handler": "ReferencePayoneerProgramList",
          "file": "reference_payoneer_program.py",
          "line": 58,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payoneer-program/<int:object_id>",
          "handler": "ReferencePayoneerProgramItemView",
          "file": "reference_payoneer_program.py",
          "line": 64,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payoneer-program/payment-entity/<int:payment_entity_id>/currency/<string:currency_code>/agreement-type/<int:agreement_type_id>",
          "handler": "get_payoneer_program",
          "file": "reference_payoneer_program.py",
          "line": 78,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-agreement-type/<int:object_id>",
          "handler": "ReferenceAgreementTypeItemView",
          "file": "reference_agreement_type.py",
          "line": 61,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-agreement-types",
          "handler": "ReferenceAgreementTypeList",
          "file": "reference_agreement_type.py",
          "line": 67,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/account_payee.py::get_account_payee_by_account_id",
        "logic/account_payment_term.py::account_payment_terms_export",
        "logic/account_tax_info.py::account_tax_info_export",
        "logic/payment_hold.py::get_payment_holds",
        "models/account_payment_term/AccountPaymentTerm.py::stream_all"
      ]
    },
    {
      "name": "ows-abacus-contract",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-abacus-contract.git",
      "team": "abacus",
      "endpoints": {
        "total": 101,
        "used": {
          "count": 87,
          "percent": 86.1
        },
        "unused": {
          "count": 14,
          "percent": 13.9
        }
      },
      "functions": {
        "total": 58,
        "dead": 7,
        "dead_percent": 12.1
      },
      "details": [
        {
          "method": "POST",
          "path": "/account/<int:account_id>/contract-terms/",
          "handler": "get_contract_terms_for_account_and_term_type",
          "file": "contract_term.py",
          "line": 176,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract",
          "handler": "ContractCreateView",
          "file": "contract.py",
          "line": 175,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/contract-advance/<int:object_id>/",
          "handler": "ContractAdvanceItemView",
          "file": "contract_advance.py",
          "line": 129,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-advance/<int:object_id>/",
          "handler": "ContractAdvanceItemView",
          "file": "contract_advance.py",
          "line": 129,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract-advance/<int:object_id>/",
          "handler": "ContractAdvanceItemView",
          "file": "contract_advance.py",
          "line": 129,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/contract-flowthrough/<int:object_id>/",
          "handler": "ContractFlowthroughItemView",
          "file": "contract_flowthrough.py",
          "line": 92,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-flowthrough/<int:object_id>/",
          "handler": "ContractFlowthroughItemView",
          "file": "contract_flowthrough.py",
          "line": 92,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract-flowthrough/<int:object_id>/",
          "handler": "ContractFlowthroughItemView",
          "file": "contract_flowthrough.py",
          "line": 92,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-lifecycle-schedule-detail/<int:object_id>",
          "handler": "ContractLifecycleScheduleDetailItemView",
          "file": "contract_lifecycle_schedule_detail.py",
          "line": 44,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-lifecycle-schedule-detail/dataloader",
          "handler": "get_contract_lifecycle_schedule_details_by_ids",
          "file": "contract_lifecycle_schedule_detail.py",
          "line": 57,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-lifecycle-schedule/<int:contract_lifecycle_schedule_id>/contract-lifecycle/",
          "handler": "get_contract_lifecycle_by_schedule_id",
          "file": "contract_lifecycle.py",
          "line": 221,
          "status": "unused",
          "dead_functions": [
            "logic/contract_lifecycle.py::get_contract_lifecycle_by_schedule_id"
          ]
        },
        {
          "method": "GET",
          "path": "/contract-lifecycle-schedule/<int:object_id>/",
          "handler": "ContractLifecycleScheduleItemView",
          "file": "contract_lifecycle_schedule.py",
          "line": 61,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-lifecycle-schedules/dataloader",
          "handler": "get_contract_lifecycle_schedules_by_ids",
          "file": "contract_lifecycle_schedule.py",
          "line": 104,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-lifecycle/<int:object_id>/",
          "handler": "ContractLifecycleItemView",
          "file": "contract_lifecycle.py",
          "line": 80,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-lifecycles/activable",
          "handler": "get_contract_lifecycles_to_be_activated",
          "file": "contract_lifecycle.py",
          "line": 323,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-lifecycles/activate",
          "handler": "activate_contract_lifecycles",
          "file": "contract_lifecycle.py",
          "line": 351,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-lifecycles/dataloader/",
          "handler": "get_contract_lifecycles_by_ids",
          "file": "contract_lifecycle.py",
          "line": 196,
          "status": "unused",
          "dead_functions": [
            "logic/contract_lifecycle.py::get_contract_lifecycles_by_ids",
            "models/contract_lifecycle/ContractLifecycle.py::get_by_ids"
          ]
        },
        {
          "method": "POST",
          "path": "/contract-lifecycles/renew/",
          "handler": "renew_contract_lifecycles",
          "file": "contract_lifecycle.py",
          "line": 373,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-lifecycles/renewable/",
          "handler": "get_contract_lifecycles_to_be_renewed",
          "file": "contract_lifecycle.py",
          "line": 244,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-lifecycles/terminable/",
          "handler": "get_contract_lifecycles_to_be_terminated",
          "file": "contract_lifecycle.py",
          "line": 272,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-lifecycles/terminate/",
          "handler": "terminate_contract_lifecycles",
          "file": "contract_lifecycle.py",
          "line": 297,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/contract-mechanical-deduction/<int:object_id>",
          "handler": "ContractMechanicalDeductionItemView",
          "file": "contract_mechanical_deduction.py",
          "line": 110,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-mechanical-deduction/<int:object_id>",
          "handler": "ContractMechanicalDeductionItemView",
          "file": "contract_mechanical_deduction.py",
          "line": 110,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract-mechanical-deduction/<int:object_id>",
          "handler": "ContractMechanicalDeductionItemView",
          "file": "contract_mechanical_deduction.py",
          "line": 110,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-party/",
          "handler": "ContractPartyCreateView",
          "file": "contract_party.py",
          "line": 59,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/contract-party/<int:object_id>/",
          "handler": "ContractPartyItemView",
          "file": "contract_party.py",
          "line": 107,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-reserves/",
          "handler": "get_contract_reserves_by_ids",
          "file": "contract_reserve.py",
          "line": 102,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-template/<contract_template_id>/contract",
          "handler": "create_contract_from_template_id",
          "file": "contract_template.py",
          "line": 22,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract-term-conditions/soft-delete",
          "handler": "bulk_soft_delete_contract_term_conditions",
          "file": "contract_term_condition.py",
          "line": 49,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-term/<int:contract_term_id>/conditions",
          "handler": "get_conditions_by_term_id",
          "file": "contract_term_condition.py",
          "line": 84,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-term/<int:contract_term_id>/conditions",
          "handler": "bulk_create_contract_term_conditions",
          "file": "contract_term_condition.py",
          "line": 32,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract-term/<int:contract_term_id>/conditions",
          "handler": "bulk_update_contract_term_conditions",
          "file": "contract_term_condition.py",
          "line": 67,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-term/<int:contract_term_id>/contract-term-schedules",
          "handler": "get_contract_term_schedules_by_term_id",
          "file": "contract_term_schedule.py",
          "line": 23,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/contract-term/<int:object_id>/",
          "handler": "ContractTermItemView",
          "file": "contract_term.py",
          "line": 112,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-term/<int:object_id>/",
          "handler": "ContractTermItemView",
          "file": "contract_term.py",
          "line": 112,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract-term/<int:object_id>/",
          "handler": "ContractTermItemView",
          "file": "contract_term.py",
          "line": 112,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-terms/snapshot",
          "handler": "get_tsv_contract_terms_snapshot",
          "file": "contract_term.py",
          "line": 155,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/contract/<int:contract_id>",
          "handler": "delete_contract",
          "file": "contract.py",
          "line": 468,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/<string:target_type>/parties",
          "handler": "get_contract_parties",
          "file": "contract_party.py",
          "line": 75,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/<int:contract_id>/advance/",
          "handler": "ContractAdvanceCreateView",
          "file": "contract_advance.py",
          "line": 38,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/advances/",
          "handler": "get_advances_by_contract_id",
          "file": "contract_advance.py",
          "line": 54,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/advances/<string:status>/",
          "handler": "get_advances_by_contract_id",
          "file": "contract_advance.py",
          "line": 54,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/can-be-deleted",
          "handler": "can_contract_be_deleted",
          "file": "contract.py",
          "line": 445,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/contract-flowthrough/",
          "handler": "get_contract_flowthrough_by_contract_id",
          "file": "contract_flowthrough.py",
          "line": 131,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/contract-flowthrough/",
          "handler": "ContractFlowthroughCreateView",
          "file": "contract_flowthrough.py",
          "line": 119,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/<int:contract_id>/contract-lifecycle-schedule/<int:contract_lifecycle_schedule_id>/contract-lifecycle/",
          "handler": "ContractLifecycleCreateView",
          "file": "contract_lifecycle.py",
          "line": 86,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/contract-lifecycle-schedules/",
          "handler": "get_contract_lifecycle_schedules_by_contract_id",
          "file": "contract_lifecycle_schedule.py",
          "line": 72,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/<int:contract_id>/contract-lifecycle-schedules/",
          "handler": "create_contract_lifecycle_schedules",
          "file": "contract_lifecycle_schedule.py",
          "line": 142,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract/<int:contract_id>/contract-lifecycle-schedules/",
          "handler": "update_contract_lifecycle_schedules",
          "file": "contract_lifecycle_schedule.py",
          "line": 173,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/contract-lifecycle/",
          "handler": "get_contract_lifecycle_by_contract_id",
          "file": "contract_lifecycle.py",
          "line": 97,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract/<int:contract_id>/contract-lifecycle/",
          "handler": "update_contract_lifecycle_by_contract_id",
          "file": "contract_lifecycle.py",
          "line": 126,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/contract-mechanical-deduction/",
          "handler": "ContractMechanicalDeductionCreateView",
          "file": "contract_mechanical_deduction.py",
          "line": 119,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/contract-mechanical-deductions/",
          "handler": "get_contract_mechanical_deductions_by_contract_id",
          "file": "contract_mechanical_deduction.py",
          "line": 131,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/<int:contract_id>/contract-mechanical-deductions/worldwide/",
          "handler": "create_contract_mechanical_deductions_worldwide",
          "file": "contract_mechanical_deduction.py",
          "line": 174,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/contract-term",
          "handler": "ContractTermCreateView",
          "file": "contract_term.py",
          "line": 106,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/exclusions/",
          "handler": "get_exclusions_by_contract",
          "file": "contract_exclusion.py",
          "line": 45,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/<int:contract_id>/exclusions/",
          "handler": "create_contract_exclusions",
          "file": "contract_exclusion.py",
          "line": 27,
          "status": "unused",
          "dead_functions": [
            "logic/contract_exclusion.py::create_contract_exclusions"
          ]
        },
        {
          "method": "PUT",
          "path": "/contract/<int:contract_id>/exclusions/",
          "handler": "update_contract_exclusions",
          "file": "contract_exclusion.py",
          "line": 82,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/legacy-contract",
          "handler": "get_legacy_contract_by_contract_id",
          "file": "legacy_contract.py",
          "line": 69,
          "status": "unused",
          "dead_functions": [
            "logic/legacy_contract.py::get_legacy_contract_by_contract_id"
          ]
        },
        {
          "method": "POST",
          "path": "/contract/<int:contract_id>/legacy-contract/",
          "handler": "LegacyContractCreateView",
          "file": "legacy_contract.py",
          "line": 40,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/parties/",
          "handler": "get_contract_parties",
          "file": "contract_party.py",
          "line": 75,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract/<int:contract_id>/reactivate",
          "handler": "reactivate_contract",
          "file": "contract.py",
          "line": 426,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/reserves/",
          "handler": "get_reserve_by_contract_id",
          "file": "contract_reserve.py",
          "line": 54,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/reserves/",
          "handler": "ContractReserveCreateView",
          "file": "contract_reserve.py",
          "line": 42,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract/<int:contract_id>/reserves/",
          "handler": "update_reserve_by_contract_id",
          "file": "contract_reserve.py",
          "line": 79,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract/<int:contract_id>/terminate",
          "handler": "terminate_contract",
          "file": "contract.py",
          "line": 410,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:object_id>",
          "handler": "ContractItemView",
          "file": "contract.py",
          "line": 169,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract/<int:object_id>",
          "handler": "ContractItemView",
          "file": "contract.py",
          "line": 169,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:object_id>/sap",
          "handler": "ContractSapItemView",
          "file": "contract.py",
          "line": 163,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/contract-lifecycle-schedule/contract-lifecycle",
          "handler": "create_contract_with_lifecycle_and_schedules",
          "file": "contract.py",
          "line": 388,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/contract-lifecycle/dataloader",
          "handler": "get_contract_lifecycle_by_dataloaded_contract_id",
          "file": "contract_lifecycle.py",
          "line": 163,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/contract-reserves/",
          "handler": "get_contract_reserves_by_contract_ids",
          "file": "contract_reserve.py",
          "line": 132,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/",
          "handler": "ContractList",
          "file": "contract.py",
          "line": 157,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/",
          "handler": "get_contracts_by_ids",
          "file": "contract.py",
          "line": 182,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/<int:contract_id>/contract-terms",
          "handler": "get_contract_terms_by_contract_handler",
          "file": "contract_term.py",
          "line": 120,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/account/<int:account_id>",
          "handler": "get_contracts_by_account_handler",
          "file": "contract.py",
          "line": 246,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/account/dataloader",
          "handler": "get_contracts_by_account_dataloader_handler",
          "file": "contract.py",
          "line": 276,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/accounts",
          "handler": "get_contracts_by_accounts",
          "file": "contract.py",
          "line": 316,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/dataloader",
          "handler": "get_contracts_dataloaded",
          "file": "contract.py",
          "line": 203,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/mechanical-deductions/active",
          "handler": "get_active_contracts_with_mechanical_deductions",
          "file": "contract_mechanical_deduction.py",
          "line": 203,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/snapshot",
          "handler": "get_tsv_contract_snapshot",
          "file": "contract.py",
          "line": 339,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/vat-info",
          "handler": "get_contracts_vat_info",
          "file": "contract.py",
          "line": 361,
          "status": "unused",
          "dead_functions": [
            "logic/contract.py::get_vat_info_by_contract_ids"
          ]
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "base.py",
          "line": 14,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/oa-contracts/contracts",
          "handler": "get_contracts_by_oa_contract_ids",
          "file": "legacy_contract.py",
          "line": 48,
          "status": "unused",
          "dead_functions": [
            "logic/contract.py::get_contracts_by_oa_contract_ids"
          ]
        },
        {
          "method": "GET",
          "path": "/reference-flowthrough-calculation/<int:object_id>",
          "handler": "ReferenceFlowthroughCalculationItemView",
          "file": "reference_flowthrough_calculation.py",
          "line": 72,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-flowthrough-calculations/",
          "handler": "ReferenceFlowthroughCalculationListView",
          "file": "reference_flowthrough_calculation.py",
          "line": 64,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-mechanical-rate/<int:object_id>",
          "handler": "ReferenceMechanicalRateView",
          "file": "reference_mechanical_rate.py",
          "line": 72,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-mechanical-rates/",
          "handler": "ReferenceMechanicalRateList",
          "file": "reference_mechanical_rate.py",
          "line": 65,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-payment-entities/",
          "handler": "ReferencePaymentEntityListView",
          "file": "reference_payment_entity.py",
          "line": 81,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-payment-entity/<int:object_id>/",
          "handler": "ReferencePaymentEntityItemView",
          "file": "reference_payment_entity.py",
          "line": 75,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-payment-type/<int:object_id>",
          "handler": "ReferencePaymentTypeItemView",
          "file": "reference_payment_type.py",
          "line": 76,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-payment-types",
          "handler": "ReferencePaymentTypeListView",
          "file": "reference_payment_type.py",
          "line": 84,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-sap-profit-center/",
          "handler": "ReferenceSapProfitCenterListView",
          "file": "reference_sap_profit_center.py",
          "line": 76,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-sap-profit-center/<int:object_id>",
          "handler": "ReferenceSapProfitCenterItemView",
          "file": "reference_sap_profit_center.py",
          "line": 70,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-signing-entities/",
          "handler": "ReferenceSigningEntityListView",
          "file": "reference_signing_entity.py",
          "line": 73,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-signing-entity/<int:object_id>/",
          "handler": "ReferenceSigningEntityItemView",
          "file": "reference_signing_entity.py",
          "line": 67,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-transaction-type-group/<int:reference_transaction_type_group_id>/reference-transaction-types",
          "handler": "get_transaction_types_by_group",
          "file": "reference_transaction_type_group.py",
          "line": 54,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-transaction-type-group/group-admin/<string:group_admin>",
          "handler": "get_transaction_type_groups_by_group_admin",
          "file": "reference_transaction_type_group.py",
          "line": 24,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-transaction-type-group/reference_transaction_type_group_transaction_types",
          "handler": "get_transaction_type_group_transaction_types",
          "file": "reference_transaction_type_group.py",
          "line": 86,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-transaction-type-groups",
          "handler": "get_transaction_type_groups",
          "file": "reference_transaction_type_group.py",
          "line": 113,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-transaction-types",
          "handler": "ReferenceTransactionTypeList",
          "file": "reference_transaction_type.py",
          "line": 51,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/contract.py::get_contracts_by_oa_contract_ids",
        "logic/contract.py::get_vat_info_by_contract_ids",
        "logic/contract_exclusion.py::create_contract_exclusions",
        "logic/contract_lifecycle.py::get_contract_lifecycle_by_schedule_id",
        "logic/contract_lifecycle.py::get_contract_lifecycles_by_ids",
        "logic/legacy_contract.py::get_legacy_contract_by_contract_id",
        "models/contract_lifecycle/ContractLifecycle.py::get_by_ids"
      ]
    },
    {
      "name": "ows-abacus-event",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-abacus-event.git",
      "team": "abacus",
      "endpoints": {
        "total": 7,
        "used": {
          "count": 5,
          "percent": 71.4
        },
        "unused": {
          "count": 2,
          "percent": 28.6
        }
      },
      "functions": {
        "total": 3,
        "dead": 2,
        "dead_percent": 66.7
      },
      "details": [
        {
          "method": "POST",
          "path": "/abacus-event",
          "handler": "AbacusEventCreate",
          "file": "abacus_event.py",
          "line": 69,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/abacus-event/<int:object_id>",
          "handler": "AbacusEventItemView",
          "file": "abacus_event.py",
          "line": 75,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/abacus-event/<string:target_type>/<int:target_id>",
          "handler": "get_events_by_target_type",
          "file": "abacus_event.py",
          "line": 116,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/abacus-event/dataloader",
          "handler": "AbacusEventDataloader",
          "file": "abacus_event.py",
          "line": 81,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/abacus-event/payment-group-payment/<int:payment_group_payment_id>/approval-count/",
          "handler": "get_payment_groups_approval_count",
          "file": "abacus_event.py",
          "line": 92,
          "status": "unused",
          "dead_functions": [
            "logic/abacus_event.py::get_payment_approval_count",
            "models/abacus_event/AbacusEvent.py::get_payment_approval_count"
          ]
        },
        {
          "method": "PUT",
          "path": "/abacus-event/rollback/",
          "handler": "rollback_events",
          "file": "abacus_event.py",
          "line": 99,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "base.py",
          "line": 11,
          "status": "unused",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/abacus_event.py::get_payment_approval_count",
        "models/abacus_event/AbacusEvent.py::get_payment_approval_count"
      ]
    },
    {
      "name": "ows-abacus-legacy-sync",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-abacus-legacy-sync.git",
      "team": "abacus",
      "endpoints": {
        "total": 5,
        "used": {
          "count": 3,
          "percent": 60.0
        },
        "unused": {
          "count": 2,
          "percent": 40.0
        }
      },
      "functions": {
        "total": 0,
        "dead": 0,
        "dead_percent": 0
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "base.py",
          "line": 14,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendor-contract",
          "handler": "VendorContractCreate",
          "file": "vendor_contract.py",
          "line": 39,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendor-contract-distribution-type/",
          "handler": "VendorContractDistributionTypeCreate",
          "file": "vendor_contract_distribution_type.py",
          "line": 30,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendor-contract-distribution-types/",
          "handler": "VendorContractDistributionTypesCreate",
          "file": "vendor_contract_distribution_type.py",
          "line": 49,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/vendor-contract/<int:object_id>",
          "handler": "VendorContractItem",
          "file": "vendor_contract.py",
          "line": 46,
          "status": "unused",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-abacus-schedule",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-abacus-schedule.git",
      "team": "abacus",
      "endpoints": {
        "total": 9,
        "used": {
          "count": 6,
          "percent": 66.7
        },
        "unused": {
          "count": 3,
          "percent": 33.3
        }
      },
      "functions": {
        "total": 3,
        "dead": 0,
        "dead_percent": 0.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "base.py",
          "line": 11,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/schedule",
          "handler": "ScheduleCreateView",
          "file": "schedule.py",
          "line": 89,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/schedule-attachment/<int:object_id>/",
          "handler": "ScheduleAttachmentItemView",
          "file": "schedule_attachment.py",
          "line": 89,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/schedule-attachment/<int:object_id>/",
          "handler": "ScheduleAttachmentItemView",
          "file": "schedule_attachment.py",
          "line": 89,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/schedule/<int:object_id>",
          "handler": "ScheduleItemView",
          "file": "schedule.py",
          "line": 82,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/schedule/<int:object_id>",
          "handler": "ScheduleItemView",
          "file": "schedule.py",
          "line": 82,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/schedule/<int:schedule_id>/<string:target_type>/schedule-attachments/",
          "handler": "bulk_update_schedule_attachments",
          "file": "schedule_attachment.py",
          "line": 100,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/schedule/<int:schedule_id>/schedule-attachments/",
          "handler": "get_schedule_attachments_by_schedule_id",
          "file": "schedule_attachment.py",
          "line": 61,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/schedules/<string:target_type>/<string:target_id>",
          "handler": "get_schedules_by_target",
          "file": "schedule.py",
          "line": 99,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-abacus-state",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-abacus-state.git",
      "team": "abacus",
      "endpoints": {
        "total": 8,
        "used": {
          "count": 6,
          "percent": 75.0
        },
        "unused": {
          "count": 2,
          "percent": 25.0
        }
      },
      "functions": {
        "total": 5,
        "dead": 1,
        "dead_percent": 20.0
      },
      "details": [
        {
          "method": "PUT",
          "path": "/abacus-state/<int:object_id>",
          "handler": "AbacusStateItemView",
          "file": "abacus_state.py",
          "line": 149,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/abacus-state/<string:parent_table_name>/<int:parent_table_id>",
          "handler": "get_abacus_state_action_list",
          "file": "abacus_state.py",
          "line": 293,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/abacus-state/dataloader",
          "handler": "AbacusStateDataloader",
          "file": "abacus_state.py",
          "line": 156,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/abacus-states",
          "handler": "create_abacus_states",
          "file": "abacus_state.py",
          "line": 214,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/abacus-states/<string:parent_table_name>",
          "handler": "bulk_update_abacus_states_by_parent_table",
          "file": "abacus_state.py",
          "line": 338,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/abacus-states/<string:parent_table_name>/<int:parent_table_id>/",
          "handler": "create_abacus_states_by_parent_table",
          "file": "abacus_state.py",
          "line": 254,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/abacus-states/query",
          "handler": "bulk_query_states",
          "file": "abacus_state.py",
          "line": 174,
          "status": "unused",
          "dead_functions": [
            "logic/abacus_state.py::bulk_query_states"
          ]
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "base.py",
          "line": 23,
          "status": "unused",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/abacus_state.py::bulk_query_states"
      ]
    },
    {
      "name": "ows-abacus-worksheet",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-abacus-worksheet.git",
      "team": "abacus",
      "endpoints": {
        "total": 12,
        "used": {
          "count": 7,
          "percent": 58.3
        },
        "unused": {
          "count": 5,
          "percent": 41.7
        }
      },
      "functions": {
        "total": 0,
        "dead": 0,
        "dead_percent": 0
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "base.py",
          "line": 11,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/worksheet-adjustment/<int:worksheet_adjustment_id>/details",
          "handler": "get_worksheet_adjustment_details",
          "file": "worksheet_adjustment_detail.py",
          "line": 17,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/worksheet-adjustment/statement-period-adjustment-file/<int:statement_period_adjustment_file_id>/adjustments-and-details",
          "handler": "get_worksheet_adjustments_and_details",
          "file": "worksheet_adjustment.py",
          "line": 63,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/worksheet-adjustments/import/",
          "handler": "create_worksheet_adjustments_and_adjustment_details",
          "file": "worksheet_adjustment.py",
          "line": 38,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/worksheet-adjustments/pending",
          "handler": "get_pending_worksheet_adjustments_endpoint",
          "file": "worksheet_adjustment.py",
          "line": 79,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/worksheet-adjustments/period/<int:period_id>/type/<int:type_id>",
          "handler": "get_adjustments_by_period_and_type",
          "file": "worksheet_adjustment.py",
          "line": 126,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/worksheet-adjustments/statement-period-adjustment-file/<int:statement_period_adjustment_file_id>/",
          "handler": "soft_delete_worksheet_adjustments_and_details_by_file_id",
          "file": "worksheet_adjustment.py",
          "line": 48,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/worksheet-adjustments/statement-period-adjustment-file/<int:statement_period_adjustment_file_id>/",
          "handler": "get_worksheet_adjustments",
          "file": "worksheet_adjustment.py",
          "line": 28,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/worksheet-adjustments/statement-period-adjustment-file/<int:statement_period_adjustment_file_id>/accounts",
          "handler": "get_worksheet_adjustments_accounts",
          "file": "worksheet_adjustment.py",
          "line": 107,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/worksheet-adjustments/statement-period-adjustment-file/<int:statement_period_adjustment_file_id>/contracts",
          "handler": "get_worksheet_adjustments_contracts",
          "file": "worksheet_adjustment.py",
          "line": 88,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/worksheet-correction/bulk",
          "handler": "bulk_create_worksheet_corrections",
          "file": "worksheet_correction.py",
          "line": 18,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/worksheet-correction/statement-period/<int:statement_period_id>/<string:correction_type>/unapplied",
          "handler": "get_unapplied_worksheet_corrections_by_statement_period_id",
          "file": "worksheet_correction.py",
          "line": 28,
          "status": "unused",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-account",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-account.git",
      "team": "accounts-platform",
      "endpoints": {
        "total": 72,
        "used": {
          "count": 57,
          "percent": 79.2
        },
        "unused": {
          "count": 15,
          "percent": 20.8
        }
      },
      "functions": {
        "total": 73,
        "dead": 20,
        "dead_percent": 27.4
      },
      "details": [
        {
          "method": "HEAD",
          "path": "/<vendor_id>/distributor",
          "handler": "is_vendor_a_distributor",
          "file": "vendor.py",
          "line": 77,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "HEAD",
          "path": "/<vendor_id>/subaccount/<subaccount_id>",
          "handler": "is_subaccount_for_vendor",
          "file": "subaccount.py",
          "line": 174,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/<vendor_id>/subaccounts",
          "handler": "get_vendor_subaccounts",
          "file": "subaccount.py",
          "line": 63,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/applications/dataloader",
          "handler": "get_applications_by_ids",
          "file": "applications.py",
          "line": 87,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/brands",
          "handler": "get_company_brands",
          "file": "common.py",
          "line": 248,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/collaborator/<collaborator_uuid>/applications",
          "handler": "get_collaborator_applications",
          "file": "applications.py",
          "line": 70,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/countries",
          "handler": "get_countries",
          "file": "common.py",
          "line": 163,
          "status": "unused",
          "dead_functions": [
            "logic/country.py::get_countries",
            "models/country.py::get_countries"
          ]
        },
        {
          "method": "HEAD",
          "path": "/distributor",
          "handler": "is_distributor_type",
          "file": "common.py",
          "line": 68,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/genres",
          "handler": "get_genres",
          "file": "common.py",
          "line": 143,
          "status": "unused",
          "dead_functions": [
            "logic/genre.py::get_genres",
            "models/genre.py::get_genres"
          ]
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "common.py",
          "line": 30,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/identity",
          "handler": "identity",
          "file": "common.py",
          "line": 36,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/internal/parent_companies",
          "handler": "get_parent_companies_internal",
          "file": "internal.py",
          "line": 23,
          "status": "unused",
          "dead_functions": [
            "logic/parent_company.py::get_parent_companies"
          ]
        },
        {
          "method": "GET",
          "path": "/internal/parent_company/<parent_company_uuid>/applications",
          "handler": "get_parent_company_applications",
          "file": "applications.py",
          "line": 102,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/label-participant/<lp_uuid>/applications",
          "handler": "get_label_participant_applications",
          "file": "applications.py",
          "line": 80,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/lookup/company-brands/company-brand-ids/",
          "handler": "lookup_company_brands_by_ids",
          "file": "lookups.py",
          "line": 148,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/lookup/company-brands/uuids/",
          "handler": "lookup_company_brands_by_uuids",
          "file": "lookups.py",
          "line": 125,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/lookup/subaccounts/subaccount-ids/",
          "handler": "lookup_subaccounts_by_ids",
          "file": "lookups.py",
          "line": 100,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/lookup/subaccounts/uuids/",
          "handler": "lookup_subaccounts_by_uuids",
          "file": "lookups.py",
          "line": 75,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/lookup/vendors/uuids/",
          "handler": "lookup_vendors_by_uuids",
          "file": "lookups.py",
          "line": 25,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/lookup/vendors/vendor-ids/",
          "handler": "lookup_vendors_by_vendor_ids",
          "file": "lookups.py",
          "line": 51,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/owners",
          "handler": "get_owners",
          "file": "common.py",
          "line": 127,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/parent_companies",
          "handler": "get_parent_companies",
          "file": "common.py",
          "line": 225,
          "status": "unused",
          "dead_functions": [
            "logic/vendor.py::get_parent_companies",
            "models/neo4j_vendor.py::get_parent_companies"
          ]
        },
        {
          "method": "GET",
          "path": "/regions",
          "handler": "get_regions",
          "file": "common.py",
          "line": 183,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/roles/dataloader",
          "handler": "get_roles_by_ids",
          "file": "applications.py",
          "line": 94,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/service-tiers",
          "handler": "get_service_tiers",
          "file": "common.py",
          "line": 204,
          "status": "unused",
          "dead_functions": [
            "logic/vendor.py::get_service_tiers",
            "models/neo4j_vendor.py::get_service_tiers"
          ]
        },
        {
          "method": "HEAD",
          "path": "/sony/subaccount/<subaccount_id>",
          "handler": "is_subaccount_sme",
          "file": "subaccount.py",
          "line": 206,
          "status": "unused",
          "dead_functions": [
            "logic/sme.py::is_sme_subaccount"
          ]
        },
        {
          "method": "HEAD",
          "path": "/sony/vendor/<vendor_id>",
          "handler": "is_vendor_sme",
          "file": "vendor.py",
          "line": 109,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "HEAD",
          "path": "/subaccount",
          "handler": "is_subaccount_type",
          "file": "subaccount.py",
          "line": 145,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/subaccount",
          "handler": "create_subaccount",
          "file": "subaccount.py",
          "line": 249,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/subaccount/<int:subaccount_id>/document",
          "handler": "get_subaccount_document",
          "file": "subaccount.py",
          "line": 352,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/subaccount/<subaccount_id>",
          "handler": "get_subaccount",
          "file": "subaccount.py",
          "line": 99,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/subaccount/<subaccount_id>/status",
          "handler": "update_subaccount_status",
          "file": "subaccount.py",
          "line": 307,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/subaccount/<subaccount_uuid>/applications",
          "handler": "get_subaccount_applications",
          "file": "applications.py",
          "line": 49,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/subaccounts",
          "handler": "get_subaccounts",
          "file": "subaccount.py",
          "line": 23,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/subaccounts/applications/dataloader",
          "handler": "get_bulk_subaccount_applications",
          "file": "applications.py",
          "line": 57,
          "status": "unused",
          "dead_functions": [
            "logic/application/subaccount.py::get_bulk_subaccount_applications"
          ]
        },
        {
          "method": "POST",
          "path": "/subaccounts/names/dataloader",
          "handler": "get_subaccounts_names",
          "file": "subaccount.py",
          "line": 378,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/v2/subaccounts",
          "handler": "v2_create_subaccount",
          "file": "subaccount.py",
          "line": 277,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/v2/vendor/<vendor_uuid>/country_id",
          "handler": "v2_update_vendor_country_id",
          "file": "vendor.py",
          "line": 757,
          "status": "unused",
          "dead_functions": [
            "logic/vendor.py::update_vendor_country_id"
          ]
        },
        {
          "method": "PATCH",
          "path": "/v2/vendor/<vendor_uuid>/external-identifier-1",
          "handler": "v2_update_vendor_external_identifier_1",
          "file": "vendor.py",
          "line": 722,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/v2/vendors",
          "handler": "v2_create_vendor",
          "file": "vendor.py",
          "line": 518,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/vendor",
          "handler": "create_update_vendor",
          "file": "vendor.py",
          "line": 457,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor-currency-codes",
          "handler": "get_all_vendor_currency_codes",
          "file": "common.py",
          "line": 107,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/<int:vendor_id>/assigned-reviewer",
          "handler": "get_vendor_assigned_reviewer",
          "file": "vendor.py",
          "line": 1061,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/<int:vendor_id>/assigned-to",
          "handler": "get_vendor_assigned_to",
          "file": "vendor.py",
          "line": 998,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/vendor/<int:vendor_id>/distributor",
          "handler": "set_vendor_distributor",
          "file": "vendor.py",
          "line": 1099,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/<int:vendor_id>/document",
          "handler": "get_vendor_document",
          "file": "vendor.py",
          "line": 1033,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/<int:vendor_id>/features",
          "handler": "get_enabled_features_for_vendor",
          "file": "vendor.py",
          "line": 871,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/<int:vendor_id>/master-contact",
          "handler": "get_master_contact",
          "file": "vendor.py",
          "line": 1150,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendor/<int:vendor_id>/restricted_features/add",
          "handler": "bulk_add_restricted_features_for_vendor",
          "file": "vendor.py",
          "line": 945,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendor/<int:vendor_id>/restricted_features/remove",
          "handler": "bulk_remove_restricted_features_for_vendor",
          "file": "vendor.py",
          "line": 972,
          "status": "unused",
          "dead_functions": [
            "logic/feature.py::bulk_remove_restricted_features_for_vendor",
            "models/feature.py::bulk_remove_restricted_features_for_vendor"
          ]
        },
        {
          "method": "GET",
          "path": "/vendor/<int:vendor_id>/secondary-internal-contact",
          "handler": "get_vendor_secondary_internal_contact",
          "file": "vendor.py",
          "line": 1015,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/<int:vendor_id>/service-details",
          "handler": "get_vendor_service_details",
          "file": "vendor.py",
          "line": 1079,
          "status": "unused",
          "dead_functions": [
            "logic/vendor.py::get_vendor_service_details",
            "models/neo4j_vendor.py::get_vendor_service_tier"
          ]
        },
        {
          "method": "PUT",
          "path": "/vendor/<int:vendor_id>/suppliers",
          "handler": "set_phys_suppliers",
          "file": "vendor.py",
          "line": 843,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/<vendor_id>",
          "handler": "get_vendor",
          "file": "vendor.py",
          "line": 143,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "HEAD",
          "path": "/vendor/<vendor_id>",
          "handler": "is_valid_vendor",
          "file": "vendor.py",
          "line": 54,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/vendor/<vendor_id>",
          "handler": "update_vendor",
          "file": "vendor.py",
          "line": 569,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/<vendor_id>/suppliers",
          "handler": "get_phys_suppliers",
          "file": "vendor.py",
          "line": 820,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/<vendor_uuid>/applications",
          "handler": "get_vendor_applications",
          "file": "applications.py",
          "line": 31,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/vendor/<vendor_uuid>/closers",
          "handler": "update_vendor_closers",
          "file": "vendor.py",
          "line": 636,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/vendor/<vendor_uuid>/first_statement_period",
          "handler": "update_vendor_first_statement_period",
          "file": "vendor.py",
          "line": 678,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/vendor/<vendor_uuid>/relationship_notes",
          "handler": "update_vendor_notes",
          "file": "vendor.py",
          "line": 1170,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/brand/<vendor_id>",
          "handler": "get_company_brand",
          "file": "vendor.py",
          "line": 792,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/features/<int:feature_id>",
          "handler": "get_bulk_vendors_with_enabled_feature",
          "file": "vendor.py",
          "line": 899,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendors/applications/dataloader",
          "handler": "get_bulk_vendor_applications",
          "file": "applications.py",
          "line": 39,
          "status": "unused",
          "dead_functions": [
            "logic/application/vendor.py::get_bulk_vendor_applications"
          ]
        },
        {
          "method": "GET",
          "path": "/vendors/by-external-identifier-1/<string:external_identifier_1>",
          "handler": "get_vendors_by_external_identifier",
          "file": "vendor.py",
          "line": 1122,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendors/closers/dataloader",
          "handler": "get_vendor_closers",
          "file": "vendor.py",
          "line": 246,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendors/company_brands/dataloader",
          "handler": "get_vendors_company_brands",
          "file": "vendor.py",
          "line": 396,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendors/dataloader",
          "handler": "get_vendors",
          "file": "vendor.py",
          "line": 275,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendors/first_statement_period/dataloader",
          "handler": "get_vendors_first_statement_period",
          "file": "vendor.py",
          "line": 217,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendors/names/dataloader",
          "handler": "get_vendors_names",
          "file": "vendor.py",
          "line": 367,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendors/relationship_notes/dataloader",
          "handler": "get_vendors_relationship_notes_handler",
          "file": "vendor.py",
          "line": 1227,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendors/service_tier/dataloader",
          "handler": "get_vendors_service_tier",
          "file": "vendor.py",
          "line": 419,
          "status": "unused",
          "dead_functions": [
            "logic/vendor.py::get_vendor_service_tier",
            "models/ows_permissions.py::get_profile_has_all_label_access",
            "models/vendor.py::get_vendor_service_tier"
          ]
        }
      ],
      "dead_functions": [
        "logic/application/subaccount.py::get_bulk_subaccount_applications",
        "logic/application/vendor.py::get_bulk_vendor_applications",
        "logic/country.py::get_countries",
        "logic/feature.py::bulk_remove_restricted_features_for_vendor",
        "logic/genre.py::get_genres",
        "logic/parent_company.py::get_parent_companies",
        "logic/sme.py::is_sme_subaccount",
        "logic/vendor.py::get_parent_companies",
        "logic/vendor.py::get_service_tiers",
        "logic/vendor.py::get_vendor_service_details",
        "logic/vendor.py::get_vendor_service_tier",
        "logic/vendor.py::update_vendor_country_id",
        "models/country.py::get_countries",
        "models/feature.py::bulk_remove_restricted_features_for_vendor",
        "models/genre.py::get_genres",
        "models/neo4j_vendor.py::get_parent_companies",
        "models/neo4j_vendor.py::get_service_tiers",
        "models/neo4j_vendor.py::get_vendor_service_tier",
        "models/ows_permissions.py::get_profile_has_all_label_access",
        "models/vendor.py::get_vendor_service_tier"
      ]
    },
    {
      "name": "ows-accounting",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-accounting.git",
      "team": "abacus",
      "endpoints": {
        "total": 29,
        "used": {
          "count": 21,
          "percent": 72.4
        },
        "unused": {
          "count": 8,
          "percent": 27.6
        }
      },
      "functions": {
        "total": 24,
        "dead": 5,
        "dead_percent": 20.8
      },
      "details": [
        {
          "method": "GET",
          "path": "/",
          "handler": "hello_world",
          "file": "handlers.py",
          "line": 53,
          "status": "unused",
          "dead_functions": [
            "logic/hello.py::say_hello"
          ]
        },
        {
          "method": "GET",
          "path": "/<account_type>/<int:account_id>/average-monthly-net-revenue",
          "handler": "get_average_monthly_net_revenue",
          "file": "handlers.py",
          "line": 608,
          "status": "unused",
          "dead_functions": [
            "logic/revenue.py::get_average_monthly_net_revenue"
          ]
        },
        {
          "method": "GET",
          "path": "/<string:account_type>/<int:account_id>/eq_bonus",
          "handler": "get_eq_bonus_for_account",
          "file": "handlers.py",
          "line": 664,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/<string:account_type>/<int:account_id>/eq_bonus_payment",
          "handler": "get_eq_bonus_payment_for_account",
          "file": "handlers.py",
          "line": 687,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/accounting-intervals/<int:recent_intervals>",
          "handler": "get_accounting_intervals",
          "file": "handlers.py",
          "line": 552,
          "status": "unused",
          "dead_functions": [
            "logic/accounting_intervals.py::get_intervals_from_contracts"
          ]
        },
        {
          "method": "GET",
          "path": "/accounting_period",
          "handler": "get_accounting_period",
          "file": "handlers.py",
          "line": 510,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/accounting_period_details/<int:period_id>",
          "handler": "get_accounting_period_details",
          "file": "handlers.py",
          "line": 523,
          "status": "unused",
          "dead_functions": [
            "logic/accounting_intervals.py::get_period_by_id"
          ]
        },
        {
          "method": "GET",
          "path": "/accounting_periods",
          "handler": "get_accounting_periods",
          "file": "handlers.py",
          "line": 537,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/attachment",
          "handler": "get_attachment",
          "file": "handlers.py",
          "line": 485,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/attachments",
          "handler": "get_attachments",
          "file": "handlers.py",
          "line": 459,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/budget-caps",
          "handler": "get_budget_caps",
          "file": "handlers.py",
          "line": 638,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/currency/<int:currency_id>",
          "handler": "get_currency_by_id",
          "file": "handlers.py",
          "line": 722,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/eq_bonus",
          "handler": "get_eq_bonus",
          "file": "handlers.py",
          "line": 583,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/eq_bonus_payment",
          "handler": "get_eq_bonus_payment",
          "file": "handlers.py",
          "line": 595,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/get-physical-reserves",
          "handler": "get_physical_reserves",
          "file": "handlers.py",
          "line": 644,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 356,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/holds/<int:hold_id>",
          "handler": "get_holds_by_id",
          "file": "handlers.py",
          "line": 410,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/holds/<int:hold_id>",
          "handler": "edit_hold",
          "file": "handlers.py",
          "line": 364,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/holds/active",
          "handler": "get_active_holds",
          "file": "handlers.py",
          "line": 382,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/holds/vendor/<int:vendor_id>",
          "handler": "get_holds_for_vendor",
          "file": "handlers.py",
          "line": 423,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/holds/vendor/<int:vendor_id>",
          "handler": "create_hold_for_vendor",
          "file": "handlers.py",
          "line": 439,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payments",
          "handler": "get_payments",
          "file": "handlers.py",
          "line": 337,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/report",
          "handler": "get_report",
          "file": "handlers.py",
          "line": 111,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/report",
          "handler": "post_report",
          "file": "handlers.py",
          "line": 225,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/report-link",
          "handler": "get_report_link",
          "file": "handlers.py",
          "line": 168,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reports",
          "handler": "get_reports",
          "file": "handlers.py",
          "line": 66,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/revenue",
          "handler": "get_revenue",
          "file": "handlers.py",
          "line": 314,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/transaction_types",
          "handler": "get_transaction_types",
          "file": "handlers.py",
          "line": 282,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor-currency",
          "handler": "get_vendor_currency",
          "file": "handlers.py",
          "line": 709,
          "status": "unused",
          "dead_functions": [
            "logic/vendor_currency.py::get_currency_by_vendor_id"
          ]
        }
      ],
      "dead_functions": [
        "logic/accounting_intervals.py::get_intervals_from_contracts",
        "logic/accounting_intervals.py::get_period_by_id",
        "logic/hello.py::say_hello",
        "logic/revenue.py::get_average_monthly_net_revenue",
        "logic/vendor_currency.py::get_currency_by_vendor_id"
      ]
    },
    {
      "name": "ows-analytics",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-analytics.git",
      "team": "insights",
      "endpoints": {
        "total": 97,
        "used": {
          "count": 69,
          "percent": 71.1
        },
        "unused": {
          "count": 28,
          "percent": 28.9
        }
      },
      "functions": {
        "total": 77,
        "dead": 35,
        "dead_percent": 45.5
      },
      "details": [
        {
          "method": "GET",
          "path": "/account/<account_id>/products",
          "handler": "account_products",
          "file": "account_handlers.py",
          "line": 102,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/<account_id>/summary",
          "handler": "account_summary",
          "file": "account_handlers.py",
          "line": 55,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/<account_id>/timeseries",
          "handler": "account_timeseries",
          "file": "account_handlers.py",
          "line": 21,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/<account_id>/top-content",
          "handler": "account_top_content",
          "file": "account_handlers.py",
          "line": 141,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/<account_id>/video/summary",
          "handler": "account_video_summary",
          "file": "account_handlers.py",
          "line": 184,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/<account_id>/video/timeseries",
          "handler": "account_video_timeseries",
          "file": "account_handlers.py",
          "line": 221,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/all-time-channel-metrics/<channel_id>",
          "handler": "get_all_time_channel_metrics",
          "file": "handlers.py",
          "line": 1644,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/all-time-video-metrics/<video_id>",
          "handler": "get_all_time_video_metrics",
          "file": "handlers.py",
          "line": 1582,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/channel-metrics/<channel_id>",
          "handler": "get_channel_metrics",
          "file": "handlers.py",
          "line": 1605,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/channels/<channel_id>/top-countries",
          "handler": "get_top_countries_channels",
          "file": "handlers.py",
          "line": 1392,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/channels/<channel_id>/top-traffic-sources",
          "handler": "get_top_channel_traffic_sources",
          "file": "handlers.py",
          "line": 1463,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/channels/<channel_id>/top-videos",
          "handler": "get_channel_top_videos",
          "file": "handlers.py",
          "line": 1494,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/demographics/",
          "handler": "get_demographics_2",
          "file": "handlers.py",
          "line": 1283,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/feeds",
          "handler": "get_feeds",
          "file": "handlers.py",
          "line": 99,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/feeds_v2",
          "handler": "get_feeds_v2",
          "file": "handlers.py",
          "line": 111,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 73,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/highwatermark",
          "handler": "get_highwatermark",
          "file": "handlers.py",
          "line": 1745,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/market-ranks",
          "handler": "get_market_ranks",
          "file": "handlers.py",
          "line": 1787,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/participant-metrics",
          "handler": "get_participant_metrics",
          "file": "participant_handlers.py",
          "line": 44,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/aggregated-streams",
          "handler": "get_participant_aggregated_streams",
          "file": "participant_handlers.py",
          "line": 606,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/aggregated-summary",
          "handler": "get_participant_aggregated_summary",
          "file": "participant_handlers.py",
          "line": 563,
          "status": "unused",
          "dead_functions": [
            "logic/participant.py::get_aggregated_summary"
          ]
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/aggregated-summary-v2",
          "handler": "get_participant_aggregated_summary_v2",
          "file": "participant_handlers.py",
          "line": 581,
          "status": "unused",
          "dead_functions": [
            "logic/participant.py::get_aggregated_summary_v2"
          ]
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/demographics",
          "handler": "get_participant_demographics",
          "file": "participant_handlers.py",
          "line": 531,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/product-downloads-all",
          "handler": "participant_product_downloads_all",
          "file": "participant_handlers.py",
          "line": 438,
          "status": "unused",
          "dead_functions": [
            "logic/participant_product_downloads.py::product_downloads_all"
          ]
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/product-downloads-by-country",
          "handler": "participant_product_downloads_by_country",
          "file": "participant_handlers.py",
          "line": 407,
          "status": "unused",
          "dead_functions": [
            "logic/participant_product_downloads.py::product_downloads_by_country"
          ]
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/product-downloads-by-store",
          "handler": "participant_product_downloads_by_store",
          "file": "participant_handlers.py",
          "line": 376,
          "status": "unused",
          "dead_functions": [
            "logic/participant_product_downloads.py::product_downloads_by_store"
          ]
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/summary",
          "handler": "get_participant_summary",
          "file": "participant_handlers.py",
          "line": 468,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/timeseries",
          "handler": "get_participant_timeseries",
          "file": "participant_handlers.py",
          "line": 503,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/track-downloads-all",
          "handler": "get_participant_track_downloads_all",
          "file": "participant_handlers.py",
          "line": 252,
          "status": "unused",
          "dead_functions": [
            "logic/participant_track_downloads.py::get_track_downloads_all"
          ]
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/track-downloads-by-country",
          "handler": "get_participant_track_downloads_country",
          "file": "participant_handlers.py",
          "line": 283,
          "status": "unused",
          "dead_functions": [
            "logic/participant_track_downloads.py::get_track_downloads_country"
          ]
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/track-downloads-by-store",
          "handler": "get_participant_track_downloads_store",
          "file": "participant_handlers.py",
          "line": 314,
          "status": "unused",
          "dead_functions": [
            "logic/participant_track_downloads.py::get_track_downloads_store"
          ]
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/track-streams-all",
          "handler": "get_participant_track_streams_all",
          "file": "participant_handlers.py",
          "line": 97,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/track-streams-by-country",
          "handler": "get_participant_track_streams_country",
          "file": "participant_handlers.py",
          "line": 128,
          "status": "unused",
          "dead_functions": [
            "logic/participant_track_streams.py::get_track_streams_country"
          ]
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/track-streams-by-sos",
          "handler": "get_participant_track_streams_sos",
          "file": "participant_handlers.py",
          "line": 190,
          "status": "unused",
          "dead_functions": [
            "logic/participant_track_streams.py::get_track_streams_sos"
          ]
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/track-streams-by-sound-recording",
          "handler": "get_participant_track_streams_sound_recording",
          "file": "participant_handlers.py",
          "line": 159,
          "status": "unused",
          "dead_functions": [
            "logic/participant_track_streams.py::get_track_streams_sound_recording"
          ]
        },
        {
          "method": "GET",
          "path": "/participant/<global_participant_id>/track-streams-by-store",
          "handler": "get_participant_track_streams_store",
          "file": "participant_handlers.py",
          "line": 221,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product-metrics",
          "handler": "get_product_metrics",
          "file": "handlers.py",
          "line": 242,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>",
          "handler": "get_product",
          "file": "handlers.py",
          "line": 480,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/aggregate-streams",
          "handler": "get_product_aggregate_streams",
          "file": "handlers.py",
          "line": 500,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/aggregated-streams",
          "handler": "product_aggregated_streams",
          "file": "product_handlers.py",
          "line": 106,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/aggregated-summary",
          "handler": "product_aggregated_summary",
          "file": "product_handlers.py",
          "line": 132,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/downloads-all",
          "handler": "get_product_downloads_all",
          "file": "handlers.py",
          "line": 327,
          "status": "unused",
          "dead_functions": [
            "logic/product.py::get_product_downloads_all",
            "models/product.py::get_product_downloads"
          ]
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/metadata",
          "handler": "get_product_metadata",
          "file": "handlers.py",
          "line": 526,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/metrics-by-track",
          "handler": "get_product_metrics_by_track",
          "file": "handlers.py",
          "line": 1669,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/streams-all",
          "handler": "get_product_streams_all",
          "file": "handlers.py",
          "line": 296,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/summary",
          "handler": "product_summary",
          "file": "product_handlers.py",
          "line": 68,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/timeseries",
          "handler": "product_timeseries",
          "file": "product_handlers.py",
          "line": 22,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/track-downloads-all",
          "handler": "get_product_track_downloads_all",
          "file": "handlers.py",
          "line": 418,
          "status": "unused",
          "dead_functions": [
            "logic/product.py::get_product_track_downloads_all",
            "models/product.py::get_product_track_downloads_all"
          ]
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/track-downloads-by-country",
          "handler": "get_product_track_downloads_by_country",
          "file": "handlers.py",
          "line": 387,
          "status": "unused",
          "dead_functions": [
            "logic/product.py::get_product_track_downloads_by_country",
            "models/product.py::get_product_track_downloads_by_country"
          ]
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/track-downloads-by-store",
          "handler": "get_product_track_downloads_by_store",
          "file": "handlers.py",
          "line": 449,
          "status": "unused",
          "dead_functions": [
            "logic/product.py::get_product_track_downloads_by_store",
            "models/product.py::get_product_track_downloads_by_store"
          ]
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/track-downloads-by-track",
          "handler": "get_product_track_downloads_by_track",
          "file": "handlers.py",
          "line": 356,
          "status": "unused",
          "dead_functions": [
            "logic/product.py::get_product_track_downloads_by_track",
            "models/product.py::get_product_track_downloads_by_track"
          ]
        },
        {
          "method": "GET",
          "path": "/product/growth-periods-bulk",
          "handler": "product_bulk_growth_periods",
          "file": "product_handlers.py",
          "line": 54,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/aggregated-streams",
          "handler": "sound_recording_aggregated_streams",
          "file": "handlers.py",
          "line": 1720,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/aggregated-summary",
          "handler": "sound_recording_aggregated_summary",
          "file": "handlers.py",
          "line": 1702,
          "status": "unused",
          "dead_functions": [
            "logic/streams.py::get_sound_recording_aggregated_summary"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/demographics",
          "handler": "get_demographics",
          "file": "handlers.py",
          "line": 1247,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/downloads",
          "handler": "get_downloads",
          "file": "handlers.py",
          "line": 1109,
          "status": "unused",
          "dead_functions": [
            "logic/downloads.py::get_downloads"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/downloads-all",
          "handler": "get_sound_recording_downloads_all",
          "file": "handlers.py",
          "line": 1138,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/downloads-by-country",
          "handler": "get_sound_recording_downloads_by_country",
          "file": "handlers.py",
          "line": 1166,
          "status": "unused",
          "dead_functions": [
            "logic/downloads.py::get_downloads_by_country",
            "models/downloads.py::get_downloads_by_country"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/downloads-by-product",
          "handler": "get_sound_recording_downloads_by_product",
          "file": "handlers.py",
          "line": 981,
          "status": "unused",
          "dead_functions": [
            "logic/downloads.py::get_downloads_by_product",
            "models/downloads.py::get_downloads_by_product"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/downloads-by-store",
          "handler": "get_sound_recording_downloads_by_store",
          "file": "handlers.py",
          "line": 953,
          "status": "unused",
          "dead_functions": [
            "logic/downloads.py::get_downloads_by_store"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/metadata",
          "handler": "get_sound_recording_metadata",
          "file": "handlers.py",
          "line": 937,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/related-videos-by-isrc",
          "handler": "sound_recording_related_videos_by_isrc",
          "file": "sound_recording_handlers.py",
          "line": 77,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/source-of-streams",
          "handler": "get_source_of_streams",
          "file": "handlers.py",
          "line": 1195,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/streams",
          "handler": "get_streams",
          "file": "handlers.py",
          "line": 1040,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/streams-all",
          "handler": "get_streams_all",
          "file": "handlers.py",
          "line": 213,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/streams-breakdown",
          "handler": "get_streams_breakdown",
          "file": "handlers.py",
          "line": 125,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/streams-by-sos",
          "handler": "get_streams_by_source_of_streams",
          "file": "handlers.py",
          "line": 155,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/streams-by-store",
          "handler": "get_streams_by_store",
          "file": "handlers.py",
          "line": 184,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/summary",
          "handler": "sound_recording_summary",
          "file": "sound_recording_handlers.py",
          "line": 44,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/tiktok/aggregated-summary",
          "handler": "sound_recording_tiktok_aggregated_summary",
          "file": "tiktok_handlers.py",
          "line": 70,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/tiktok/aggregated-timeseries",
          "handler": "sound_recording_tiktok_aggregated_timeseries",
          "file": "tiktok_handlers.py",
          "line": 92,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/tiktok/summary",
          "handler": "sound_recording_tiktok_summary",
          "file": "tiktok_handlers.py",
          "line": 42,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/tiktok/timeseries",
          "handler": "sound_recording_tiktok_timeseries",
          "file": "tiktok_handlers.py",
          "line": 18,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/timeseries",
          "handler": "sound_recording_timeseries",
          "file": "sound_recording_handlers.py",
          "line": 20,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/top-countries-downloads",
          "handler": "get_top_countries_downloads",
          "file": "handlers.py",
          "line": 1346,
          "status": "unused",
          "dead_functions": [
            "logic/top_countries.py::get_top_countries_downloads",
            "models/top_countries.py::get_top_countries_downloads"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/top-countries-streams",
          "handler": "get_top_countries_streams",
          "file": "handlers.py",
          "line": 1323,
          "status": "unused",
          "dead_functions": [
            "logic/top_countries.py::get_top_countries_streams",
            "models/top_countries.py::get_top_countries_aggregate_streams"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/top-markets",
          "handler": "get_top_markets",
          "file": "handlers.py",
          "line": 1224,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/sound-recording/aggregate-streams",
          "handler": "get_aggregate_streams",
          "file": "handlers.py",
          "line": 1010,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/sound-recording/streams",
          "handler": "get_streams_bulk",
          "file": "handlers.py",
          "line": 1073,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/store-outages",
          "handler": "get_store_outages",
          "file": "handlers.py",
          "line": 1774,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/stores",
          "handler": "get_stores",
          "file": "handlers.py",
          "line": 1764,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tadas-trends",
          "handler": "get_tadas_trends",
          "file": "handlers.py",
          "line": 1801,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tadas/data-availability",
          "handler": "get_tadas_data_availability",
          "file": "handlers.py",
          "line": 1891,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tadas/trend-globalsoundrecording-by-isrc/<isrc>",
          "handler": "get_tadas_trend_by_isrc",
          "file": "handlers.py",
          "line": 1867,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/top-accounts-metrics",
          "handler": "get_top_accounts_metrics",
          "file": "handlers.py",
          "line": 716,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/top-channel-metrics",
          "handler": "get_top_channel_metrics",
          "file": "handlers.py",
          "line": 828,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/top-metrics",
          "handler": "get_top_metrics",
          "file": "handlers.py",
          "line": 571,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/top-sound-recording-families-by-ids",
          "handler": "get_top_sound_recording_families_by_ids",
          "file": "handlers.py",
          "line": 667,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/top-sound-recording-families-ids",
          "handler": "get_top_sound_recording_families_ids",
          "file": "handlers.py",
          "line": 623,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/top-sound-recordings",
          "handler": "get_top_sound_recordings",
          "file": "handlers.py",
          "line": 544,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/top-video-metrics",
          "handler": "get_top_video_metrics",
          "file": "handlers.py",
          "line": 782,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/total-catalog-songs",
          "handler": "get_total_songs_in_catalog",
          "file": "handlers.py",
          "line": 918,
          "status": "unused",
          "dead_functions": [
            "logic/total_catalog_songs.py::get_total_songs_in_catalog",
            "models/total_catalog_songs.py::get_total_songs_in_catalog"
          ]
        },
        {
          "method": "GET",
          "path": "/ugc-video-metrics",
          "handler": "get_ugc_video_metrics",
          "file": "handlers.py",
          "line": 870,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/video-metrics-bulk",
          "handler": "get_video_metrics_bulk",
          "file": "handlers.py",
          "line": 1564,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/video-metrics/<video_id>",
          "handler": "get_video_metrics",
          "file": "handlers.py",
          "line": 1535,
          "status": "unused",
          "dead_functions": [
            "logic/video_metrics.py::get_video_metrics"
          ]
        },
        {
          "method": "GET",
          "path": "/videos/<video_id>/top-countries",
          "handler": "get_top_countries_videos",
          "file": "handlers.py",
          "line": 1369,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/videos/<video_id>/top-traffic-sources",
          "handler": "get_top_video_traffic_sources",
          "file": "handlers.py",
          "line": 1415,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/downloads.py::get_downloads",
        "logic/downloads.py::get_downloads_by_country",
        "logic/downloads.py::get_downloads_by_product",
        "logic/downloads.py::get_downloads_by_store",
        "logic/participant.py::get_aggregated_summary",
        "logic/participant.py::get_aggregated_summary_v2",
        "logic/participant_product_downloads.py::product_downloads_all",
        "logic/participant_product_downloads.py::product_downloads_by_country",
        "logic/participant_product_downloads.py::product_downloads_by_store",
        "logic/participant_track_downloads.py::get_track_downloads_all",
        "logic/participant_track_downloads.py::get_track_downloads_country",
        "logic/participant_track_downloads.py::get_track_downloads_store",
        "logic/participant_track_streams.py::get_track_streams_country",
        "logic/participant_track_streams.py::get_track_streams_sos",
        "logic/participant_track_streams.py::get_track_streams_sound_recording",
        "logic/product.py::get_product_downloads_all",
        "logic/product.py::get_product_track_downloads_all",
        "logic/product.py::get_product_track_downloads_by_country",
        "logic/product.py::get_product_track_downloads_by_store",
        "logic/product.py::get_product_track_downloads_by_track",
        "logic/streams.py::get_sound_recording_aggregated_summary",
        "logic/top_countries.py::get_top_countries_downloads",
        "logic/top_countries.py::get_top_countries_streams",
        "logic/total_catalog_songs.py::get_total_songs_in_catalog",
        "logic/video_metrics.py::get_video_metrics",
        "models/downloads.py::get_downloads_by_country",
        "models/downloads.py::get_downloads_by_product",
        "models/product.py::get_product_downloads",
        "models/product.py::get_product_track_downloads_all",
        "models/product.py::get_product_track_downloads_by_country",
        "models/product.py::get_product_track_downloads_by_store",
        "models/product.py::get_product_track_downloads_by_track",
        "models/top_countries.py::get_top_countries_aggregate_streams",
        "models/top_countries.py::get_top_countries_downloads",
        "models/total_catalog_songs.py::get_total_songs_in_catalog"
      ]
    },
    {
      "name": "ows-analytics-sr",
      "framework": "flask",
      "repo_url": "",
      "team": "",
      "endpoints": {
        "total": 25,
        "used": {
          "count": 0,
          "percent": 0.0
        },
        "unused": {
          "count": 25,
          "percent": 100.0
        }
      },
      "functions": {
        "total": 23,
        "dead": 41,
        "dead_percent": 178.3
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 50,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/demographics",
          "handler": "get_demographics",
          "file": "handlers.py",
          "line": 726,
          "status": "unused",
          "dead_functions": [
            "logic/demographics.py::get_demographics"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/downloads",
          "handler": "get_downloads",
          "file": "handlers.py",
          "line": 487,
          "status": "unused",
          "dead_functions": [
            "logic/downloads.py::get_downloads",
            "models/downloads.py::get_downloads"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/downloads-all",
          "handler": "get_sound_recording_downloads_all",
          "file": "handlers.py",
          "line": 516,
          "status": "unused",
          "dead_functions": [
            "logic/downloads.py::get_downloads_all",
            "models/downloads.py::get_downloads"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/downloads-by-country",
          "handler": "get_sound_recording_downloads_by_country",
          "file": "handlers.py",
          "line": 544,
          "status": "unused",
          "dead_functions": [
            "logic/downloads.py::get_downloads_by_country",
            "models/downloads.py::get_downloads_by_country"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/downloads-by-product",
          "handler": "get_sound_recording_downloads_by_product",
          "file": "handlers.py",
          "line": 359,
          "status": "unused",
          "dead_functions": [
            "logic/downloads.py::get_downloads_by_product",
            "models/downloads.py::get_downloads_by_product"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/downloads-by-store",
          "handler": "get_sound_recording_downloads_by_store",
          "file": "handlers.py",
          "line": 331,
          "status": "unused",
          "dead_functions": [
            "logic/downloads.py::get_downloads_by_store",
            "models/downloads.py::get_downloads"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/metadata",
          "handler": "get_sound_recording_metadata",
          "file": "handlers.py",
          "line": 315,
          "status": "unused",
          "dead_functions": [
            "logic/sound_recording_metadata.py::get_sound_recording_metadata",
            "models/track_metadata.py::get_track_metadata"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/performance-by-country",
          "handler": "get_performance_by_country",
          "file": "handlers.py",
          "line": 106,
          "status": "unused",
          "dead_functions": [
            "logic/performance_by_country.py::get_performance_by_country",
            "models/performance_by_country.py::get_performance_by_country"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/placement/<playlist_id>",
          "handler": "get_placement",
          "file": "handlers.py",
          "line": 673,
          "status": "unused",
          "dead_functions": [
            "logic/placements.py::get_placement",
            "models/placements_metadata.py::get_placement"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/placements",
          "handler": "get_placements",
          "file": "handlers.py",
          "line": 625,
          "status": "unused",
          "dead_functions": [
            "logic/placements.py::get_placements",
            "models/placements_metadata.py::get_placements_metadata"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/playlists",
          "handler": "get_playlists",
          "file": "handlers.py",
          "line": 691,
          "status": "unused",
          "dead_functions": [
            "logic/playlists.py::get_playlists"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/source-of-streams",
          "handler": "get_source_of_streams",
          "file": "handlers.py",
          "line": 573,
          "status": "unused",
          "dead_functions": [
            "logic/source_of_streams.py::get_source_breakdown",
            "models/source_of_streams.py::get_dynamic_sos_breakdown",
            "models/source_of_streams.py::get_sos_breakdown"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/streams",
          "handler": "get_streams",
          "file": "handlers.py",
          "line": 418,
          "status": "unused",
          "dead_functions": [
            "logic/streams.py::get_streams_bulk"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/streams-all",
          "handler": "get_streams_all",
          "file": "handlers.py",
          "line": 222,
          "status": "unused",
          "dead_functions": [
            "logic/streams.py::get_streams_all",
            "models/streams.py::get_streams_all"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/streams-breakdown",
          "handler": "get_streams_breakdown",
          "file": "handlers.py",
          "line": 76,
          "status": "unused",
          "dead_functions": [
            "logic/streams_breakdown.py::get_streams_breakdown"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/streams-by-product",
          "handler": "get_streams_by_product",
          "file": "handlers.py",
          "line": 135,
          "status": "unused",
          "dead_functions": [
            "logic/streams_by_product.py::get_streams_by_product",
            "models/streams_by_product.py::get_streams_by_product"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/streams-by-sos",
          "handler": "get_streams_by_source_of_streams",
          "file": "handlers.py",
          "line": 164,
          "status": "unused",
          "dead_functions": [
            "logic/streams_by_sos.py::get_streams_by_source_of_streams",
            "models/streams_by_sos.py::get_streams_by_source_of_streams"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/streams-by-store",
          "handler": "get_streams_by_store",
          "file": "handlers.py",
          "line": 193,
          "status": "unused",
          "dead_functions": [
            "logic/streams_by_store.py::get_streams_by_store",
            "models/streams_by_store.py::get_streams_by_store"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/top-countries-downloads",
          "handler": "get_top_countries_downloads",
          "file": "handlers.py",
          "line": 785,
          "status": "unused",
          "dead_functions": [
            "logic/top_countries.py::get_top_countries_downloads",
            "models/top_countries.py::get_top_countries_downloads"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/top-countries-streams",
          "handler": "get_top_countries_streams",
          "file": "handlers.py",
          "line": 762,
          "status": "unused",
          "dead_functions": [
            "logic/top_countries.py::get_top_countries_streams",
            "models/top_countries.py::get_top_countries_aggregate_streams"
          ]
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/top-markets",
          "handler": "get_top_markets",
          "file": "handlers.py",
          "line": 602,
          "status": "unused",
          "dead_functions": [
            "logic/top_markets.py::get_top_markets",
            "models/top_markets.py::get_top_markets"
          ]
        },
        {
          "method": "POST",
          "path": "/sound-recording/aggregate-streams",
          "handler": "get_aggregate_streams",
          "file": "handlers.py",
          "line": 388,
          "status": "unused",
          "dead_functions": [
            "logic/streams.py::get_aggregate_streams",
            "models/streams.py::get_aggregate_streams"
          ]
        },
        {
          "method": "POST",
          "path": "/sound-recording/streams",
          "handler": "get_streams_bulk",
          "file": "handlers.py",
          "line": 451,
          "status": "unused",
          "dead_functions": [
            "logic/streams.py::get_streams_bulk"
          ]
        },
        {
          "method": "GET",
          "path": "/top-sound-recordings",
          "handler": "get_top_sound_recordings",
          "file": "handlers.py",
          "line": 289,
          "status": "unused",
          "dead_functions": [
            "logic/top_sound_recordings.py::get_top_sound_recordings",
            "models/top_sound_recordings.py::get_top_sound_recordings"
          ]
        }
      ],
      "dead_functions": [
        "logic/demographics.py::get_demographics",
        "logic/downloads.py::get_downloads",
        "logic/downloads.py::get_downloads_all",
        "logic/downloads.py::get_downloads_by_country",
        "logic/downloads.py::get_downloads_by_product",
        "logic/downloads.py::get_downloads_by_store",
        "logic/performance_by_country.py::get_performance_by_country",
        "logic/placements.py::get_placement",
        "logic/placements.py::get_placements",
        "logic/playlists.py::get_playlists",
        "logic/sound_recording_metadata.py::get_sound_recording_metadata",
        "logic/source_of_streams.py::get_source_breakdown",
        "logic/streams.py::get_aggregate_streams",
        "logic/streams.py::get_streams_all",
        "logic/streams.py::get_streams_bulk",
        "logic/streams_breakdown.py::get_streams_breakdown",
        "logic/streams_by_product.py::get_streams_by_product",
        "logic/streams_by_sos.py::get_streams_by_source_of_streams",
        "logic/streams_by_store.py::get_streams_by_store",
        "logic/top_countries.py::get_top_countries_downloads",
        "logic/top_countries.py::get_top_countries_streams",
        "logic/top_markets.py::get_top_markets",
        "logic/top_sound_recordings.py::get_top_sound_recordings",
        "models/downloads.py::get_downloads",
        "models/downloads.py::get_downloads_by_country",
        "models/downloads.py::get_downloads_by_product",
        "models/performance_by_country.py::get_performance_by_country",
        "models/placements_metadata.py::get_placement",
        "models/placements_metadata.py::get_placements_metadata",
        "models/source_of_streams.py::get_dynamic_sos_breakdown",
        "models/source_of_streams.py::get_sos_breakdown",
        "models/streams.py::get_aggregate_streams",
        "models/streams.py::get_streams_all",
        "models/streams_by_product.py::get_streams_by_product",
        "models/streams_by_sos.py::get_streams_by_source_of_streams",
        "models/streams_by_store.py::get_streams_by_store",
        "models/top_countries.py::get_top_countries_aggregate_streams",
        "models/top_countries.py::get_top_countries_downloads",
        "models/top_markets.py::get_top_markets",
        "models/top_sound_recordings.py::get_top_sound_recordings",
        "models/track_metadata.py::get_track_metadata"
      ]
    },
    {
      "name": "ows-artist",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-artist.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 15,
        "used": {
          "count": 9,
          "percent": 60.0
        },
        "unused": {
          "count": 6,
          "percent": 40.0
        }
      },
      "functions": {
        "total": 14,
        "dead": 5,
        "dead_percent": 35.7
      },
      "details": [
        {
          "method": "GET",
          "path": "/<account_type>/<int:account_id>/artist/<artist_id>",
          "handler": "fetch_full_artist_by_id",
          "file": "handlers.py",
          "line": 191,
          "status": "unused",
          "dead_functions": [
            "logic/artists.py::fetch_full_artist_by_id"
          ]
        },
        {
          "method": "GET",
          "path": "/<account_type>/<int:account_id>/artists",
          "handler": "fetch_artists",
          "file": "handlers.py",
          "line": 70,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/<account_type>/<int:account_id>/full-artists",
          "handler": "fetch_full_artists",
          "file": "handlers.py",
          "line": 115,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/<account_type>/<int:account_id>/full-artists/bulk",
          "handler": "fetch_full_artists_bulk",
          "file": "handlers.py",
          "line": 150,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/apple/search",
          "handler": "search_apple_artist",
          "file": "handlers.py",
          "line": 348,
          "status": "unused",
          "dead_functions": [
            "logic/apple_artists.py::search"
          ]
        },
        {
          "method": "POST",
          "path": "/artist",
          "handler": "create_artist",
          "file": "handlers.py",
          "line": 223,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artist/<int:artist_id>",
          "handler": "get_artist_by_id",
          "file": "handlers.py",
          "line": 259,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/artist/<int:artist_id>",
          "handler": "update_artist",
          "file": "handlers.py",
          "line": 400,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artist/<int:artist_id>/document",
          "handler": "get_artist_doc_by_id",
          "file": "handlers.py",
          "line": 283,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists",
          "handler": "get_artists",
          "file": "handlers.py",
          "line": 55,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/filter",
          "handler": "filter_artist",
          "file": "handlers.py",
          "line": 306,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello",
          "handler": "legacy_health",
          "file": "handlers.py",
          "line": 39,
          "status": "unused",
          "dead_functions": [
            "logic/hello.py::health_check"
          ]
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 45,
          "status": "unused",
          "dead_functions": [
            "logic/hello.py::health_check"
          ]
        },
        {
          "method": "GET",
          "path": "/products/<int:product_id>/artists",
          "handler": "get_artist_identifiers",
          "file": "handlers.py",
          "line": 373,
          "status": "unused",
          "dead_functions": [
            "logic/artists.py::fetch_artist_identifiers"
          ]
        },
        {
          "method": "GET",
          "path": "/spotify/search",
          "handler": "search_spotify_artist",
          "file": "handlers.py",
          "line": 331,
          "status": "unused",
          "dead_functions": [
            "logic/spotify_artists.py::search"
          ]
        }
      ],
      "dead_functions": [
        "logic/apple_artists.py::search",
        "logic/artists.py::fetch_artist_identifiers",
        "logic/artists.py::fetch_full_artist_by_id",
        "logic/hello.py::health_check",
        "logic/spotify_artists.py::search"
      ]
    },
    {
      "name": "ows-assets",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-assets.git",
      "team": "content-delivery-asset-management",
      "endpoints": {
        "total": 40,
        "used": {
          "count": 34,
          "percent": 85.0
        },
        "unused": {
          "count": 6,
          "percent": 15.0
        }
      },
      "functions": {
        "total": 42,
        "dead": 6,
        "dead_percent": 14.3
      },
      "details": [
        {
          "method": "GET",
          "path": "/asset/product/<product_id>",
          "handler": "get_product_by_id_v2",
          "file": "handlers.py",
          "line": 605,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 71,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/hive_segments",
          "handler": "save_hive_segment_data",
          "file": "handlers.py",
          "line": 1256,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/image/<from_pid>/copy/<to_pid>",
          "handler": "copy_product_artwork",
          "file": "handlers.py",
          "line": 958,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/image/<image_type>/<image_format>/<entity_id>/location",
          "handler": "get_image_location",
          "file": "handlers.py",
          "line": 812,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/image/<image_type>/<image_format>/location",
          "handler": "get_image_locations",
          "file": "handlers.py",
          "line": 916,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/image/<image_type>/<image_format>/location",
          "handler": "get_image_locations",
          "file": "handlers.py",
          "line": 916,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/image/profile",
          "handler": "get_profile_image",
          "file": "handlers.py",
          "line": 872,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/image/vendor/<int:vendor_id>/asset/<int:asset_id>",
          "handler": "get_vendor_image",
          "file": "handlers.py",
          "line": 1162,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/assets",
          "handler": "get_assets_info_by_single_product_id",
          "file": "handlers.py",
          "line": 1239,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/stream/track/<track_id>/hls",
          "handler": "get_hls_streaming_link",
          "file": "handlers.py",
          "line": 986,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/track/<from_tuid>/copy/<to_tuid>",
          "handler": "copy_track",
          "file": "handlers.py",
          "line": 1289,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/upload-token",
          "handler": "get_upload_token",
          "file": "handlers.py",
          "line": 286,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/upload-token",
          "handler": "get_upload_token",
          "file": "handlers.py",
          "line": 286,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/upload-token/<entity>/<int:entity_id>",
          "handler": "get_upload_token_for_entity",
          "file": "handlers.py",
          "line": 1102,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/asset",
          "handler": "get_asset_info",
          "file": "handlers.py",
          "line": 532,
          "status": "unused",
          "dead_functions": [
            "logic/asset_info.py::get_asset_info",
            "models/asset_final.py::get_asset_final"
          ]
        },
        {
          "method": "POST",
          "path": "/v2/asset",
          "handler": "post_asset_handler_v2",
          "file": "handlers.py",
          "line": 382,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/v2/asset/<product_id>/artwork/approve",
          "handler": "approve_artwork",
          "file": "handlers.py",
          "line": 411,
          "status": "unused",
          "dead_functions": [
            "logic/asset_upload.py::approve_artwork",
            "models/asset_upload.py::approve_artwork"
          ]
        },
        {
          "method": "GET",
          "path": "/v2/asset/download_url",
          "handler": "get_asset_download_url",
          "file": "handlers.py",
          "line": 564,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/v2/asset/final",
          "handler": "post_asset_final_v2",
          "file": "handlers.py",
          "line": 581,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/asset/info",
          "handler": "get_asset_info_by_id",
          "file": "handlers.py",
          "line": 548,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/asset/product/<int:product_id>/ai-generated-audio",
          "handler": "get_content_review_ai_generated_audio",
          "file": "handlers.py",
          "line": 684,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/asset/product/<int:product_id>/match-audio",
          "handler": "get_content_review_match_audio",
          "file": "handlers.py",
          "line": 654,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/asset/product/<product_id>",
          "handler": "get_product_by_id_v2",
          "file": "handlers.py",
          "line": 605,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/v2/asset/product/<product_id>/corrections/apply",
          "handler": "apply_asset_corrections",
          "file": "handlers.py",
          "line": 440,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/v2/asset/status",
          "handler": "post_asset_general_status_v2",
          "file": "handlers.py",
          "line": 509,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/asset/status/<filename>",
          "handler": "get_asset_general_status_v2",
          "file": "handlers.py",
          "line": 469,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/assets-bulk",
          "handler": "get_assets_info_by_many_product_ids",
          "file": "handlers.py",
          "line": 1178,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/assets/<int:product_id>/asset_type/<string:asset_type>",
          "handler": "get_v2_assets_info_by_asset_type",
          "file": "handlers.py",
          "line": 346,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/v2/assets/upload",
          "handler": "create_asset_upload",
          "file": "handlers.py",
          "line": 155,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/assets/upload/<string:filename>",
          "handler": "get_presigned_urls_for_asset_upload",
          "file": "handlers.py",
          "line": 213,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/v2/assets/upload/<string:filename>",
          "handler": "complete_multipart_upload",
          "file": "handlers.py",
          "line": 265,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/v2/image/<product_id>",
          "handler": "remove_product_image_v2",
          "file": "handlers.py",
          "line": 716,
          "status": "unused",
          "dead_functions": [
            "logic/product.py::remove_image_assets_by_product_id"
          ]
        },
        {
          "method": "GET",
          "path": "/v2/image/product/<image_format>/<entity_id>/location",
          "handler": "get_image_location_v2",
          "file": "handlers.py",
          "line": 887,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/v2/product/<product_id>",
          "handler": "remove_product_asset_v2",
          "file": "handlers.py",
          "line": 770,
          "status": "unused",
          "dead_functions": [
            "logic/delete.py::delete_product"
          ]
        },
        {
          "method": "DELETE",
          "path": "/v2/product/<product_id>/corrections",
          "handler": "remove_product_asset_corrections_v2",
          "file": "handlers.py",
          "line": 798,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/v2/track/<track_id>",
          "handler": "remove_track_asset_v2",
          "file": "handlers.py",
          "line": 742,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/validators/product/<int:product_id>/artwork",
          "handler": "validate_product_artwork",
          "file": "handlers.py",
          "line": 1065,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/validators/product/<int:product_id>/audio",
          "handler": "validate_product_audio",
          "file": "handlers.py",
          "line": 1085,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/validators/product/<product_id>/desired-bit-depth/<bit_depth>",
          "handler": "check_for_desired_bit_depth",
          "file": "handlers.py",
          "line": 1276,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/asset_info.py::get_asset_info",
        "logic/asset_upload.py::approve_artwork",
        "logic/delete.py::delete_product",
        "logic/product.py::remove_image_assets_by_product_id",
        "models/asset_final.py::get_asset_final",
        "models/asset_upload.py::approve_artwork"
      ]
    },
    {
      "name": "ows-atlantis-proxy",
      "framework": "flask",
      "repo_url": "",
      "team": "",
      "endpoints": {
        "total": 2,
        "used": {
          "count": 0,
          "percent": 0.0
        },
        "unused": {
          "count": 2,
          "percent": 100.0
        }
      },
      "functions": {
        "total": 0,
        "dead": 0,
        "dead_percent": 0
      },
      "details": [
        {
          "method": "POST",
          "path": "/events",
          "handler": "hello_world_username",
          "file": "handlers.py",
          "line": 28,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 38,
          "status": "unused",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-blacklist-manager",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-blacklist-manager.git",
      "team": "content-review-management",
      "endpoints": {
        "total": 11,
        "used": {
          "count": 10,
          "percent": 90.9
        },
        "unused": {
          "count": 1,
          "percent": 9.1
        }
      },
      "functions": {
        "total": 10,
        "dead": 0,
        "dead_percent": 0.0
      },
      "details": [
        {
          "method": "POST",
          "path": "/blacklist-reason",
          "handler": "create_blacklist_reason",
          "file": "handlers.py",
          "line": 106,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/blacklist-reason/<int:blacklist_reason_id>",
          "handler": "update_blacklist_reason",
          "file": "handlers.py",
          "line": 125,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/blacklist-reasons",
          "handler": "get_blacklist_reasons",
          "file": "handlers.py",
          "line": 56,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/blacklist-word",
          "handler": "create_blacklist_word",
          "file": "handlers.py",
          "line": 160,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/blacklist-word/<int:blacklist_id>",
          "handler": "delete_blacklist_word",
          "file": "handlers.py",
          "line": 148,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/blacklist-word/<int:blacklist_id>",
          "handler": "update_blacklist_word",
          "file": "handlers.py",
          "line": 180,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/blacklist-words",
          "handler": "get_blacklist_words",
          "file": "handlers.py",
          "line": 75,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/blacklist-words/export",
          "handler": "export_blacklist_words",
          "file": "handlers.py",
          "line": 96,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 33,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/validate-text",
          "handler": "validate_text_for_blacklisting",
          "file": "handlers.py",
          "line": 222,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/validate/<int:product_id>",
          "handler": "validate_product_for_blacklisting",
          "file": "handlers.py",
          "line": 203,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-carveouts-python",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-carveouts-python.git",
      "team": "content-delivery-asset-management",
      "endpoints": {
        "total": 12,
        "used": {
          "count": 9,
          "percent": 75.0
        },
        "unused": {
          "count": 3,
          "percent": 25.0
        }
      },
      "functions": {
        "total": 10,
        "dead": 3,
        "dead_percent": 30.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/delivery-restrictions/account/<int:account_id>",
          "handler": "get_account_carveouts",
          "file": "handlers.py",
          "line": 209,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/delivery-restrictions/account/<int:vendor_contract_id>",
          "handler": "save_account_carveouts",
          "file": "handlers.py",
          "line": 280,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/delivery-restrictions/apply-default-restrictions/<int:service_id>",
          "handler": "create_new_store_carveouts",
          "file": "handlers.py",
          "line": 327,
          "status": "unused",
          "dead_functions": [
            "logic/carveouts.py::create_new_service_carveouts",
            "models/service_carveout.py::create_account_new_service_carveouts",
            "models/service_carveout.py::create_product_new_service_carveouts"
          ]
        },
        {
          "method": "GET",
          "path": "/delivery-restrictions/product/<int:product_id>",
          "handler": "get_product_carveouts",
          "file": "handlers.py",
          "line": 143,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/delivery-restrictions/product/<int:product_id>",
          "handler": "save_product_carveouts",
          "file": "handlers.py",
          "line": 253,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/delivery-restrictions/subaccount/<int:subaccount_id>",
          "handler": "get_subaccount_carveouts",
          "file": "handlers.py",
          "line": 179,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/favicon.ico",
          "handler": "favicon",
          "file": "handlers.py",
          "line": 61,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 55,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product_country_carveouts/<int:product_id>",
          "handler": "delete_product_country_carveouts",
          "file": "handlers.py",
          "line": 231,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/release_dms_carveouts/<int:product_id>",
          "handler": "delete_release_dms_carveouts",
          "file": "handlers.py",
          "line": 34,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/release_dms_master_carveouts/<int:product_id>",
          "handler": "delete_release_dms_master_carveouts",
          "file": "handlers.py",
          "line": 94,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendor-contract-store-carveouts-dataloader",
          "handler": "dataload_vendor_contract_store_carveouts",
          "file": "handlers.py",
          "line": 115,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/carveouts.py::create_new_service_carveouts",
        "models/service_carveout.py::create_account_new_service_carveouts",
        "models/service_carveout.py::create_product_new_service_carveouts"
      ]
    },
    {
      "name": "ows-charts",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-charts.git",
      "team": "insights",
      "endpoints": {
        "total": 35,
        "used": {
          "count": 30,
          "percent": 85.7
        },
        "unused": {
          "count": 5,
          "percent": 14.3
        }
      },
      "functions": {
        "total": 41,
        "dead": 4,
        "dead_percent": 9.8
      },
      "details": [
        {
          "method": "GET",
          "path": "/artists/<int:artist_id>/aggregated",
          "handler": "get_artist_aggregated_rankings",
          "file": "handlers.py",
          "line": 199,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/<int:artist_id>/chart-highlights",
          "handler": "get_artist_chart_highlights",
          "file": "handlers.py",
          "line": 333,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/<int:artist_id>/charts",
          "handler": "get_artist_charts",
          "file": "handlers.py",
          "line": 259,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/<int:artist_id>/countries",
          "handler": "get_artist_countries",
          "file": "handlers.py",
          "line": 283,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/<int:artist_id>/current-appearances",
          "handler": "get_artist_current_appearances",
          "file": "handlers.py",
          "line": 307,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/<int:artist_id>/songs",
          "handler": "get_artist_charted_songs",
          "file": "handlers.py",
          "line": 233,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/chart-groups/chart-ids",
          "handler": "post_chart_groups_chart_ids_dataloader",
          "file": "handlers.py",
          "line": 602,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/chart-rankings/aggregated-values-dataloaded/",
          "handler": "get_chart_rankings_aggregated_values_dataloaded",
          "file": "handlers.py",
          "line": 459,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/chart-rankings/aggregated-values-on-date-dataloaded/",
          "handler": "get_chart_rankings_aggregated_values_on_date_dataloaded",
          "file": "handlers.py",
          "line": 471,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/chart-rankings/dataloaded/",
          "handler": "get_chart_rankings_dataloaded",
          "file": "handlers.py",
          "line": 448,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/chart/digest/tracks/",
          "handler": "get_chart_digest_tracks",
          "file": "handlers.py",
          "line": 392,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/charts/",
          "handler": "get_charts",
          "file": "handlers.py",
          "line": 90,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/charts/<chart_id>/",
          "handler": "get_chart",
          "file": "handlers.py",
          "line": 101,
          "status": "unused",
          "dead_functions": [
            "logic/chart.py::get_chart"
          ]
        },
        {
          "method": "GET",
          "path": "/charts/<chart_id>/dates/",
          "handler": "get_chart_available_dates",
          "file": "handlers.py",
          "line": 113,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/charts/<chart_id>/dates/<chart_date>",
          "handler": "get_chart_rankings",
          "file": "handlers.py",
          "line": 125,
          "status": "unused",
          "dead_functions": [
            "logic/chart.py::get_chart_rankings"
          ]
        },
        {
          "method": "GET",
          "path": "/charts/<chart_id>/dates/<chart_date>/in_catalog",
          "handler": "get_chart_rankings_in_catalog",
          "file": "handlers.py",
          "line": 141,
          "status": "unused",
          "dead_functions": [
            "logic/chart.py::get_chart_rankings_in_catalog"
          ]
        },
        {
          "method": "GET",
          "path": "/charts/<chart_id>/product-history/<public_product_id>",
          "handler": "get_product_rankings",
          "file": "handlers.py",
          "line": 174,
          "status": "unused",
          "dead_functions": [
            "logic/chart.py::get_chart_product_history"
          ]
        },
        {
          "method": "GET",
          "path": "/charts/<chart_id>/song-history/<public_sound_recording_id>",
          "handler": "get_song_rankings",
          "file": "handlers.py",
          "line": 161,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/charts/by-definition/",
          "handler": "get_charts_by_definition",
          "file": "handlers.py",
          "line": 407,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/charts/by-platforms/",
          "handler": "get_charts_by_platforms",
          "file": "handlers.py",
          "line": 368,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/charts/chart-date-entry-summary/",
          "handler": "get_chart_date_entries_summary_for_isrcs",
          "file": "handlers.py",
          "line": 528,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/charts/chart-date-entry/",
          "handler": "get_chart_date_entry_for_isrcs",
          "file": "handlers.py",
          "line": 519,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/charts/data-for-chart-ids/",
          "handler": "get_chart_data_for_chart_ids",
          "file": "handlers.py",
          "line": 557,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/charts/dates-for-chart-ids/",
          "handler": "get_chart_dates_for_chart_ids",
          "file": "handlers.py",
          "line": 479,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/charts/gsrs-for-charts-date/",
          "handler": "get_global_sound_recordings_for_charts_date",
          "file": "handlers.py",
          "line": 504,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/charts/metadata/",
          "handler": "get_chart_metadata_for_chart_ids",
          "file": "handlers.py",
          "line": 487,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/charts/placement-dataloader-private",
          "handler": "chart_placement_private_dataloader",
          "file": "handlers.py",
          "line": 378,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/charts/prime",
          "handler": "prime_charts_cache",
          "file": "handlers.py",
          "line": 497,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/charts/rankings-for-chart-ids/",
          "handler": "get_chart_rankings_for_chart_ids",
          "file": "handlers.py",
          "line": 414,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 66,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/new-music-friday/<date>/entries/",
          "handler": "get_new_music_friday_date_entries",
          "file": "new_music_friday_handlers.py",
          "line": 28,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/new-music-friday/<date>/markets/",
          "handler": "get_new_music_friday_date_markets",
          "file": "new_music_friday_handlers.py",
          "line": 43,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/new-music-friday/dates",
          "handler": "get_new_music_friday_dates",
          "file": "new_music_friday_handlers.py",
          "line": 53,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/public-sound-recordings/<public_sound_recording_id>",
          "handler": "get_track_aggregated_rankings",
          "file": "handlers.py",
          "line": 187,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/track/charts/",
          "handler": "get_track_charts",
          "file": "handlers.py",
          "line": 350,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/chart.py::get_chart",
        "logic/chart.py::get_chart_product_history",
        "logic/chart.py::get_chart_rankings",
        "logic/chart.py::get_chart_rankings_in_catalog"
      ]
    },
    {
      "name": "ows-collaborator",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-collaborator.git",
      "team": "collaborators",
      "endpoints": {
        "total": 70,
        "used": {
          "count": 59,
          "percent": 84.3
        },
        "unused": {
          "count": 11,
          "percent": 15.7
        }
      },
      "functions": {
        "total": 76,
        "dead": 20,
        "dead_percent": 26.3
      },
      "details": [
        {
          "method": "GET",
          "path": "/abacus-statement-period/<int:abacus_statement_period_id>/direct-payment-balances",
          "handler": "get_direct_payment_balances_for_abacus_statement_period",
          "file": "abacus_statement_period.py",
          "line": 47,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/abacus-statement-period/<int:abacus_statement_period_id>/dp-payments",
          "handler": "patch_dp_payments_for_abacus_statement_period",
          "file": "abacus_statement_period.py",
          "line": 91,
          "status": "unused",
          "dead_functions": [
            "logic/abacus_statement_period.py::approve_dp_payments",
            "models/rds/dp_payment_persister/DpPaymentPersister.py::approve_by_abacus_statement_period_id"
          ]
        },
        {
          "method": "PUT",
          "path": "/abacus-statement-period/<int:abacus_statement_period_id>/dp-payments",
          "handler": "put_dp_payments_for_abacus_statement_period",
          "file": "abacus_statement_period.py",
          "line": 62,
          "status": "unused",
          "dead_functions": [
            "logic/abacus_statement_period.py::replace_dp_payments",
            "models/rds/dp_payment_persister/DpPaymentPersister.py::replace_by_abacus_statement_period_id"
          ]
        },
        {
          "method": "POST",
          "path": "/abacus-statement-period/dataloader",
          "handler": "abacus_statement_period_dataloader",
          "file": "abacus_statement_period.py",
          "line": 29,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/collaborators",
          "handler": "get_collaborators",
          "file": "collaborator.py",
          "line": 41,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/collaborators",
          "handler": "create_collaborator",
          "file": "collaborator.py",
          "line": 185,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/collaborators/<int:collaborator_id>",
          "handler": "get_collaborator",
          "file": "collaborator.py",
          "line": 85,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/collaborators/<int:collaborator_id>",
          "handler": "update_collaborator",
          "file": "collaborator.py",
          "line": 272,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/collaborators/<int:collaborator_id>/payments",
          "handler": "get_collaborator_payments",
          "file": "collaborator.py",
          "line": 367,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/collaborators/<int:collaborator_id>/sound_recordings",
          "handler": "get_collaborator_sound_recordings",
          "file": "collaborator.py",
          "line": 308,
          "status": "unused",
          "dead_functions": [
            "logic/collaborator.py::get_sound_recordings",
            "models/rds/collaborator_persister/CollaboratorPersister.py::get_sound_recording_for_collaborator"
          ]
        },
        {
          "method": "GET",
          "path": "/collaborators/<int:collaborator_id>/tracks",
          "handler": "get_collaborator_tracks",
          "file": "collaborator.py",
          "line": 326,
          "status": "unused",
          "dead_functions": [
            "logic/collaborator.py::get_tracks",
            "models/rds/collaborator_persister/CollaboratorPersister.py::get_tracks_for_collaborator"
          ]
        },
        {
          "method": "GET",
          "path": "/collaborators/<int:collaborator_id>/transactions",
          "handler": "get_transactions",
          "file": "transaction.py",
          "line": 67,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/collaborators/balances-dataloader",
          "handler": "get_collaborator_balances_dataloader",
          "file": "collaborator.py",
          "line": 164,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/collaborators/dataloader",
          "handler": "get_collaborators_dataloader",
          "file": "collaborator.py",
          "line": 106,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/collaborators/latest-reports-dataloader",
          "handler": "get_collaborator_latest_reports_dataloader",
          "file": "collaborator.py",
          "line": 345,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "base.py",
          "line": 17,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payments",
          "handler": "get_payments",
          "file": "payment.py",
          "line": 15,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/products",
          "handler": "get_products",
          "file": "product.py",
          "line": 16,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/products/counts-dataloader",
          "handler": "product_counts_dataloader",
          "file": "product.py",
          "line": 88,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/recipient/<int:recipient_id>",
          "handler": "get_recipient",
          "file": "recipient.py",
          "line": 17,
          "status": "unused",
          "dead_functions": [
            "logic/recipient.py::get_by_id",
            "models/rds/recipient_persister/RecipientPersister.py::get_recipient"
          ]
        },
        {
          "method": "POST",
          "path": "/recipient/dataloader",
          "handler": "get_recipients_dataloader",
          "file": "recipient.py",
          "line": 33,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/report-run-participations",
          "handler": "get_report_run_participations",
          "file": "report_run.py",
          "line": 113,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/report-runs/auto-report-run",
          "handler": "trigger_auto_report_run",
          "file": "report_run.py",
          "line": 84,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/report-runs/dataloader",
          "handler": "get_report_runs_dataloader",
          "file": "report_run.py",
          "line": 37,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reports",
          "handler": "get_reports",
          "file": "report.py",
          "line": 52,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/reports",
          "handler": "trigger_report_generation",
          "file": "report.py",
          "line": 134,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reports/<int:report_id>/download",
          "handler": "get_download_for_report",
          "file": "report.py",
          "line": 202,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/reports/bulk-delete",
          "handler": "delete_bulk_report",
          "file": "report.py",
          "line": 170,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reports/contract-subtotal-aggregations",
          "handler": "get_report_contract_subtotal_aggregations",
          "file": "report.py",
          "line": 290,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/reports/contract-subtotals-dataloader",
          "handler": "get_report_contract_subtotals_dataloader",
          "file": "report.py",
          "line": 262,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/reports/dataloader",
          "handler": "get_reports_dataloader",
          "file": "report.py",
          "line": 94,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/reports/overlapping-reports-dataloader",
          "handler": "get_reports_with_overlapping_period",
          "file": "report.py",
          "line": 224,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/splits/<string:split_type>/<string:identifier>",
          "handler": "get_splits",
          "file": "split.py",
          "line": 19,
          "status": "unused",
          "dead_functions": [
            "logic/split.py::check_can_access_split_data",
            "logic/split.py::get_for_identifier",
            "models/ows/ows_product.py::get_product",
            "models/ows/ows_track.py::get_track"
          ]
        },
        {
          "method": "POST",
          "path": "/splits/dataloader",
          "handler": "get_splits_dataloader",
          "file": "split.py",
          "line": 40,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/splits/replace",
          "handler": "replace_splits",
          "file": "split.py",
          "line": 122,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-period-participations",
          "handler": "get_statement_period_participations",
          "file": "statement_period.py",
          "line": 189,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-period/<int:statement_period_id>/transactions",
          "handler": "get_transactions_for_statement_period",
          "file": "statement_period.py",
          "line": 131,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/statement-period/bulk-close",
          "handler": "bulk_close_statement_periods",
          "file": "statement_period.py",
          "line": 115,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/statement-period/close",
          "handler": "close_statement_period",
          "file": "statement_period.py",
          "line": 76,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/statement-period/dataloader",
          "handler": "statement_periods_dataloader",
          "file": "statement_period.py",
          "line": 53,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/statement-period/totals-dataloader",
          "handler": "statement_period_vendor_totals_dataloader",
          "file": "statement_period.py",
          "line": 156,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-periods",
          "handler": "get_statement_periods",
          "file": "statement_period.py",
          "line": 18,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/terms-and-conditions",
          "handler": "get_terms_and_conditions",
          "file": "terms_and_conditions.py",
          "line": 19,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/terms-and-conditions/agreement",
          "handler": "agree_terms_and_conditions",
          "file": "terms_and_conditions.py",
          "line": 41,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/transactions",
          "handler": "create_transactions_in_bulk",
          "file": "transaction.py",
          "line": 34,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/transactions/aggregations",
          "handler": "transactions_aggregations",
          "file": "transaction.py",
          "line": 205,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/transactions/bulk-delete",
          "handler": "delete_transactions",
          "file": "transaction.py",
          "line": 100,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/transactions/dataloader",
          "handler": "transactions_dataloader",
          "file": "transaction.py",
          "line": 185,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/transactions/royalties",
          "handler": "add_to_royalties_in_bulk",
          "file": "transaction.py",
          "line": 116,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/transferwise/account-requirements/<source>/<target>",
          "handler": "refresh_account_requirements",
          "file": "transferwise.py",
          "line": 42,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/transferwise/account-requirements/<string:source>/<string:target>",
          "handler": "get_account_requirements",
          "file": "transferwise.py",
          "line": 69,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/transferwise/application-webhooks-subscription",
          "handler": "subscribe_application_to_webhooks",
          "file": "transferwise.py",
          "line": 305,
          "status": "unused",
          "dead_functions": [
            "logic/transferwise.py::subscribe_application_to_event"
          ]
        },
        {
          "method": "GET",
          "path": "/transferwise/authorization-url",
          "handler": "get_authorization_redirect_url",
          "file": "transferwise.py",
          "line": 149,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/transferwise/batch-payment",
          "handler": "create_batch_payment",
          "file": "transferwise.py",
          "line": 339,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/transferwise/batch/<int:batch_id>",
          "handler": "get_batch",
          "file": "transferwise.py",
          "line": 409,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/transferwise/batch/<int:batch_id>/cancel",
          "handler": "cancel_batch_payment",
          "file": "transferwise.py",
          "line": 459,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/transferwise/batch/<int:batch_id>/transactions",
          "handler": "get_transactions_for_batch",
          "file": "transferwise.py",
          "line": 441,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/transferwise/batches",
          "handler": "get_batches",
          "file": "transferwise.py",
          "line": 425,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/transferwise/collaborator/<int:collaborator_id>/recipient",
          "handler": "create_recipient",
          "file": "transferwise.py",
          "line": 166,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/transferwise/collaborator/<int:collaborator_id>/recipient/<int:recipient_id>",
          "handler": "delete_recipient",
          "file": "transferwise.py",
          "line": 199,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/transferwise/field-validation/<string:validator>",
          "handler": "get_field_validation",
          "file": "transferwise.py",
          "line": 85,
          "status": "unused",
          "dead_functions": [
            "logic/transferwise.py::get_field_validation"
          ]
        },
        {
          "method": "GET",
          "path": "/transferwise/profile",
          "handler": "get_transferwise_profile_for_vendor",
          "file": "transferwise.py",
          "line": 132,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/transferwise/profile",
          "handler": "create_transferwise_profile",
          "file": "transferwise.py",
          "line": 109,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/transferwise/profile/<string:profile_id>/batch-group/<string:batch_group_id>",
          "handler": "get_batch_group",
          "file": "transferwise.py",
          "line": 361,
          "status": "unused",
          "dead_functions": [
            "logic/transferwise.py::check_can_access_batch_group",
            "logic/transferwise.py::get_batch_group",
            "models/rds/transferwise_batch_persister/TransferwiseBatchPersister.py::get_by_batch_uuid"
          ]
        },
        {
          "method": "POST",
          "path": "/transferwise/quote",
          "handler": "create_quote",
          "file": "transferwise.py",
          "line": 320,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/transferwise/simulate/transfers/<int:transfer_id>/<string:transfer_status>",
          "handler": "simulate_transfer_processing",
          "file": "transferwise.py",
          "line": 385,
          "status": "unused",
          "dead_functions": [
            "logic/transferwise.py::simulate_transfer_processing"
          ]
        },
        {
          "method": "POST",
          "path": "/transferwise/transfer-requirements",
          "handler": "get_transfer_requirements",
          "file": "transferwise.py",
          "line": 481,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/transferwise/webhook",
          "handler": "webhook",
          "file": "transferwise.py",
          "line": 242,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor-agreement",
          "handler": "get_vendor_agreement",
          "file": "vendor_agreement.py",
          "line": 33,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendor-agreement",
          "handler": "create_vendor_agreement",
          "file": "vendor_agreement.py",
          "line": 15,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/abacus_statement_period.py::approve_dp_payments",
        "logic/abacus_statement_period.py::replace_dp_payments",
        "logic/collaborator.py::get_sound_recordings",
        "logic/collaborator.py::get_tracks",
        "logic/recipient.py::get_by_id",
        "logic/split.py::check_can_access_split_data",
        "logic/split.py::get_for_identifier",
        "logic/transferwise.py::check_can_access_batch_group",
        "logic/transferwise.py::get_batch_group",
        "logic/transferwise.py::get_field_validation",
        "logic/transferwise.py::simulate_transfer_processing",
        "logic/transferwise.py::subscribe_application_to_event",
        "models/ows/ows_product.py::get_product",
        "models/ows/ows_track.py::get_track",
        "models/rds/collaborator_persister/CollaboratorPersister.py::get_sound_recording_for_collaborator",
        "models/rds/collaborator_persister/CollaboratorPersister.py::get_tracks_for_collaborator",
        "models/rds/dp_payment_persister/DpPaymentPersister.py::approve_by_abacus_statement_period_id",
        "models/rds/dp_payment_persister/DpPaymentPersister.py::replace_by_abacus_statement_period_id",
        "models/rds/recipient_persister/RecipientPersister.py::get_recipient",
        "models/rds/transferwise_batch_persister/TransferwiseBatchPersister.py::get_by_batch_uuid"
      ]
    },
    {
      "name": "ows-conflict-manager",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-conflict-manager.git",
      "team": "collections-fingerprinting",
      "endpoints": {
        "total": 7,
        "used": {
          "count": 6,
          "percent": 85.7
        },
        "unused": {
          "count": 1,
          "percent": 14.3
        }
      },
      "functions": {
        "total": 6,
        "dead": 0,
        "dead_percent": 0.0
      },
      "details": [
        {
          "method": "POST",
          "path": "/action",
          "handler": "create_actions",
          "file": "handlers.py",
          "line": 136,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/action/bulk",
          "handler": "bulk_create_actions",
          "file": "handlers.py",
          "line": 155,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/conflicts/actioned",
          "handler": "get_actioned_conflicts",
          "file": "handlers.py",
          "line": 103,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/conflicts/new",
          "handler": "get_new_conflicts",
          "file": "handlers.py",
          "line": 85,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/conflicts/resolved",
          "handler": "get_resolved_conflicts",
          "file": "handlers.py",
          "line": 120,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/conflicts/status/bulk",
          "handler": "bulk_update_conflict_status",
          "file": "handlers.py",
          "line": 173,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 37,
          "status": "unused",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-contracts",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-contracts.git",
      "team": "abacus",
      "endpoints": {
        "total": 32,
        "used": {
          "count": 26,
          "percent": 81.2
        },
        "unused": {
          "count": 6,
          "percent": 18.8
        }
      },
      "functions": {
        "total": 31,
        "dead": 10,
        "dead_percent": 32.3
      },
      "details": [
        {
          "method": "HEAD",
          "path": "/<account_type>/<account_id>/mechadmin",
          "handler": "get_account_mechadmin",
          "file": "handlers.py",
          "line": 78,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/<account_type>/<account_id>/mechadmin_for_account",
          "handler": "get_account_mech_admin",
          "file": "handlers.py",
          "line": 283,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/booked/subaccount/<subaccount_id>",
          "handler": "get_subaccount_booked_contracts",
          "file": "handlers.py",
          "line": 210,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/booked/vendor/<vendor_id>",
          "handler": "get_vendor_booked_contracts",
          "file": "handlers.py",
          "line": 184,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/booked/vendor/<vendor_id>/first-period/<first_period_id>/last-period/<last_period_id>",
          "handler": "get_vendor_booked_contracts_by_period_range",
          "file": "handlers.py",
          "line": 727,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/<contract_id>",
          "handler": "get_vendor_contract",
          "file": "handlers.py",
          "line": 153,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/<contract_id>/royalties",
          "handler": "get_vendor_contract_royalties",
          "file": "handlers.py",
          "line": 168,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/<contract_id>/service-type",
          "handler": "get_contract_service_type",
          "file": "handlers.py",
          "line": 329,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/contracts/product_split/<upc>",
          "handler": "delete_product_split",
          "file": "handlers.py",
          "line": 416,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/product_split/<vendor_id>",
          "handler": "get_product_split",
          "file": "handlers.py",
          "line": 351,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/product_split/<vendor_id>",
          "handler": "set_product_split",
          "file": "handlers.py",
          "line": 383,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contracts/product_split/<vendor_id>",
          "handler": "set_product_split",
          "file": "handlers.py",
          "line": 383,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/contracts/product_territory_split/<upc>",
          "handler": "delete_product_territory_split",
          "file": "handlers.py",
          "line": 606,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/product_territory_split/<vendor_id>",
          "handler": "get_product_territory_split",
          "file": "handlers.py",
          "line": 576,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/product_territory_split/<vendor_id>",
          "handler": "set_product_territory_split",
          "file": "handlers.py",
          "line": 645,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contracts/product_territory_split/<vendor_id>",
          "handler": "set_product_territory_split",
          "file": "handlers.py",
          "line": 645,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/service-types",
          "handler": "get_service_types",
          "file": "handlers.py",
          "line": 307,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/contracts/service_type/<vendor_id>",
          "handler": "update_vendor_contract_service_type_id",
          "file": "handlers.py",
          "line": 816,
          "status": "unused",
          "dead_functions": [
            "logic/vendor_contracts.py::update_service_type_by_vendor_id",
            "models/ows_account.py::get_vendor_uuid_by_vendor_id",
            "models/vendor_contract.py::update_vendor_contract_service_type_id"
          ]
        },
        {
          "method": "DELETE",
          "path": "/contracts/track_split/<vendor_id>",
          "handler": "delete_track_split",
          "file": "handlers.py",
          "line": 537,
          "status": "unused",
          "dead_functions": [
            "logic/vendor_contracts.py::delete_track_split",
            "models/track_split.py::delete_track_split"
          ]
        },
        {
          "method": "GET",
          "path": "/contracts/track_split/<vendor_id>",
          "handler": "get_track_split",
          "file": "handlers.py",
          "line": 454,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/track_split/<vendor_id>",
          "handler": "set_track_split",
          "file": "handlers.py",
          "line": 485,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contracts/track_split/<vendor_id>",
          "handler": "set_track_split",
          "file": "handlers.py",
          "line": 485,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/vendor-currency",
          "handler": "get_vendor_currency",
          "file": "handlers.py",
          "line": 704,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "hello",
          "file": "handlers.py",
          "line": 35,
          "status": "unused",
          "dead_functions": [
            "logic/healthcheck.py::status"
          ]
        },
        {
          "method": "GET",
          "path": "/hello_db/",
          "handler": "hello_db",
          "file": "handlers.py",
          "line": 46,
          "status": "unused",
          "dead_functions": [
            "logic/healthcheck.py::db_status",
            "models/healthcheck.py::check_db"
          ]
        },
        {
          "method": "HEAD",
          "path": "/mechadmin",
          "handler": "get_mechadmin",
          "file": "handlers.py",
          "line": 57,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/mechadmin_for_account",
          "handler": "get_account_mech_admin_for_authorized",
          "file": "handlers.py",
          "line": 258,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/subaccount/<subaccount_id>/royalty_collection",
          "handler": "get_subaccount_royalty_collection",
          "file": "handlers.py",
          "line": 756,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/subaccount/royalty_collection/<subaccount_royalty_collection_id>/royalty_collection_territories",
          "handler": "get_subaccount_royalty_collection_territories",
          "file": "handlers.py",
          "line": 784,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/subaccount/subaccount_royalty_collection/<subaccount_royalty_collection_id>",
          "handler": "get_royalty_collection",
          "file": "handlers.py",
          "line": 854,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/<vendor_id>/active",
          "handler": "get_active_vendor_contract",
          "file": "handlers.py",
          "line": 131,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/<vendor_id>/advances",
          "handler": "get_vendor_advances",
          "file": "handlers.py",
          "line": 101,
          "status": "unused",
          "dead_functions": [
            "logic/advances.py::get_advances",
            "models/vendor_advance.py::get_advances"
          ]
        }
      ],
      "dead_functions": [
        "logic/advances.py::get_advances",
        "logic/healthcheck.py::db_status",
        "logic/healthcheck.py::status",
        "logic/vendor_contracts.py::delete_track_split",
        "logic/vendor_contracts.py::update_service_type_by_vendor_id",
        "models/healthcheck.py::check_db",
        "models/ows_account.py::get_vendor_uuid_by_vendor_id",
        "models/track_split.py::delete_track_split",
        "models/vendor_advance.py::get_advances",
        "models/vendor_contract.py::update_vendor_contract_service_type_id"
      ]
    },
    {
      "name": "ows-data-export",
      "framework": "fastapi",
      "repo_url": "",
      "team": "",
      "endpoints": {
        "total": 4,
        "used": {
          "count": 0,
          "percent": 0.0
        },
        "unused": {
          "count": 4,
          "percent": 100.0
        }
      },
      "functions": {
        "total": 0,
        "dead": 0,
        "dead_percent": 0
      },
      "details": [
        {
          "method": "GET",
          "path": "",
          "handler": "health_check",
          "file": "dataexport.py",
          "line": 31,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/job",
          "handler": "all_jobs",
          "file": "dataexport.py",
          "line": 41,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/job",
          "handler": "new_job",
          "file": "dataexport.py",
          "line": 48,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/test/{name}",
          "handler": "test_endpoint",
          "file": "dataexport.py",
          "line": 36,
          "status": "unused",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-ddex-lambda-proxy",
      "framework": "flask",
      "repo_url": "",
      "team": "",
      "endpoints": {
        "total": 2,
        "used": {
          "count": 0,
          "percent": 0.0
        },
        "unused": {
          "count": 2,
          "percent": 100.0
        }
      },
      "functions": {
        "total": 1,
        "dead": 1,
        "dead_percent": 100.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/ddex-rdx/upc/<upc>",
          "handler": "get_rdx_ddex",
          "file": "handlers.py",
          "line": 52,
          "status": "unused",
          "dead_functions": [
            "models/ows_product.py::get_product_for_upc"
          ]
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 29,
          "status": "unused",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "models/ows_product.py::get_product_for_upc"
      ]
    },
    {
      "name": "ows-delivery-history",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-delivery-history.git",
      "team": "content-delivery-asset-management",
      "endpoints": {
        "total": 6,
        "used": {
          "count": 4,
          "percent": 66.7
        },
        "unused": {
          "count": 2,
          "percent": 33.3
        }
      },
      "functions": {
        "total": 5,
        "dead": 2,
        "dead_percent": 40.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/delivered_stores_count",
          "handler": "get_delivered_stores_count",
          "file": "handlers.py",
          "line": 66,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/delivered_stores_details/<upc>",
          "handler": "get_delivered_stores_details",
          "file": "handlers.py",
          "line": 83,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/delivery_history",
          "handler": "import_delivery_history",
          "file": "handlers.py",
          "line": 148,
          "status": "unused",
          "dead_functions": [
            "logic/delivery_history.py::import_delivery_history",
            "models/delivery_history.py::insert_delivery_history"
          ]
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 31,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/masters",
          "handler": "post_delivery_history",
          "file": "handlers.py",
          "line": 106,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/masters/<partner_id>",
          "handler": "get_delivery_history",
          "file": "handlers.py",
          "line": 38,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/delivery_history.py::import_delivery_history",
        "models/delivery_history.py::insert_delivery_history"
      ]
    },
    {
      "name": "ows-delivery-metadata",
      "framework": "fastapi",
      "repo_url": "https://github.com/theorchard/ows-delivery-metadata.git",
      "team": "content-delivery-asset-management",
      "endpoints": {
        "total": 2,
        "used": {
          "count": 1,
          "percent": 50.0
        },
        "unused": {
          "count": 1,
          "percent": 50.0
        }
      },
      "functions": {
        "total": 1,
        "dead": 0,
        "dead_percent": 0.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "hello",
          "file": "infra.py",
          "line": 17,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/products/{upc}/stores/{store_id}/delivery_metadata",
          "handler": "delivery_metadata",
          "file": "delivery_metadata.py",
          "line": 35,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-dmp",
      "framework": "fastapi",
      "repo_url": "https://github.com/theorchard/ows-dmp.git",
      "team": "fansifter",
      "endpoints": {
        "total": 132,
        "used": {
          "count": 118,
          "percent": 89.4
        },
        "unused": {
          "count": 14,
          "percent": 10.6
        }
      },
      "functions": {
        "total": 0,
        "dead": 0,
        "dead_percent": 0
      },
      "details": [
        {
          "method": "GET",
          "path": "/ad-reporting/ad-sets",
          "handler": "get_ad_reporting_ad_sets",
          "file": "router.py",
          "line": 345,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/ad-sets-names",
          "handler": "get_ad_reporting_ad_sets_names",
          "file": "router.py",
          "line": 311,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/ad-sets/{adSetId}",
          "handler": "get_ad_reporting_ad_set",
          "file": "router.py",
          "line": 385,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/ads",
          "handler": "get_ad_reporting_ads",
          "file": "router.py",
          "line": 401,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/ads/{adId}",
          "handler": "get_ad_reporting_ad",
          "file": "router.py",
          "line": 442,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/campaigns",
          "handler": "get_ad_reporting_campaigns",
          "file": "router.py",
          "line": 156,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/campaigns-artists",
          "handler": "get_ad_reporting_campaigns_artists",
          "file": "router.py",
          "line": 89,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/campaigns-names",
          "handler": "get_ad_reporting_campaigns_names",
          "file": "router.py",
          "line": 123,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/campaigns-objectives",
          "handler": "get_ad_reporting_campaigns_objectives",
          "file": "router.py",
          "line": 106,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/campaigns/{campaignId}",
          "handler": "get_ad_reporting_campaign",
          "file": "router.py",
          "line": 196,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/ad-reporting/campaigns/{campaignId}/assign-artist",
          "handler": "assign_artist_to_ad_reporting_campaign",
          "file": "router.py",
          "line": 218,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/ad-reporting/campaigns/{campaignId}/assign-artists",
          "handler": "assign_artists_to_ad_reporting_campaign",
          "file": "router.py",
          "line": 242,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/campaigns/{campaignId}/reports",
          "handler": "get_ad_reporting_campaign_reports",
          "file": "router.py",
          "line": 266,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ad-reporting/campaigns/{campaignId}/reports",
          "handler": "add_ad_reporting_campaign_to_reports",
          "file": "router.py",
          "line": 290,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/reports",
          "handler": "get_ad_reporting_reports",
          "file": "router.py",
          "line": 461,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ad-reporting/reports",
          "handler": "create_ad_reporting_report",
          "file": "router.py",
          "line": 499,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/reports-artists",
          "handler": "get_ad_reporting_reports_artists",
          "file": "router.py",
          "line": 856,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/ad-reporting/reports/{reportId}",
          "handler": "delete_ad_reporting_report",
          "file": "router.py",
          "line": 572,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/reports/{reportId}",
          "handler": "get_ad_reporting_report_overview",
          "file": "router.py",
          "line": 526,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/ad-reporting/reports/{reportId}",
          "handler": "edit_ad_reporting_report",
          "file": "router.py",
          "line": 549,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/reports/{reportId}/ad-sets",
          "handler": "get_ad_reporting_report_ad_sets",
          "file": "router.py",
          "line": 685,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/reports/{reportId}/ad-sets/{adSetId}",
          "handler": "get_ad_reporting_report_ad_set",
          "file": "router.py",
          "line": 729,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/reports/{reportId}/ads",
          "handler": "get_ad_reporting_report_ads",
          "file": "router.py",
          "line": 753,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/reports/{reportId}/ads/grouped",
          "handler": "get_ad_reporting_report_ads_grouped",
          "file": "router.py",
          "line": 793,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/reports/{reportId}/ads/{adId}",
          "handler": "get_ad_reporting_report_ad",
          "file": "router.py",
          "line": 836,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/reports/{reportId}/campaigns",
          "handler": "get_ad_reporting_report_campaigns",
          "file": "router.py",
          "line": 594,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ad-reporting/reports/{reportId}/campaigns",
          "handler": "add_ad_reporting_campaigns_to_a_report",
          "file": "router.py",
          "line": 879,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/ad-reporting/reports/{reportId}/campaigns/{campaignId}",
          "handler": "remove_ad_reporting_report_campaign",
          "file": "router.py",
          "line": 661,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ad-reporting/reports/{reportId}/campaigns/{campaignId}",
          "handler": "get_ad_reporting_report_campaign",
          "file": "router.py",
          "line": 636,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists",
          "handler": "get_artists",
          "file": "router.py",
          "line": 61,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/participants",
          "handler": "get_participants",
          "file": "router.py",
          "line": 494,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/accounts",
          "handler": "get_artist_accounts",
          "file": "router.py",
          "line": 94,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/accounts-with-fandata",
          "handler": "get_artist_accounts_with_fandata",
          "file": "router.py",
          "line": 113,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/accounts/all",
          "handler": "get_artist_accounts_all",
          "file": "router.py",
          "line": 133,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/age-ranges",
          "handler": "get_artist_fans_share_by_age_range",
          "file": "router.py",
          "line": 390,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/explain-segments",
          "handler": "get_artist_segments_explained",
          "file": "router.py",
          "line": 468,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/fans-also-listening",
          "handler": "get_artist_fans_also_listening",
          "file": "router.py",
          "line": 416,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/fans-count",
          "handler": "get_artist_fans_count",
          "file": "router.py",
          "line": 174,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/genders",
          "handler": "get_artist_fans_share_by_gender",
          "file": "router.py",
          "line": 310,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/heavy-rotation",
          "handler": "get_artist_fans_share_by_heavy_rotation",
          "file": "router.py",
          "line": 336,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/locations",
          "handler": "get_artist_fans_share_by_location",
          "file": "router.py",
          "line": 285,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/main-rep-accounts",
          "handler": "get_artist_main_rep_accounts",
          "file": "router.py",
          "line": 150,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/max-spend",
          "handler": "get_artist_max_spend",
          "file": "router.py",
          "line": 362,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/segments",
          "handler": "get_artist_fans_count_by_segment",
          "file": "router.py",
          "line": 200,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/segments-activities",
          "handler": "get_artist_segment_activity_breakdown",
          "file": "router.py",
          "line": 442,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/summary",
          "handler": "get_artist_fans_count_by_type_summary",
          "file": "router.py",
          "line": 256,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/summary-by-campaign",
          "handler": "get_artist_fans_count_by_campaign_summary",
          "file": "router.py",
          "line": 528,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artists/{globalParticipantId}/timeseries",
          "handler": "get_artist_fans_count_by_type_timeseries",
          "file": "router.py",
          "line": 226,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/audience-exports/{exportId}",
          "handler": "update_audience_export",
          "file": "router.py",
          "line": 373,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/audience-shares/{shareId}",
          "handler": "update_audience_share",
          "file": "router.py",
          "line": 396,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/audience-size",
          "handler": "get_audience_size",
          "file": "router.py",
          "line": 328,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/audiences",
          "handler": "get_audiences",
          "file": "router.py",
          "line": 67,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/audiences",
          "handler": "create_audience",
          "file": "router.py",
          "line": 114,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/audiences-artists",
          "handler": "get_audiences_artists",
          "file": "router.py",
          "line": 353,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/audiences/{audienceId}",
          "handler": "get_audience",
          "file": "router.py",
          "line": 141,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/audiences/{audienceId}",
          "handler": "update_audience",
          "file": "router.py",
          "line": 166,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/audiences/{audienceId}/ad-accounts",
          "handler": "get_audience_ad_accounts",
          "file": "router.py",
          "line": 307,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/audiences/{audienceId}/archive",
          "handler": "archive_audience",
          "file": "router.py",
          "line": 231,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/audiences/{audienceId}/exports",
          "handler": "export_audience",
          "file": "router.py",
          "line": 254,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/audiences/{audienceId}/exports/{exportId}",
          "handler": "get_audience_export",
          "file": "router.py",
          "line": 280,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/audiences/{audienceId}/fans/upsert",
          "handler": "upsert_audience_fans",
          "file": "router.py",
          "line": 215,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/audiences/{audienceId}/refresh",
          "handler": "refresh_audience",
          "file": "router.py",
          "line": 192,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/crm-campaigns",
          "handler": "get_crm_campaigns",
          "file": "router.py",
          "line": 20,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/devtools/cache/clear",
          "handler": "clear_cache",
          "file": "router.py",
          "line": 16,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/google/ad-accounts",
          "handler": "get_google_ad_accounts",
          "file": "router.py",
          "line": 315,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/google/ad-accounts/{adAccountId}",
          "handler": "delete_google_ad_account",
          "file": "router.py",
          "line": 331,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/google/ad-reporting/connection",
          "handler": "get_google_ad_reporting_connection",
          "file": "router.py",
          "line": 275,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/google/ad-reporting/connection",
          "handler": "connect_google_ad_reporting",
          "file": "router.py",
          "line": 251,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/google/ad-reporting/connection/refresh",
          "handler": "refresh_google_ad_reporting_connection",
          "file": "router.py",
          "line": 299,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/google/ad-reporting/handle-dbt-sync",
          "handler": "handle_ad_reporting_dbt_sync",
          "file": "router.py",
          "line": 375,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/google/audience-shares/{shareId}",
          "handler": "get_google_audience_share",
          "file": "router.py",
          "line": 218,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/google/audiences",
          "handler": "share_google_audience",
          "file": "router.py",
          "line": 192,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/google/audiences/{googleAudienceId}/share-status",
          "handler": "get_google_audience_share_status",
          "file": "router.py",
          "line": 233,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/google/fivetran-connectors",
          "handler": "handle_get_meta_fivetran_connectors_ids",
          "file": "router.py",
          "line": 389,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/google/sync-fivetran-tables-state",
          "handler": "handle_sync_google_fivetran_tables_state",
          "file": "router.py",
          "line": 357,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/google/user/ad-accounts",
          "handler": "get_user_ad_accounts",
          "file": "router.py",
          "line": 119,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/google/user/ad-accounts",
          "handler": "assign_labels_to_user_ad_accounts",
          "file": "router.py",
          "line": 138,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/google/user/ad-accounts/{adAccountId}",
          "handler": "delete_google_user_ad_account",
          "file": "router.py",
          "line": 167,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/google/user/connection",
          "handler": "get_google_user_connection",
          "file": "router.py",
          "line": 101,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/google/user/connection",
          "handler": "connect_google_user",
          "file": "router.py",
          "line": 81,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "hello",
          "file": "router.py",
          "line": 15,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/meta/ad-accounts",
          "handler": "get_meta_ad_accounts",
          "file": "router.py",
          "line": 169,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/meta/ad-accounts/{adAccountId}",
          "handler": "delete_meta_ad_account",
          "file": "router.py",
          "line": 185,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/meta/ad-reporting/connection",
          "handler": "get_meta_ad_reporting_connection",
          "file": "router.py",
          "line": 230,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/meta/ad-reporting/connection",
          "handler": "connect_meta_ad_reporting",
          "file": "router.py",
          "line": 207,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/meta/ad-reporting/connection/reconnect",
          "handler": "reconnect_meta_ad_reporting",
          "file": "router.py",
          "line": 243,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/meta/ad-reporting/connection/refresh",
          "handler": "refresh_meta_ad_reporting_connection",
          "file": "router.py",
          "line": 267,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/meta/ad-reporting/handle-dbt-sync",
          "handler": "handle_ad_reporting_dbt_sync",
          "file": "router.py",
          "line": 351,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/meta/audience-shares/{shareId}",
          "handler": "get_meta_audience_share",
          "file": "router.py",
          "line": 337,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/meta/audiences",
          "handler": "share_meta_audience",
          "file": "router.py",
          "line": 290,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/meta/audiences/{metaAudienceId}/share-status",
          "handler": "get_meta_audience_share_status",
          "file": "router.py",
          "line": 315,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/meta/fivetran-connectors",
          "handler": "handle_get_meta_fivetran_connectors_ids",
          "file": "router.py",
          "line": 388,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/meta/sync-fivetran-tables-state",
          "handler": "handle_sync_meta_fivetran_tables_state",
          "file": "router.py",
          "line": 367,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/meta/user/ad-accounts",
          "handler": "get_user_ad_accounts",
          "file": "router.py",
          "line": 108,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/meta/user/ad-accounts",
          "handler": "assign_labels_to_user_ad_accounts",
          "file": "router.py",
          "line": 121,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/meta/user/ad-accounts/{adAccountId}",
          "handler": "delete_meta_user_ad_account",
          "file": "router.py",
          "line": 150,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/meta/user/connection",
          "handler": "get_meta_user_connection",
          "file": "router.py",
          "line": 73,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/meta/user/connection",
          "handler": "connect_meta_user",
          "file": "router.py",
          "line": 86,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/rosters",
          "handler": "get_rosters",
          "file": "router.py",
          "line": 37,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/rosters/custom-lists",
          "handler": "get_custom_lists",
          "file": "router.py",
          "line": 97,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/rosters/local-rep-countries",
          "handler": "get_local_rep_countries",
          "file": "router.py",
          "line": 115,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/rosters/search",
          "handler": "search_rosters",
          "file": "router.py",
          "line": 74,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/shopify/fivetran-connectors",
          "handler": "handle_get_shopify_fivetran_connectors_ids",
          "file": "router.py",
          "line": 293,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/shopify/handle-transformation-success",
          "handler": "handle_shopify_transformation_success",
          "file": "router.py",
          "line": 256,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/shopify/max-spend",
          "handler": "get_shopify_max_spend",
          "file": "router.py",
          "line": 233,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/shopify/stores",
          "handler": "get_shopify_stores",
          "file": "router.py",
          "line": 105,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/shopify/stores/connection",
          "handler": "connect_shopify_store",
          "file": "router.py",
          "line": 53,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/shopify/stores/refresh",
          "handler": "refresh_shopify_store",
          "file": "router.py",
          "line": 123,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/shopify/stores/{storeId}",
          "handler": "delete_shopify_store",
          "file": "router.py",
          "line": 138,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/shopify/stores/{storeId}/artists",
          "handler": "get_shopify_store_artists",
          "file": "router.py",
          "line": 214,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/shopify/stores/{storeId}/collections",
          "handler": "get_shopify_store_collections",
          "file": "router.py",
          "line": 161,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/shopify/stores/{storeId}/collections",
          "handler": "update_shopify_store_collections",
          "file": "router.py",
          "line": 183,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/shopify/stores/{storeId}/reconnect",
          "handler": "reconnect_shopify_store",
          "file": "router.py",
          "line": 80,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/shopify/sync-fivetran-tables-state",
          "handler": "handle_sync_shopify_fivetran_tables_state",
          "file": "router.py",
          "line": 275,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/songwhip/presave-pages",
          "handler": "get_presave_page",
          "file": "router.py",
          "line": 20,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tiktok/ad-accounts",
          "handler": "get_tiktok_ad_accounts",
          "file": "router.py",
          "line": 227,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/tiktok/ad-accounts/{adAccountId}",
          "handler": "delete_tiktok_ad_account",
          "file": "router.py",
          "line": 243,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tiktok/ad-reporting/connection",
          "handler": "get_tiktok_ad_reporting_connection",
          "file": "router.py",
          "line": 187,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/tiktok/ad-reporting/connection",
          "handler": "connect_tiktok_ad_reporting",
          "file": "router.py",
          "line": 163,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/tiktok/ad-reporting/connection/refresh",
          "handler": "refresh_tiktok_ad_reporting_connection",
          "file": "router.py",
          "line": 211,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/tiktok/ad-reporting/handle-dbt-sync",
          "handler": "handle_ad_reporting_dbt_sync",
          "file": "router.py",
          "line": 286,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tiktok/audience-shares/{shareId}",
          "handler": "get_tiktok_audience_share",
          "file": "router.py",
          "line": 352,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/tiktok/audiences",
          "handler": "share_tiktok_audience",
          "file": "router.py",
          "line": 306,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/tiktok/audiences/{audienceId}",
          "handler": "update_tiktok_audience_share",
          "file": "router.py",
          "line": 370,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tiktok/audiences/{tiktokAudienceId}/share-status",
          "handler": "get_tiktok_audience_share_status",
          "file": "router.py",
          "line": 330,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tiktok/fivetran-connectors",
          "handler": "handle_get_meta_fivetran_connectors_ids",
          "file": "router.py",
          "line": 411,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/tiktok/sync-fivetran-tables-state",
          "handler": "handle_sync_tiktok_fivetran_tables_state",
          "file": "router.py",
          "line": 393,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tiktok/user/ad-accounts",
          "handler": "get_user_ad_accounts",
          "file": "router.py",
          "line": 117,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/tiktok/user/ad-accounts",
          "handler": "assign_labels_to_user_ad_accounts",
          "file": "router.py",
          "line": 136,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/tiktok/user/ad-accounts/{adAccountId}",
          "handler": "delete_tiktok_user_ad_account",
          "file": "router.py",
          "line": 267,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tiktok/user/connection",
          "handler": "get_tiktok_user_connection",
          "file": "router.py",
          "line": 99,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/tiktok/user/connection",
          "handler": "connect_tiktok_user",
          "file": "router.py",
          "line": 81,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-email-campaigns",
      "framework": "fastapi",
      "repo_url": "https://github.com/theorchard/ows-email-campaigns.git",
      "team": "fansifter",
      "endpoints": {
        "total": 47,
        "used": {
          "count": 25,
          "percent": 53.2
        },
        "unused": {
          "count": 22,
          "percent": 46.8
        }
      },
      "functions": {
        "total": 0,
        "dead": 0,
        "dead_percent": 0
      },
      "details": [
        {
          "method": "POST",
          "path": "/automated",
          "handler": "create_automated_email",
          "file": "automated_emails.py",
          "line": 157,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/automated-emails-public-preview/{emailId}",
          "handler": "get_automated_email_public_preview",
          "file": "automated_emails.py",
          "line": 521,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/automated/autosave",
          "handler": "autosave_automated_email_campaign",
          "file": "automated_emails.py",
          "line": 91,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/automated/list",
          "handler": "get_automated_emails",
          "file": "automated_emails.py",
          "line": 120,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/automated/{emailId}",
          "handler": "delete_automated_email",
          "file": "automated_emails.py",
          "line": 246,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/automated/{emailId}",
          "handler": "get_automated_email",
          "file": "automated_emails.py",
          "line": 185,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/automated/{emailId}",
          "handler": "update_automated_email",
          "file": "automated_emails.py",
          "line": 212,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/automated/{emailId}/analytics",
          "handler": "get_automated_email_analytics",
          "file": "automated_emails.py",
          "line": 364,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/automated/{emailId}/analytics/links",
          "handler": "get_automated_email_link_analytics",
          "file": "automated_emails.py",
          "line": 386,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/automated/{emailId}/content",
          "handler": "update_automated_email_content",
          "file": "automated_emails.py",
          "line": 316,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/automated/{emailId}/duplicate",
          "handler": "duplicate_automated_email",
          "file": "automated_emails.py",
          "line": 270,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/automated/{emailId}/preview",
          "handler": "get_automated_email_preview",
          "file": "automated_emails.py",
          "line": 294,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/automated/{emailId}/privacy-footer",
          "handler": "get_automated_email_privacy_footer",
          "file": "automated_emails.py",
          "line": 341,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/automated/{emailId}/public-preview-url",
          "handler": "generate_automated_email_public_preview_url",
          "file": "automated_emails.py",
          "line": 452,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/automated/{emailId}/send-test-email",
          "handler": "send_automated_test_email",
          "file": "automated_emails.py",
          "line": 411,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/automated/{emailId}/source-campaigns/attach",
          "handler": "attach_source_campaigns",
          "file": "automated_emails.py",
          "line": 477,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/automated/{emailId}/source-campaigns/detach",
          "handler": "detach_source_campaigns",
          "file": "automated_emails.py",
          "line": 501,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/automated/{emailId}/stripo/token",
          "handler": "get_automated_email_stripo_auth_token",
          "file": "automated_emails.py",
          "line": 433,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns",
          "handler": "create_email_campaign",
          "file": "email_campaigns.py",
          "line": 189,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns-public-preview/{campaignId}",
          "handler": "get_email_campaign_public_preview",
          "file": "email_campaigns.py",
          "line": 750,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/autosave",
          "handler": "autosave_email_campaign",
          "file": "email_campaigns.py",
          "line": 628,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/list",
          "handler": "get_campaigns",
          "file": "email_campaigns.py",
          "line": 116,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/search",
          "handler": "search_campaigns",
          "file": "email_campaigns.py",
          "line": 153,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/send-estimation",
          "handler": "bulk_estimate_email_campaign_send_time",
          "file": "email_campaigns.py",
          "line": 683,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/campaigns/{campaignId}",
          "handler": "delete_email_campaign",
          "file": "email_campaigns.py",
          "line": 261,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}",
          "handler": "get_email_campaign",
          "file": "email_campaigns.py",
          "line": 283,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/campaigns/{campaignId}",
          "handler": "update_email_campaign",
          "file": "email_campaigns.py",
          "line": 227,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/analytics",
          "handler": "get_email_campaign_analytics",
          "file": "email_campaigns.py",
          "line": 581,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/analytics/links",
          "handler": "get_email_campaign_link_analytics",
          "file": "email_campaigns.py",
          "line": 603,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/campaigns/{campaignId}/content",
          "handler": "update_email_campaign_content",
          "file": "email_campaigns.py",
          "line": 328,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/duplicate",
          "handler": "duplicate_email_campaign",
          "file": "email_campaigns.py",
          "line": 499,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/internal",
          "handler": "get_email_campaign_internal",
          "file": "email_campaigns.py",
          "line": 561,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/preview",
          "handler": "get_campaign_email_preview",
          "file": "email_campaigns.py",
          "line": 305,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/privacy-footer",
          "handler": "get_email_campaign_privacy_footer",
          "file": "email_campaigns.py",
          "line": 705,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/public-preview-url",
          "handler": "generate_email_campaign_public_preview_url",
          "file": "email_campaigns.py",
          "line": 729,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/schedule",
          "handler": "schedule_email_campaign",
          "file": "email_campaigns.py",
          "line": 387,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/campaigns/{campaignId}/schedule",
          "handler": "edit_schedule_email_campaign",
          "file": "email_campaigns.py",
          "line": 420,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/send",
          "handler": "send_email_campaign",
          "file": "email_campaigns.py",
          "line": 475,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/send-estimation",
          "handler": "estimate_email_campaign_send_time",
          "file": "email_campaigns.py",
          "line": 661,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/send-test-email",
          "handler": "send_test_email_campaign",
          "file": "email_campaigns.py",
          "line": 355,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/status",
          "handler": "get_campaign_live_status",
          "file": "email_campaigns.py",
          "line": 521,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/stripo/token",
          "handler": "get_stripo_auth_token",
          "file": "email_campaigns.py",
          "line": 540,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/unschedule",
          "handler": "unschedule_email_campaign",
          "file": "email_campaigns.py",
          "line": 447,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/domains",
          "handler": "get_email_domains",
          "file": "email_domains.py",
          "line": 21,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "hello",
          "file": "infra.py",
          "line": 15,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/source-campaigns/list",
          "handler": "get_source_campaigns",
          "file": "source_campaigns.py",
          "line": 25,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/source-campaigns/{source}/{campaignId}/automated-emails",
          "handler": "get_source_campaign_automated_emails",
          "file": "source_campaigns.py",
          "line": 64,
          "status": "unused",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-features",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-features",
      "team": "permissions-platform",
      "endpoints": {
        "total": 10,
        "used": {
          "count": 6,
          "percent": 60.0
        },
        "unused": {
          "count": 4,
          "percent": 40.0
        }
      },
      "functions": {
        "total": 0,
        "dead": 0,
        "dead_percent": 0
      },
      "details": [
        {
          "method": "GET",
          "path": "/features",
          "handler": "get_features",
          "file": "handlers.py",
          "line": 25,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/features/<feature_name>",
          "handler": "get_feature",
          "file": "handlers.py",
          "line": 261,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/features/<feature_name>",
          "handler": "force_default_variant",
          "file": "handlers.py",
          "line": 381,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/features/<feature_name>/user/<orchard_user_id>",
          "handler": "get_feature_for_user",
          "file": "handlers.py",
          "line": 343,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/features/<feature_name>/user/<orchard_user_id>",
          "handler": "force_variant_for_user",
          "file": "handlers.py",
          "line": 369,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/features/user/<orchard_user_id>",
          "handler": "get_features_for_user",
          "file": "handlers.py",
          "line": 195,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/features/user_type/<user_type>/user_id/<user_id>",
          "handler": "get_features_for_user_with_user_type",
          "file": "handlers.py",
          "line": 234,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/features/vendor/<vendor_id>/user/<orchard_user_id>",
          "handler": "get_features_for_vendor",
          "file": "handlers.py",
          "line": 133,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/features/vendor/<vendor_id>/user_type/<user_type>/user_id/<user_id>",
          "handler": "get_features_for_vendor_with_user_type",
          "file": "handlers.py",
          "line": 164,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 393,
          "status": "unused",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-grass",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-grass.git",
      "team": "permissions-platform",
      "endpoints": {
        "total": 4,
        "used": {
          "count": 0,
          "percent": 0.0
        },
        "unused": {
          "count": 4,
          "percent": 100.0
        }
      },
      "functions": {
        "total": 3,
        "dead": 10,
        "dead_percent": 333.3
      },
      "details": [
        {
          "method": "DELETE",
          "path": "/auth/logout-session/",
          "handler": "delete_user_session",
          "file": "auth.py",
          "line": 61,
          "status": "unused",
          "dead_functions": [
            "logic/session.py::delete_token",
            "models/session.py::delete"
          ]
        },
        {
          "method": "GET",
          "path": "/auth/session/",
          "handler": "create_user_session",
          "file": "auth.py",
          "line": 20,
          "status": "unused",
          "dead_functions": [
            "logic/session.py::create_token",
            "models/oa_user.py::get_roles_for_user",
            "models/oa_user.py::get_user_identity",
            "models/session.py::create",
            "models/workstation_user.py::get_roles_for_user",
            "models/workstation_user.py::get_user_identity"
          ]
        },
        {
          "method": "OPTIONS",
          "path": "/token/store/",
          "handler": "store_auth_tokens",
          "file": "auth.py",
          "line": 81,
          "status": "unused",
          "dead_functions": [
            "logic/session.py::store_auth_token_on_logout",
            "models/session.py::store_auth_on_logout"
          ]
        },
        {
          "method": "POST",
          "path": "/token/store/",
          "handler": "store_auth_tokens",
          "file": "auth.py",
          "line": 81,
          "status": "unused",
          "dead_functions": [
            "logic/session.py::store_auth_token_on_logout",
            "models/session.py::store_auth_on_logout"
          ]
        }
      ],
      "dead_functions": [
        "logic/session.py::create_token",
        "logic/session.py::delete_token",
        "logic/session.py::store_auth_token_on_logout",
        "models/oa_user.py::get_roles_for_user",
        "models/oa_user.py::get_user_identity",
        "models/session.py::create",
        "models/session.py::delete",
        "models/session.py::store_auth_on_logout",
        "models/workstation_user.py::get_roles_for_user",
        "models/workstation_user.py::get_user_identity"
      ]
    },
    {
      "name": "ows-grid-generator",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-grid-generator.git",
      "team": "content-delivery-asset-management",
      "endpoints": {
        "total": 8,
        "used": {
          "count": 2,
          "percent": 25.0
        },
        "unused": {
          "count": 6,
          "percent": 75.0
        }
      },
      "functions": {
        "total": 5,
        "dead": 5,
        "dead_percent": 100.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 25,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/release/<release_id>",
          "handler": "verify",
          "file": "handlers.py",
          "line": 80,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/release/<release_id>",
          "handler": "populate",
          "file": "handlers.py",
          "line": 95,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/status/report",
          "handler": "report",
          "file": "handlers.py",
          "line": 127,
          "status": "unused",
          "dead_functions": [
            "logic/manager.py::report_upcs",
            "models/datasource/orchard.py::lookup_releases_by_status"
          ]
        },
        {
          "method": "POST",
          "path": "/status/update",
          "handler": "update_status",
          "file": "handlers.py",
          "line": 112,
          "status": "unused",
          "dead_functions": [
            "logic/manager.py::update_release_status",
            "models/datasource/orchard.py::update_release_status"
          ]
        },
        {
          "method": "GET",
          "path": "/test/upc/<upc>",
          "handler": "sample_verify",
          "file": "handlers.py",
          "line": 35,
          "status": "unused",
          "dead_functions": [
            "logic/manager.py::sample_validate"
          ]
        },
        {
          "method": "GET",
          "path": "/upc/<upc>",
          "handler": "verify_upc",
          "file": "handlers.py",
          "line": 50,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/upc/<upc>",
          "handler": "populate_upc",
          "file": "handlers.py",
          "line": 65,
          "status": "unused",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/manager.py::report_upcs",
        "logic/manager.py::sample_validate",
        "logic/manager.py::update_release_status",
        "models/datasource/orchard.py::lookup_releases_by_status",
        "models/datasource/orchard.py::update_release_status"
      ]
    },
    {
      "name": "ows-label-audit",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-label-audit.git",
      "team": "collections-fingerprinting",
      "endpoints": {
        "total": 4,
        "used": {
          "count": 0,
          "percent": 0.0
        },
        "unused": {
          "count": 4,
          "percent": 100.0
        }
      },
      "functions": {
        "total": 3,
        "dead": 3,
        "dead_percent": 100.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "hello_world",
          "file": "handlers.py",
          "line": 13,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/label_audit",
          "handler": "index_label_audits",
          "file": "handlers.py",
          "line": 73,
          "status": "unused",
          "dead_functions": [
            "logic/audit_persistence.py::fetch_all"
          ]
        },
        {
          "method": "POST",
          "path": "/label_audit",
          "handler": "start_label_audit",
          "file": "handlers.py",
          "line": 18,
          "status": "unused",
          "dead_functions": [
            "logic/start_audit.py::start_label_audit"
          ]
        },
        {
          "method": "GET",
          "path": "/label_audit/<int:audit_id>",
          "handler": "get_label_audit",
          "file": "handlers.py",
          "line": 54,
          "status": "unused",
          "dead_functions": [
            "logic/audit_persistence.py::fetch"
          ]
        }
      ],
      "dead_functions": [
        "logic/audit_persistence.py::fetch",
        "logic/audit_persistence.py::fetch_all",
        "logic/start_audit.py::start_label_audit"
      ]
    },
    {
      "name": "ows-ledger",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-ledger.git",
      "team": "abacus",
      "endpoints": {
        "total": 36,
        "used": {
          "count": 23,
          "percent": 63.9
        },
        "unused": {
          "count": 13,
          "percent": 36.1
        }
      },
      "functions": {
        "total": 19,
        "dead": 14,
        "dead_percent": 73.7
      },
      "details": [
        {
          "method": "GET",
          "path": "/bulk/accounts-balance",
          "handler": "get_accounts_balances",
          "file": "bulk_ledgers.py",
          "line": 37,
          "status": "unused",
          "dead_functions": [
            "logic/bulk_ledgers.py::get_accounts_balance",
            "models/ledger_account/LedgerAccount.py::get_by_custom_filters"
          ]
        },
        {
          "method": "GET",
          "path": "/bulk/contracts/closed-balance",
          "handler": "get_contracts_balances",
          "file": "bulk_ledgers.py",
          "line": 59,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "base.py",
          "line": 11,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-account-contract/account/<int:account_id>/payable-balance",
          "handler": "get_payable_balance_by_account",
          "file": "ledger_account_contract.py",
          "line": 18,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-account-contracts/account/<int:account_id>",
          "handler": "get_ledger_list_by_account_id",
          "file": "ledger_account_contract.py",
          "line": 37,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-account/account/<int:account_id>",
          "handler": "get_ledger_info",
          "file": "ledger_account.py",
          "line": 71,
          "status": "unused",
          "dead_functions": [
            "logic/ledger_account.py::get_ledger_account_info",
            "models/ledger_account/LedgerAccount.py::get_ledger_account_info"
          ]
        },
        {
          "method": "GET",
          "path": "/ledger-account/account/<int:account_id>/current-balance",
          "handler": "get_current_balance",
          "file": "ledger_account.py",
          "line": 88,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-account/accounting-period/<int:accounting_period_id>/accounts",
          "handler": "get_ledger_accounts",
          "file": "ledger_account.py",
          "line": 126,
          "status": "unused",
          "dead_functions": [
            "logic/ledger_account.py::get_ledger_accounts_by_acc_period_id",
            "models/ledger_account/LedgerAccount.py::get_accounts_by_acc_period_id",
            "models/ledger_account/LedgerAccount.py::get_total_accounts_count_by_acc_period_id"
          ]
        },
        {
          "method": "GET",
          "path": "/ledger-accounting-run-balance/<int:accounting_run_id>",
          "handler": "LedgerAccountingRunBalanceListView",
          "file": "ledger_accounting_run_balance.py",
          "line": 94,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ledger-accounting-run-balance/<int:accounting_run_id>/bulk",
          "handler": "bulk_create_ledger_accounting_run_balance_entries",
          "file": "ledger_accounting_run_balance.py",
          "line": 33,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-accounting-run-balance/accounting-period/<int:accounting_period_id>/vat-category/<string:vat_category>",
          "handler": "get_ledger_acc_run_balance_by_acc_period_id",
          "file": "ledger_accounting_run_balance.py",
          "line": 115,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ledger-accounting-run-balance/contract-count/dataloader",
          "handler": "LedgerAccountingRunBalanceContractCountDataloader",
          "file": "ledger_accounting_run_balance.py",
          "line": 102,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-accounting-run-vat/accounting-period/<int:accounting_period_id>/overview",
          "handler": "get_ledger_accounting_run_vat_overview",
          "file": "ledger_accounting_run_vat.py",
          "line": 19,
          "status": "unused",
          "dead_functions": [
            "logic/ledger_accounting_run_vat.py::get_ledger_accounting_run_vat_overview",
            "models/ledger_accounting_run_vat/LedgerAccountingRunVat.py::get_ledger_accounting_run_vat_overview"
          ]
        },
        {
          "method": "GET",
          "path": "/ledger-accounting-run-vat/accounting-period/<int:accounting_period_id>/vat-category/<string:vat_category>/",
          "handler": "get_ledger_vat_list",
          "file": "ledger_accounting_run_vat.py",
          "line": 37,
          "status": "unused",
          "dead_functions": [
            "logic/ledger_accounting_run_vat.py::get_ledger_vat_list",
            "models/ledger_accounting_run_vat/LedgerAccountingRunVat.py::get_ledger_vat_list",
            "models/ledger_accounting_run_vat/LedgerAccountingRunVat.py::get_ledger_vat_list_count"
          ]
        },
        {
          "method": "POST",
          "path": "/ledger-accounting-run-vat/bulk",
          "handler": "bulk_create_ledger_accounting_run_vat_entries",
          "file": "ledger_accounting_run_vat.py",
          "line": 54,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-accounts/account/<int:account_id>",
          "handler": "LedgerAccountListView",
          "file": "ledger_account.py",
          "line": 63,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ledger-adjustment-applied/bulk",
          "handler": "bulk_create_ledger_adjustment_applied",
          "file": "ledger_adjustment_applied.py",
          "line": 19,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-adjustment/statement-period/<int:statement_period_id>/pending",
          "handler": "get_pending_ledger_adjustments_by_statement_period_id",
          "file": "ledger_adjustment.py",
          "line": 48,
          "status": "unused",
          "dead_functions": [
            "logic/ledger_adjustment.py::get_pending_ledger_adjustments_by_statement_period_id",
            "models/ledger_adjustment/LedgerAdjustment.py::get_pending_by_statement_period_id"
          ]
        },
        {
          "method": "GET",
          "path": "/ledger-adjustments/",
          "handler": "LedgerAdjustmentList",
          "file": "ledger_adjustment.py",
          "line": 37,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-contract-advance-applied/<int:object_id>",
          "handler": "LedgerContractAdvanceAppliedItemView",
          "file": "ledger_contract_advance_applied.py",
          "line": 43,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-contract-advance-applied/contract-advance/<int:contract_advance_id>/",
          "handler": "get_ledger_contract_advance_applied_by_contract_advance",
          "file": "ledger_contract_advance_applied.py",
          "line": 87,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ledger-contract-advance-applied/contract-advance/<int:contract_advance_id>/paid/",
          "handler": "create_contract_advance_ledger_entries",
          "file": "ledger_contract_advance_applied.py",
          "line": 56,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-contract-advance-applied/worksheet/<int:worksheet_payment_contract_advance_id>/<string:entry_type>",
          "handler": "get_ledger_contract_advance_applied_by_worksheet",
          "file": "ledger_contract_advance_applied.py",
          "line": 106,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ledger-contract-flowthrough/bulk",
          "handler": "bulk_create_ledger_contract_flowthrough_entries",
          "file": "ledger_contract_flowthrough.py",
          "line": 23,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ledger-correction/bulk",
          "handler": "bulk_create_ledger_correction",
          "file": "ledger_correction.py",
          "line": 19,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ledger-reserve-release-schedule/bulk",
          "handler": "bulk_create_ledger_reserve_release_schedule",
          "file": "ledger_reserve_release_schedule.py",
          "line": 23,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-reserve-release-schedule/statement-period/<int:statement_period_id>/release",
          "handler": "get_ledger_reserve_release_by_statement_period_id",
          "file": "ledger_reserve_release_schedule.py",
          "line": 43,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ledger-reserve-release/bulk",
          "handler": "bulk_create_ledger_reserve_release_entries",
          "file": "ledger_reserve_release.py",
          "line": 16,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-reserve-taken/accounting-run/<int:accounting_run_id>",
          "handler": "get_ledger_reserve_taken_by_accounting_run_id",
          "file": "ledger_reserve_taken.py",
          "line": 34,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ledger-reserve-taken/accounting-run/<int:accounting_run_id>",
          "handler": "debit_reserves_from_ledger_account_by_run",
          "file": "ledger_reserve_taken.py",
          "line": 55,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ledger-reserve-taken/bulk",
          "handler": "bulk_create_ledger_reserve_taken_entries",
          "file": "ledger_reserve_taken.py",
          "line": 16,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ledger-vat-summary/statement-period/<int:statement_period_id>/event/<int:event_id>/bulk",
          "handler": "bulk_create_ledger_vat_summary",
          "file": "ledger_vat_summary.py",
          "line": 24,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ledger/bulk",
          "handler": "bulk_create_ledger_account_entries",
          "file": "bulk_ledgers.py",
          "line": 17,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-adjustment-types/",
          "handler": "ReferenceAdjustmentTypeListView",
          "file": "reference_adjustment_type.py",
          "line": 63,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-adjustment-types/<int:object_id>",
          "handler": "ReferenceAdjustmentTypeItemView",
          "file": "reference_adjustment_type.py",
          "line": 57,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-vat-rate",
          "handler": "get_reference_vat_rates",
          "file": "reference_vat_rate.py",
          "line": 15,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/bulk_ledgers.py::get_accounts_balance",
        "logic/ledger_account.py::get_ledger_account_info",
        "logic/ledger_account.py::get_ledger_accounts_by_acc_period_id",
        "logic/ledger_accounting_run_vat.py::get_ledger_accounting_run_vat_overview",
        "logic/ledger_accounting_run_vat.py::get_ledger_vat_list",
        "logic/ledger_adjustment.py::get_pending_ledger_adjustments_by_statement_period_id",
        "models/ledger_account/LedgerAccount.py::get_accounts_by_acc_period_id",
        "models/ledger_account/LedgerAccount.py::get_by_custom_filters",
        "models/ledger_account/LedgerAccount.py::get_ledger_account_info",
        "models/ledger_account/LedgerAccount.py::get_total_accounts_count_by_acc_period_id",
        "models/ledger_accounting_run_vat/LedgerAccountingRunVat.py::get_ledger_accounting_run_vat_overview",
        "models/ledger_accounting_run_vat/LedgerAccountingRunVat.py::get_ledger_vat_list",
        "models/ledger_accounting_run_vat/LedgerAccountingRunVat.py::get_ledger_vat_list_count",
        "models/ledger_adjustment/LedgerAdjustment.py::get_pending_by_statement_period_id"
      ]
    },
    {
      "name": "ows-lyrics",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-lyrics.git",
      "team": "content-review-management",
      "endpoints": {
        "total": 10,
        "used": {
          "count": 8,
          "percent": 80.0
        },
        "unused": {
          "count": 2,
          "percent": 20.0
        }
      },
      "functions": {
        "total": 7,
        "dead": 0,
        "dead_percent": 0.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/has-explicit-lyrics",
          "handler": "has_explicit_lyrics",
          "file": "handlers.py",
          "line": 160,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/has-explicit-lyrics",
          "handler": "has_explicit_lyrics_post",
          "file": "handlers.py",
          "line": 173,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 33,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/tracks/<int:track_id>/lyrics",
          "handler": "delete_track_lyrics",
          "file": "handlers.py",
          "line": 96,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tracks/<int:track_id>/lyrics",
          "handler": "get_track_lyrics",
          "file": "handlers.py",
          "line": 64,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/tracks/<int:track_id>/lyrics",
          "handler": "put_track_lyrics",
          "file": "handlers.py",
          "line": 79,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/tracks/copy",
          "handler": "copy_track_lyrics",
          "file": "handlers.py",
          "line": 125,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/tracks/lyrics",
          "handler": "delete_tracks_lyrics",
          "file": "handlers.py",
          "line": 111,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tracks/lyrics",
          "handler": "get_bulk_track_lyrics",
          "file": "handlers.py",
          "line": 139,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/tracks/lyrics",
          "handler": "get_bulk_track_lyrics",
          "file": "handlers.py",
          "line": 139,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-marketing",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-marketing.git",
      "team": "content-review-management",
      "endpoints": {
        "total": 7,
        "used": {
          "count": 6,
          "percent": 85.7
        },
        "unused": {
          "count": 1,
          "percent": 14.3
        }
      },
      "functions": {
        "total": 7,
        "dead": 1,
        "dead_percent": 14.3
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "get_health",
          "file": "handlers.py",
          "line": 31,
          "status": "unused",
          "dead_functions": [
            "logic/health.py::get_health_check"
          ]
        },
        {
          "method": "POST",
          "path": "/highlights",
          "handler": "create_highlight",
          "file": "handlers.py",
          "line": 79,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/highlights/<entity_type>/<entity_id>",
          "handler": "delete_highlights_by_entity",
          "file": "handlers.py",
          "line": 60,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/highlights/<entity_type>/<entity_id>",
          "handler": "get_highlights_by_entity",
          "file": "handlers.py",
          "line": 37,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/highlights/<highlight_id>",
          "handler": "delete_highlight",
          "file": "handlers.py",
          "line": 108,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/highlights/<highlight_id>",
          "handler": "update_highlight",
          "file": "handlers.py",
          "line": 90,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/highlights/product/<int:product_id>/copy/<int:new_product_id>",
          "handler": "copy_product_highlight",
          "file": "handlers.py",
          "line": 127,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/health.py::get_health_check"
      ]
    },
    {
      "name": "ows-masters-registry",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-masters-registry.git",
      "team": "collections-fingerprinting",
      "endpoints": {
        "total": 18,
        "used": {
          "count": 17,
          "percent": 94.4
        },
        "unused": {
          "count": 1,
          "percent": 5.6
        }
      },
      "functions": {
        "total": 16,
        "dead": 0,
        "dead_percent": 0.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/bulk",
          "handler": "get_bulk_tasks",
          "file": "handlers.py",
          "line": 389,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/generate_report",
          "handler": "generate_report",
          "file": "handlers.py",
          "line": 444,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/get_task_context",
          "handler": "get_task_context",
          "file": "handlers.py",
          "line": 469,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 48,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/masterrights",
          "handler": "masterrights",
          "file": "handlers.py",
          "line": 73,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/masterrights",
          "handler": "masterrights",
          "file": "handlers.py",
          "line": 73,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ownership",
          "handler": "ownership",
          "file": "handlers.py",
          "line": 57,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ownership",
          "handler": "add_tuid_for_territory",
          "file": "handlers.py",
          "line": 277,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/ownership/conflicts/resolve",
          "handler": "bulk_resolve_internal_conflicts",
          "file": "handlers.py",
          "line": 358,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/ownership/isrc/<string:isrc>/refresh",
          "handler": "refresh_ownership",
          "file": "handlers.py",
          "line": 99,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/ownership/isrc/<string:isrc>/territories",
          "handler": "remove_ownership",
          "file": "handlers.py",
          "line": 149,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/ownership/isrc/<string:isrc>/territories",
          "handler": "add_ownership",
          "file": "handlers.py",
          "line": 121,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ownership/lock/isrc",
          "handler": "lock_territories",
          "file": "handlers.py",
          "line": 215,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ownership/lock/isrcs",
          "handler": "bulk_lock_territories",
          "file": "handlers.py",
          "line": 246,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/ownership/territories",
          "handler": "bulk_remove_territories",
          "file": "handlers.py",
          "line": 493,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ownership/unlock/isrc",
          "handler": "unlock_territories",
          "file": "handlers.py",
          "line": 305,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ownership/unlock/isrcs",
          "handler": "bulk_unlock_territories",
          "file": "handlers.py",
          "line": 333,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ownership/upcs",
          "handler": "bulk_import_upcs",
          "file": "handlers.py",
          "line": 177,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-moneyhub",
      "framework": "fastapi",
      "repo_url": "https://github.com/theorchard/ows-moneyhub.git",
      "team": "abacus",
      "endpoints": {
        "total": 81,
        "used": {
          "count": 69,
          "percent": 85.2
        },
        "unused": {
          "count": 12,
          "percent": 14.8
        }
      },
      "functions": {
        "total": 68,
        "dead": 4,
        "dead_percent": 5.9
      },
      "details": [
        {
          "method": "GET",
          "path": "",
          "handler": "health_check",
          "file": "base.py",
          "line": 13,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-statements/dataloader/account/{account_id}/applied-advances",
          "handler": "load_advances_by_account_and_statement_periods",
          "file": "account_statements.py",
          "line": 195,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-statements/dataloader/account/{account_id}/balance",
          "handler": "load_balances_by_account_and_statement_periods",
          "file": "account_statements.py",
          "line": 171,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-statements/dataloader/account/{account_id}/expenses",
          "handler": "load_expenses_by_account_and_statement_periods",
          "file": "account_statements.py",
          "line": 147,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-statements/dataloader/account/{account_id}/ledger-adjustments",
          "handler": "load_adjustments_by_account_and_statement_periods",
          "file": "account_statements.py",
          "line": 29,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-statements/dataloader/account/{account_id}/payment-details",
          "handler": "load_payment_details_by_account_and_statement_periods",
          "file": "account_statements.py",
          "line": 123,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-statements/dataloader/account/{account_id}/payments",
          "handler": "load_payments_by_account_and_statement_periods",
          "file": "account_statements.py",
          "line": 100,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-statements/dataloader/account/{account_id}/reserves",
          "handler": "load_reserves_by_account_and_statement_periods",
          "file": "account_statements.py",
          "line": 52,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-statements/dataloader/account/{account_id}/statement-attachments",
          "handler": "load_statement_attachments_by_account_and_statement_periods",
          "file": "account_statements.py",
          "line": 75,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-statements/dataloader/account/{account_id}/vat",
          "handler": "load_vat_by_account_and_statement_periods",
          "file": "account_statements.py",
          "line": 219,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/{account_id}/account-statement-periods",
          "handler": "get_statement_periods_by_account_id",
          "file": "account.py",
          "line": 321,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/{account_id}/activity",
          "handler": "get_account_activity",
          "file": "account.py",
          "line": 342,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/{account_id}/activity-periods",
          "handler": "get_activity_periods_by_account",
          "file": "account.py",
          "line": 35,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/{account_id}/artists",
          "handler": "get_artists_by_account",
          "file": "account.py",
          "line": 291,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account/{account_id}/dataloader/contracts",
          "handler": "load_account_contracts",
          "file": "account.py",
          "line": 363,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/{account_id}/imprints",
          "handler": "get_imprints_by_account",
          "file": "account.py",
          "line": 260,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/{account_id}/projects",
          "handler": "get_projects_by_account",
          "file": "account.py",
          "line": 229,
          "status": "unused",
          "dead_functions": [
            "logic/account.py::get_projects_by_account_id"
          ]
        },
        {
          "method": "GET",
          "path": "/account/{account_id}/statement-period/{statement_period_id}/balance",
          "handler": "get_account_statement_period_balance",
          "file": "account.py",
          "line": 157,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/{account_id}/statement-period/{statement_period_id}/payments",
          "handler": "get_account_statement_period_payments",
          "file": "account.py",
          "line": 111,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/{account_id}/statement-period/{statement_period_id}/vat",
          "handler": "get_account_statement_period_vat",
          "file": "account.py",
          "line": 132,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/{account_id}/statement-periods",
          "handler": "get_account_statements_by_account_id",
          "file": "account.py",
          "line": 57,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/{account_id}/statements",
          "handler": "get_statements_by_account_id",
          "file": "account.py",
          "line": 80,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/{account_id}/stores",
          "handler": "get_stores_by_account_id",
          "file": "account.py",
          "line": 182,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account/{account_id}/transaction-types",
          "handler": "get_transaction_types_by_account",
          "file": "account.py",
          "line": 204,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/applied-advances/account/{account_id}/statement-period/{statement_period_id}",
          "handler": "get_by_account_and_statement_period",
          "file": "ledger_contract_advance_applied.py",
          "line": 17,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ecs/dbt-refresh",
          "handler": "trigger_dbt_refresh",
          "file": "ecs_task.py",
          "line": 17,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/expenses/account/{account_id}",
          "handler": "get_expenses_by_account_id",
          "file": "expense.py",
          "line": 24,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/expenses/account/{account_id}/artists",
          "handler": "get_expenses_artists_by_account_id",
          "file": "expense.py",
          "line": 76,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/expenses/account/{account_id}/statement-period/{statement_period_id}",
          "handler": "get_expenses_by_account_and_statement_period",
          "file": "expense.py",
          "line": 140,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/expenses/account/{account_id}/subaccounts",
          "handler": "get_expenses_subaccounts_by_account_id",
          "file": "expense.py",
          "line": 125,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/expenses/account/{account_id}/types",
          "handler": "get_expenses_types_by_account_id",
          "file": "expense.py",
          "line": 110,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/expenses/account/{account_id}/upcs",
          "handler": "get_expenses_upcs_by_account_id",
          "file": "expense.py",
          "line": 95,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/invoices/payment-entity/{payment_entity_id}/statement-period/{statement_period_id}",
          "handler": "create_invoice_statement_attachments",
          "file": "statement_attachment_invoice.py",
          "line": 40,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/invoices/payment-entity/{payment_entity_id}/statement-period/{statement_period_id}/retry",
          "handler": "retry_invoice_statement_attachments",
          "file": "statement_attachment_invoice.py",
          "line": 69,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/invoices/statement-period/{statement_period_id}",
          "handler": "get_invoice_statement_attachments",
          "file": "statement_attachment_invoice.py",
          "line": 20,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-adjustments/account/{account_id}",
          "handler": "get_ledger_adjustments_by_account_id",
          "file": "ledger_adjustment.py",
          "line": 17,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-adjustments/account/{account_id}/statement-period/{statement_period_id}",
          "handler": "get_adjustments_by_account_and_statement_period",
          "file": "ledger_adjustment.py",
          "line": 63,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-adjustments/account/{account_id}/types",
          "handler": "get_ledger_adjustments_types_by_account_id",
          "file": "ledger_adjustment.py",
          "line": 48,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-vat-summary/account/{account_id}/activity-statement-period/{statement_period_id}",
          "handler": "get_ledger_vat_summary_by_activity_period",
          "file": "ledger_vat_summary.py",
          "line": 46,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-vat-summary/account/{account_id}/statement-period/{statement_period_id}",
          "handler": "get_ledger_vat_summary_by_account",
          "file": "ledger_vat_summary.py",
          "line": 18,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ledger-vat-summary/statement-period/{statement_period_id}/backfill",
          "handler": "backfill_ledger_vat_summary",
          "file": "ledger_vat_summary.py",
          "line": 74,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ledger-vat-summary/vat-summary-file/{vat_summary_file_id}",
          "handler": "get_ledger_vat_summary_by_vat_summary_file",
          "file": "ledger_vat_summary.py",
          "line": 93,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-entity/{payment_entity_id}/statement-period/{statement_period_id}/vat",
          "handler": "get_vat_data_by_payment_entity_and_statement_period",
          "file": "payment_entity.py",
          "line": 15,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-signing-entity/contract/{contract_id}",
          "handler": "get_reference_signing_entity_by_contract_id",
          "file": "reference_signing_entity.py",
          "line": 16,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reports/custom/account/{account_id}",
          "handler": "get_custom_reports",
          "file": "report_custom.py",
          "line": 149,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/reports/custom/account/{account_id}",
          "handler": "create_report",
          "file": "report_custom.py",
          "line": 49,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/reports/custom/statement-period/{statement_period_id}/regenerate",
          "handler": "regenerate_custom_reports",
          "file": "report_custom.py",
          "line": 192,
          "status": "unused",
          "dead_functions": [
            "logic/report_custom.py::regenerate_custom_reports"
          ]
        },
        {
          "method": "DELETE",
          "path": "/reports/custom/{report_custom_id}",
          "handler": "delete_custom_report",
          "file": "report_custom.py",
          "line": 128,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reports/custom/{report_custom_id}",
          "handler": "get_custom_report",
          "file": "report_custom.py",
          "line": 79,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/reports/custom/{report_custom_id}",
          "handler": "update_custom_report",
          "file": "report_custom.py",
          "line": 102,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reports/custom/{report_custom_id}/download",
          "handler": "get_report_presigned_url",
          "file": "report_custom.py",
          "line": 169,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reserve-release-schedules/account/{account_id}/statement-period/{statement_period_id}",
          "handler": "get_ledger_reserve_release_schedules_by_account_id",
          "file": "ledger_reserve_release_schedule.py",
          "line": 18,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reserves/account/{account_id}/statement-period/{statement_period_id}",
          "handler": "get_statement_reserves_by_account_id",
          "file": "reserves.py",
          "line": 37,
          "status": "unused",
          "dead_functions": [
            "logic/statement_reserves.py::get_statement_reserves"
          ]
        },
        {
          "method": "GET",
          "path": "/reserves/account/{account_id}/statement-period/{statement_period_id}/schedules",
          "handler": "get_ledger_reserve_release_schedules_by_account_id",
          "file": "reserves.py",
          "line": 18,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/revenue-analysis/account/{account_id}/activity-month",
          "handler": "get_revenue_analysis_by_activity_month",
          "file": "revenue_analysis.py",
          "line": 767,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/revenue-analysis/account/{account_id}/artist",
          "handler": "get_revenue_analysis_by_artist",
          "file": "revenue_analysis.py",
          "line": 507,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/revenue-analysis/account/{account_id}/country",
          "handler": "get_revenue_analysis_by_country",
          "file": "revenue_analysis.py",
          "line": 301,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/revenue-analysis/account/{account_id}/imprint",
          "handler": "get_revenue_analysis_by_imprint",
          "file": "revenue_analysis.py",
          "line": 628,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/revenue-analysis/account/{account_id}/product",
          "handler": "get_revenue_analysis_by_product",
          "file": "revenue_analysis.py",
          "line": 42,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/revenue-analysis/account/{account_id}/recording",
          "handler": "get_revenue_analysis_by_recording",
          "file": "revenue_analysis.py",
          "line": 113,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/revenue-analysis/account/{account_id}/statement-period",
          "handler": "get_revenue_analysis_by_statement_period",
          "file": "revenue_analysis.py",
          "line": 162,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/revenue-analysis/account/{account_id}/statement_period/{statement_period}",
          "handler": "get_latest_revenue_by_account_statement_period",
          "file": "revenue_analysis.py",
          "line": 727,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/revenue-analysis/account/{account_id}/statement_period/{statement_period}/all-time-revenue",
          "handler": "get_all_time_revenue_account_id",
          "file": "revenue_analysis.py",
          "line": 699,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/revenue-analysis/account/{account_id}/store",
          "handler": "get_revenue_analysis_by_store",
          "file": "revenue_analysis.py",
          "line": 224,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/revenue-analysis/account/{account_id}/subaccount",
          "handler": "get_revenue_analysis_by_subaccount",
          "file": "revenue_analysis.py",
          "line": 575,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/revenue-analysis/account/{account_id}/track",
          "handler": "get_revenue_analysis_by_track",
          "file": "revenue_analysis.py",
          "line": 433,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/revenue-analysis/account/{account_id}/transaction-type",
          "handler": "get_revenue_analysis_by_transaction_type",
          "file": "revenue_analysis.py",
          "line": 362,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-attachment/account/{account_id}",
          "handler": "get_statement_attachments_by_account",
          "file": "statement_attachment.py",
          "line": 79,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-attachment/account/{account_id}/statement-period/{statement_period_id}",
          "handler": "get_statement_attachments",
          "file": "statement_attachment.py",
          "line": 55,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/statement-attachment/account/{account_id}/statement-period/{statement_period_id}/collection-summary",
          "handler": "create_statement_period_collection_summary_documents",
          "file": "statement_attachment.py",
          "line": 130,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/statement-attachment/account/{account_id}/statement-period/{statement_period_id}/internal-attachment",
          "handler": "create_internal_attachment",
          "file": "statement_attachment.py",
          "line": 231,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/statement-attachment/account/{account_id}/statement-period/{statement_period_id}/legacy-revenue-report",
          "handler": "create_legacy_revenue_report",
          "file": "statement_attachment.py",
          "line": 160,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/statement-attachment/account/{account_id}/statement-period/{statement_period_id}/revenue-detail",
          "handler": "create_revenue_detail_reports",
          "file": "statement_attachment.py",
          "line": 101,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/statement-attachment/statement-period/{statement_period_id}",
          "handler": "create_statement_attachments",
          "file": "statement_attachment.py",
          "line": 211,
          "status": "unused",
          "dead_functions": [
            "logic/statement_attachment.py::create_statement_attachments"
          ]
        },
        {
          "method": "POST",
          "path": "/statement-attachment/statement-period/{statement_period_id}/generate",
          "handler": "generate_statement_attachments",
          "file": "statement_attachment.py",
          "line": 322,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/statement-attachment/statement-period/{statement_period_id}/regenerate",
          "handler": "regenerate_statement_attachments",
          "file": "statement_attachment.py",
          "line": 262,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/statement-attachment/{statement_attachment_id}",
          "handler": "delete_statement_attachment",
          "file": "statement_attachment.py",
          "line": 288,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-attachment/{statement_attachment_id}",
          "handler": "get_statement_attachment",
          "file": "statement_attachment.py",
          "line": 33,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/statement-attachment/{statement_attachment_id}",
          "handler": "update_statement_attachment",
          "file": "statement_attachment.py",
          "line": 301,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-attachment/{statement_attachment_id}/download",
          "handler": "get_invoice_presigned_url",
          "file": "statement_attachment.py",
          "line": 344,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-reserves/account/{account_id}/statement-period/{statement_period_id}",
          "handler": "get_statement_reserves_by_account_id",
          "file": "statement_reserves.py",
          "line": 15,
          "status": "unused",
          "dead_functions": [
            "logic/statement_reserves.py::get_statement_reserves"
          ]
        }
      ],
      "dead_functions": [
        "logic/account.py::get_projects_by_account_id",
        "logic/report_custom.py::regenerate_custom_reports",
        "logic/statement_attachment.py::create_statement_attachments",
        "logic/statement_reserves.py::get_statement_reserves"
      ]
    },
    {
      "name": "ows-notifications",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-notifications.git",
      "team": "osp",
      "endpoints": {
        "total": 51,
        "used": {
          "count": 45,
          "percent": 88.2
        },
        "unused": {
          "count": 6,
          "percent": 11.8
        }
      },
      "functions": {
        "total": 59,
        "dead": 9,
        "dead_percent": 15.3
      },
      "details": [
        {
          "method": "POST",
          "path": "/activity",
          "handler": "add_activity",
          "file": "handlers.py",
          "line": 141,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/activity/playlist_placement",
          "handler": "add_playlist_placement_handler",
          "file": "handlers.py",
          "line": 515,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/activity/product_approval",
          "handler": "add_product_approval_activity",
          "file": "handlers.py",
          "line": 257,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/activity/product_rejection",
          "handler": "add_product_rejection_activity",
          "file": "handlers.py",
          "line": 221,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/activity/social_spike",
          "handler": "add_particpant_activity_handler",
          "file": "handlers.py",
          "line": 452,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/activity/streams_updated",
          "handler": "add_streams_updated_handler",
          "file": "handlers.py",
          "line": 552,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/activity/trending_track",
          "handler": "add_trending_track_handler",
          "file": "handlers.py",
          "line": 481,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/audience/ad-reporting-sync-completed",
          "handler": "audience_ad_reporting_sync_completed",
          "file": "handlers.py",
          "line": 1465,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/audience/audience-deleted-fans-report",
          "handler": "audience_deleted_fans_report",
          "file": "handlers.py",
          "line": 1452,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/audience/audience-file-exported",
          "handler": "audience_file_exported",
          "file": "handlers.py",
          "line": 1439,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/audience/shopify-store-sync-completed",
          "handler": "audience_shopify_store_sync_completed",
          "file": "handlers.py",
          "line": 1416,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk/ingest/begin",
          "handler": "bulk_begin",
          "file": "handlers.py",
          "line": 1538,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk/ingest/failure",
          "handler": "bulk_failure",
          "file": "handlers.py",
          "line": 1580,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk/ingest/product/failure",
          "handler": "bulk_product_failure",
          "file": "handlers.py",
          "line": 1567,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk/ingest/success",
          "handler": "bulk_success",
          "file": "handlers.py",
          "line": 1551,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/collaborators/bulk-statement-period-closed-email",
          "handler": "collaborators_bulk_statement_period_closed_handler",
          "file": "handlers.py",
          "line": 576,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/content-review/de-escalate",
          "handler": "content_review_de_escalate",
          "file": "handlers.py",
          "line": 1359,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/content-review/escalate",
          "handler": "content_review_escalate",
          "file": "handlers.py",
          "line": 1320,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/content-review/failure-notify",
          "handler": "content_review_failed",
          "file": "handlers.py",
          "line": 1278,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/content-review/notify-escalation-complete",
          "handler": "content_review_escalation_completed",
          "file": "handlers.py",
          "line": 1299,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/distribution/scheduled_update_failed",
          "handler": "scheduled_update_failed",
          "file": "handlers.py",
          "line": 1490,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/distribution/scheduled_update_processed",
          "handler": "scheduled_update_processed",
          "file": "handlers.py",
          "line": 1478,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/distribution/scheduled_update_warning",
          "handler": "scheduled_update_warning",
          "file": "handlers.py",
          "line": 1502,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/distribution/ws_scheduled_update_failed",
          "handler": "ws_scheduled_update_failed",
          "file": "handlers.py",
          "line": 1514,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/distribution/ws_scheduled_update_processed",
          "handler": "ws_scheduled_update_processed",
          "file": "handlers.py",
          "line": 1526,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/feed/subscribers",
          "handler": "get_feed_subscribers",
          "file": "handlers.py",
          "line": 431,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 1594,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/identity/<string:identity_id>/report/participant-data",
          "handler": "report_participant_data",
          "file": "handlers.py",
          "line": 1202,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/identity/<string:identity_id>/report/sound-recording-data",
          "handler": "report_sound_recording_data",
          "file": "handlers.py",
          "line": 1218,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/identity/<string:identity_id>/subscriptions",
          "handler": "get_all_subscriptions_for_identity",
          "file": "handlers.py",
          "line": 1083,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/identity/<string:identity_id>/subscriptions/<string:subscription_name>",
          "handler": "edit_subscription_for_identity",
          "file": "handlers.py",
          "line": 1133,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/identity/verify",
          "handler": "verify_identity",
          "file": "handlers.py",
          "line": 1067,
          "status": "unused",
          "dead_functions": [
            "logic/identity_verification.py::verify"
          ]
        },
        {
          "method": "POST",
          "path": "/notifications/subscribe",
          "handler": "subscribe_by_notification_type",
          "file": "handlers.py",
          "line": 927,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/notifications/unsubscribe",
          "handler": "unsubscribe_by_notification_type",
          "file": "handlers.py",
          "line": 879,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/nr-delivery-order/<string:order_id>/completed",
          "handler": "nr_delivery_order_complete",
          "file": "handlers.py",
          "line": 1233,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/nr-delivery-order/<string:order_id>/failed",
          "handler": "nr_delivery_order_failed",
          "file": "handlers.py",
          "line": 1244,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/nr-ownership-delivery-order/<string:order_id>/completed",
          "handler": "nr_ownership_delivery_order_complete",
          "file": "handlers.py",
          "line": 1255,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/nr-ownership-delivery-order/<string:order_id>/failed",
          "handler": "nr_ownership_delivery_order_failed",
          "file": "handlers.py",
          "line": 1266,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/physical-delivery-order/<string:order_id>/completed",
          "handler": "phys_delivery_order_complete",
          "file": "handlers.py",
          "line": 1393,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/physical-delivery-order/<string:order_id>/failed",
          "handler": "phys_delivery_order_failed",
          "file": "handlers.py",
          "line": 1404,
          "status": "unused",
          "dead_functions": [
            "logic/phys_delivery_email.py::order_failed"
          ]
        },
        {
          "method": "POST",
          "path": "/private/permissions/updated",
          "handler": "permissions_updated",
          "file": "private_handlers.py",
          "line": 33,
          "status": "unused",
          "dead_functions": [
            "logic/permissions.py::permissions_updated",
            "models/ows_users.py::get_applications",
            "models/ows_users.py::get_organization_info",
            "models/resource.py::get_resource_name"
          ]
        },
        {
          "method": "GET",
          "path": "/profile/profile_id/<string:profile_id>/profile_type/<string:profile_type>/notifications",
          "handler": "get_all_subscriptions_for_profile",
          "file": "handlers.py",
          "line": 985,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/subscribe",
          "handler": "subscribe",
          "file": "handlers.py",
          "line": 279,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/subscription/<string:entity_type>",
          "handler": "create_subscription_handler",
          "file": "handlers.py",
          "line": 589,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/subscription/<string:entity_type>/<string:entity_id>/relationship/<string:relationship>",
          "handler": "delete_subscription_handler",
          "file": "handlers.py",
          "line": 804,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/subscription/<string:entity_type>/<string:entity_id>/relationship/<string:relationship>",
          "handler": "get_subscription_handler",
          "file": "handlers.py",
          "line": 665,
          "status": "unused",
          "dead_functions": [
            "logic/subscriptions.py::has_subscription"
          ]
        },
        {
          "method": "GET",
          "path": "/subscription/<string:entity_type>/relationship/<string:relationship>",
          "handler": "list_subscription_handler",
          "file": "handlers.py",
          "line": 719,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/subscriptions/all",
          "handler": "get_all_subscriptions",
          "file": "handlers.py",
          "line": 1031,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/unsubscribe",
          "handler": "unsubscribe",
          "file": "handlers.py",
          "line": 335,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/user/notifications",
          "handler": "get_user_notifications",
          "file": "handlers.py",
          "line": 377,
          "status": "unused",
          "dead_functions": [
            "logic/stream.py::get_user_notifications",
            "models/stream.py::get_user_notifications"
          ]
        },
        {
          "method": "GET",
          "path": "/user/subscriptions",
          "handler": "get_user_subscriptions",
          "file": "handlers.py",
          "line": 404,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/identity_verification.py::verify",
        "logic/permissions.py::permissions_updated",
        "logic/phys_delivery_email.py::order_failed",
        "logic/stream.py::get_user_notifications",
        "logic/subscriptions.py::has_subscription",
        "models/ows_users.py::get_applications",
        "models/ows_users.py::get_organization_info",
        "models/resource.py::get_resource_name",
        "models/stream.py::get_user_notifications"
      ]
    },
    {
      "name": "ows-participant",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-participant.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 29,
        "used": {
          "count": 11,
          "percent": 37.9
        },
        "unused": {
          "count": 18,
          "percent": 62.1
        }
      },
      "functions": {
        "total": 21,
        "dead": 18,
        "dead_percent": 85.7
      },
      "details": [
        {
          "method": "PUT",
          "path": "/artist-info/<int:artist_id>/rename",
          "handler": "update_artist_name",
          "file": "label_participant.py",
          "line": 217,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artist-links",
          "handler": "get_artist_links",
          "file": "artist_links.py",
          "line": 12,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/artist-links",
          "handler": "update_artist_links",
          "file": "artist_links.py",
          "line": 26,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contact",
          "handler": "contact",
          "file": "label_participant.py",
          "line": 172,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "base.py",
          "line": 96,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/label-participant/<string:label_participant_uuid>/product-tracks",
          "handler": "get_products_and_tracks_for_label_participant",
          "file": "label_participant.py",
          "line": 268,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/label-participant/<string:label_participant_uuid>/rename",
          "handler": "update_label_participant_and_artist_name",
          "file": "label_participant.py",
          "line": 247,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/label-participant/merge",
          "handler": "merge_label_participants_and_artists",
          "file": "label_participant.py",
          "line": 283,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/label-participants",
          "handler": "create_label_participant",
          "file": "label_participant.py",
          "line": 89,
          "status": "unused",
          "dead_functions": [
            "logic/label_participant.py::create_label_participant",
            "models/base.py::create_node"
          ]
        },
        {
          "method": "GET",
          "path": "/label-participants/<int:label_participant_id>",
          "handler": "get_label_participant_by_id",
          "file": "label_participant.py",
          "line": 37,
          "status": "unused",
          "dead_functions": [
            "logic/label_participant.py::get_label_participant_by_id",
            "models/base.py::get_node"
          ]
        },
        {
          "method": "DELETE",
          "path": "/label-participants/relationship",
          "handler": "delete_relationship",
          "file": "label_participant.py",
          "line": 151,
          "status": "unused",
          "dead_functions": [
            "logic/label_participant.py::delete_relationship",
            "models/base.py::delete_relationship"
          ]
        },
        {
          "method": "POST",
          "path": "/label-participants/relationship",
          "handler": "create_relationship",
          "file": "label_participant.py",
          "line": 109,
          "status": "unused",
          "dead_functions": [
            "logic/label_participant.py::create_relationship",
            "models/base.py::create_relationship"
          ]
        },
        {
          "method": "PUT",
          "path": "/label-participants/relationship",
          "handler": "update_relationship",
          "file": "label_participant.py",
          "line": 130,
          "status": "unused",
          "dead_functions": [
            "logic/label_participant.py::update_relationship",
            "models/base.py::update_relationship"
          ]
        },
        {
          "method": "GET",
          "path": "/label-participants/search",
          "handler": "search_label_participant",
          "file": "label_participant.py",
          "line": 52,
          "status": "unused",
          "dead_functions": [
            "logic/label_participant.py::search_label_participant"
          ]
        },
        {
          "method": "POST",
          "path": "/lookup/label-participants/uuids/tenant-hierarchy/",
          "handler": "lookup_label_participants_by_uuids",
          "file": "label_participant.py",
          "line": 232,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/network-participants",
          "handler": "create_network_participant",
          "file": "network_participant.py",
          "line": 76,
          "status": "unused",
          "dead_functions": [
            "logic/network_participant.py::create_network_participant",
            "models/base.py::create_node"
          ]
        },
        {
          "method": "GET",
          "path": "/network-participants/<int:network_participant_id>",
          "handler": "get_network_participant_by_id",
          "file": "network_participant.py",
          "line": 61,
          "status": "unused",
          "dead_functions": [
            "logic/network_participant.py::get_network_participant_by_id",
            "models/base.py::get_node"
          ]
        },
        {
          "method": "PUT",
          "path": "/network-participants/<int:network_participant_id>/network/<int:network_id>",
          "handler": "update_network_participant",
          "file": "network_participant.py",
          "line": 102,
          "status": "unused",
          "dead_functions": [
            "logic/network_participant.py::update_network_participant",
            "models/base.py::update_node"
          ]
        },
        {
          "method": "GET",
          "path": "/network-participants/search",
          "handler": "search_network_participant",
          "file": "network_participant.py",
          "line": 25,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/participants",
          "handler": "create_label_participant",
          "file": "label_participant.py",
          "line": 89,
          "status": "unused",
          "dead_functions": [
            "logic/label_participant.py::create_label_participant",
            "models/base.py::create_node"
          ]
        },
        {
          "method": "GET",
          "path": "/participants/<int:label_participant_id>",
          "handler": "get_label_participant_by_id",
          "file": "label_participant.py",
          "line": 37,
          "status": "unused",
          "dead_functions": [
            "logic/label_participant.py::get_label_participant_by_id",
            "models/base.py::get_node"
          ]
        },
        {
          "method": "GET",
          "path": "/participants/search",
          "handler": "search_label_participant",
          "file": "label_participant.py",
          "line": 52,
          "status": "unused",
          "dead_functions": [
            "logic/label_participant.py::search_label_participant"
          ]
        },
        {
          "method": "GET",
          "path": "/products/<int:product_id>/label-participants",
          "handler": "find_label_participant_by_product_id",
          "file": "product.py",
          "line": 18,
          "status": "unused",
          "dead_functions": [
            "logic/label_participant.py::get_label_participants_by_related_product_id",
            "models/base.py::get_nodes_and_relationship"
          ]
        },
        {
          "method": "GET",
          "path": "/products/<int:product_id>/participants",
          "handler": "find_label_participant_by_product_id",
          "file": "product.py",
          "line": 18,
          "status": "unused",
          "dead_functions": [
            "logic/label_participant.py::get_label_participants_by_related_product_id",
            "models/base.py::get_nodes_and_relationship"
          ]
        },
        {
          "method": "GET",
          "path": "/service/<service>/artist/<artist_id>",
          "handler": "participant_artist",
          "file": "service.py",
          "line": 63,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/service/<service>/artist/dataloader",
          "handler": "participant_artist_dataloader",
          "file": "service.py",
          "line": 91,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/service/<service>/search",
          "handler": "participant_search",
          "file": "service.py",
          "line": 20,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tracks/<int:track_id>/label-participants",
          "handler": "find_label_participant_by_track_id",
          "file": "track.py",
          "line": 10,
          "status": "unused",
          "dead_functions": [
            "logic/label_participant.py::get_label_participants_by_related_track_id"
          ]
        },
        {
          "method": "GET",
          "path": "/tracks/<int:track_id>/participants",
          "handler": "find_label_participant_by_track_id",
          "file": "track.py",
          "line": 10,
          "status": "unused",
          "dead_functions": [
            "logic/label_participant.py::get_label_participants_by_related_track_id"
          ]
        }
      ],
      "dead_functions": [
        "logic/label_participant.py::create_label_participant",
        "logic/label_participant.py::create_relationship",
        "logic/label_participant.py::delete_relationship",
        "logic/label_participant.py::get_label_participant_by_id",
        "logic/label_participant.py::get_label_participants_by_related_product_id",
        "logic/label_participant.py::get_label_participants_by_related_track_id",
        "logic/label_participant.py::search_label_participant",
        "logic/label_participant.py::update_relationship",
        "logic/network_participant.py::create_network_participant",
        "logic/network_participant.py::get_network_participant_by_id",
        "logic/network_participant.py::update_network_participant",
        "models/base.py::create_node",
        "models/base.py::create_relationship",
        "models/base.py::delete_relationship",
        "models/base.py::get_node",
        "models/base.py::get_nodes_and_relationship",
        "models/base.py::update_node",
        "models/base.py::update_relationship"
      ]
    },
    {
      "name": "ows-payee",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-payee.git",
      "team": "tax-and-payments",
      "endpoints": {
        "total": 50,
        "used": {
          "count": 38,
          "percent": 76.0
        },
        "unused": {
          "count": 12,
          "percent": 24.0
        }
      },
      "functions": {
        "total": 33,
        "dead": 5,
        "dead_percent": 15.2
      },
      "details": [
        {
          "method": "DELETE",
          "path": "/account-payee/<int:account_payee_id>/bank-details",
          "handler": "delete_payee_bank_details",
          "file": "bank_details.py",
          "line": 95,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/bank-details",
          "handler": "get_payee_bank_details",
          "file": "bank_details.py",
          "line": 60,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payee/<int:account_payee_id>/bank-details",
          "handler": "save_payee_bank_details",
          "file": "bank_details.py",
          "line": 147,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/knr-details",
          "handler": "get_payee_knr_details",
          "file": "tax_details.py",
          "line": 314,
          "status": "unused",
          "dead_functions": [
            "models/knr_details/KnrDetailsDocument.py::build_response"
          ]
        },
        {
          "method": "POST",
          "path": "/account-payee/<int:account_payee_id>/knr-details",
          "handler": "create_payee_knr_details",
          "file": "tax_details.py",
          "line": 345,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/knr-details-history",
          "handler": "get_payee_knr_details_history",
          "file": "tax_details.py",
          "line": 395,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/account-payee/<int:account_payee_id>/kyc-notification",
          "handler": "delete_payee_kyc_notifications",
          "file": "payee_kyc_notification.py",
          "line": 138,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/kyc-notification",
          "handler": "get_payee_latest_kyc_notification",
          "file": "payee_kyc_notification.py",
          "line": 55,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payee/<int:account_payee_id>/kyc-notification",
          "handler": "create_payee_kyc_notification",
          "file": "payee_kyc_notification.py",
          "line": 103,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payee/<int:account_payee_id>/move-payoneer-program",
          "handler": "move_payoneer_program",
          "file": "payoneer.py",
          "line": 197,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/payee-payoneer-details",
          "handler": "get_payee_payoneer_details",
          "file": "payoneer.py",
          "line": 123,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/account-payee/<int:account_payee_id>/payoneer-account",
          "handler": "release_payee_from_payoneer",
          "file": "payoneer.py",
          "line": 174,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/payoneer-status",
          "handler": "get_payoneer_account_status",
          "file": "payoneer.py",
          "line": 87,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/program/<int:program_id>/payoneer-status",
          "handler": "get_payee_status",
          "file": "payoneer.py",
          "line": 209,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payee/<int:account_payee_id>/register-whitelabel-profile",
          "handler": "register_whitelabel_profile",
          "file": "bank_details.py",
          "line": 171,
          "status": "unused",
          "dead_functions": [
            "logic/bank_details.py::register_whitelabel_profile"
          ]
        },
        {
          "method": "POST",
          "path": "/account-payee/<int:account_payee_id>/resync-payment-readiness",
          "handler": "resync_payment_readiness_by_account_payee_id",
          "file": "tax_details.py",
          "line": 471,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payee/<int:account_payee_id>/sync-whitelabel-profile",
          "handler": "sync_payee_bank_details",
          "file": "bank_details.py",
          "line": 124,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/tax-details",
          "handler": "tax_details",
          "file": "tax_details.py",
          "line": 133,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payee/<int:account_payee_id>/tax-details",
          "handler": "PayeeTaxDetailsCreateView",
          "file": "tax_details.py",
          "line": 157,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/tax-details-history",
          "handler": "get_payee_tax_details_history",
          "file": "tax_details.py",
          "line": 374,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/tax-details/receipt",
          "handler": "generate_receipt",
          "file": "tax_details.py",
          "line": 167,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/tax-details/receipt-url",
          "handler": "generate_receipt_url",
          "file": "tax_details.py",
          "line": 187,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/tax-details/validate",
          "handler": "validate_tax_details",
          "file": "tax_details.py",
          "line": 514,
          "status": "unused",
          "dead_functions": [
            "models/tax_details/TaxDetailsDocument.py::build_response"
          ]
        },
        {
          "method": "POST",
          "path": "/account-payee/<int:account_payee_id>/tax-form-info",
          "handler": "post_tax_form",
          "file": "tax_form.py",
          "line": 124,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/account-payee/<int:account_payee_id>/tax-reset",
          "handler": "tax_reset",
          "file": "tax_reset.py",
          "line": 41,
          "status": "unused",
          "dead_functions": [
            "logic/tax_reset.py::reset_by_account_payee_id",
            "models/reports_tax_info/ReportsTaxInfo.py::build"
          ]
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/validate-session-id",
          "handler": "validate_session_id",
          "file": "tax_details.py",
          "line": 218,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/wform",
          "handler": "get_payee_wform",
          "file": "tax_details.py",
          "line": 274,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-payee/<int:account_payee_id>/whitelabel/payee-registration/format",
          "handler": "get_payee_whitelabel_registration_format",
          "file": "payoneer.py",
          "line": 242,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payee/<int:account_payee_id>/withholding-tax-override",
          "handler": "post_tax_withholding_override",
          "file": "tax_withholding_override.py",
          "line": 72,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payee/knr-details-dataloader",
          "handler": "dataload_knr_details_revisions",
          "file": "tax_details.py",
          "line": 449,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payee/tax-details-dataloader",
          "handler": "dataload_tax_details_revisions",
          "file": "tax_details.py",
          "line": 428,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/account-payee/tax-form-info/<int:tax_form_info_id>",
          "handler": "delete_tax_form",
          "file": "tax_form.py",
          "line": 156,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payee/tax-form-info/bulk",
          "handler": "get_tax_form_info",
          "file": "tax_form.py",
          "line": 58,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payee/tax-form-info/details/bulk",
          "handler": "get_tax_form_details",
          "file": "tax_form.py",
          "line": 94,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account-payee/withholding-tax-override/dataloader",
          "handler": "dataload_tax_withholding_override",
          "file": "tax_withholding_override.py",
          "line": 43,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "base.py",
          "line": 11,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payee-collaborator",
          "handler": "create_payee_collaborator",
          "file": "payee.py",
          "line": 77,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payee-collaborators/bulk",
          "handler": "get_payee_collaborators_bulk",
          "file": "payee.py",
          "line": 98,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payee/<int:payee_id>/bank-details",
          "handler": "get_payee_bank_details",
          "file": "bank_details.py",
          "line": 60,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/payee/<int:payee_id>/kyc-notification",
          "handler": "delete_payee_kyc_notifications",
          "file": "payee_kyc_notification.py",
          "line": 138,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payee/<int:payee_id>/kyc-notification",
          "handler": "create_payee_kyc_notification",
          "file": "payee_kyc_notification.py",
          "line": 103,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/payee/<int:payee_id>/payoneer-account",
          "handler": "release_payee_from_payoneer",
          "file": "payoneer.py",
          "line": 174,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payee/<int:payee_id>/sync-whitelabel-profile",
          "handler": "sync_payee_bank_details",
          "file": "bank_details.py",
          "line": 124,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payee/<int:payee_id>/whitelabel/payee-registration/format",
          "handler": "get_payee_whitelabel_registration_format",
          "file": "payoneer.py",
          "line": 242,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payee/dataloader",
          "handler": "dataload_payees",
          "file": "payee.py",
          "line": 52,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payee/kyc-notification/dataloader",
          "handler": "get_payee_latest_kyc_notification_dataloader",
          "file": "payee_kyc_notification.py",
          "line": 74,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payees/bulk",
          "handler": "get_payees_bulk",
          "file": "payee.py",
          "line": 32,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payoneer/programs/<int:program_id>/mass-payouts",
          "handler": "create_mass_payouts",
          "file": "payoneer.py",
          "line": 77,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payoneer/registration-link",
          "handler": "create_registration_link",
          "file": "payoneer.py",
          "line": 50,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payoneer_status",
          "handler": "get_payoneer_status",
          "file": "payoneer.py",
          "line": 263,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/bank_details.py::register_whitelabel_profile",
        "logic/tax_reset.py::reset_by_account_payee_id",
        "models/knr_details/KnrDetailsDocument.py::build_response",
        "models/reports_tax_info/ReportsTaxInfo.py::build",
        "models/tax_details/TaxDetailsDocument.py::build_response"
      ]
    },
    {
      "name": "ows-payment",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-payment.git",
      "team": "tax-and-payments",
      "endpoints": {
        "total": 82,
        "used": {
          "count": 59,
          "percent": 72.0
        },
        "unused": {
          "count": 23,
          "percent": 28.0
        }
      },
      "functions": {
        "total": 63,
        "dead": 33,
        "dead_percent": 52.4
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "base.py",
          "line": 11,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/payment-allocations/flowthrough",
          "handler": "bulk_delete_payment_allocations_flowthrough",
          "file": "payment_allocation.py",
          "line": 79,
          "status": "unused",
          "dead_functions": [
            "logic/payment_allocation.py::bulk_delete_payment_allocations_flowthrough",
            "models/payment_allocation/PaymentAllocationFlowthrough.py::soft_delete_by_ids"
          ]
        },
        {
          "method": "PUT",
          "path": "/payment-allocations/flowthrough",
          "handler": "bulk_update_payment_allocations_flowthrough",
          "file": "payment_allocation.py",
          "line": 60,
          "status": "unused",
          "dead_functions": [
            "logic/payment_allocation.py::bulk_update_payment_allocations_flowthrough",
            "models/payment_allocation/PaymentAllocationFlowthrough.py::get_active_by_ids"
          ]
        },
        {
          "method": "POST",
          "path": "/payment-allocations/flowthrough/bulk",
          "handler": "get_flowthrough_allocations_bulk",
          "file": "payment_allocation.py",
          "line": 36,
          "status": "unused",
          "dead_functions": [
            "logic/payment_allocation.py::get_flowthrough_allocations_bulk",
            "models/payment_allocation/PaymentAllocationFlowthrough.py::get_filtered_items"
          ]
        },
        {
          "method": "DELETE",
          "path": "/payment-group-payment-account/<int:object_id>/",
          "handler": "PaymentGroupPaymentAccountItemView",
          "file": "payment_group_payment_account.py",
          "line": 63,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-group-payment-account/<int:object_id>/",
          "handler": "PaymentGroupPaymentAccountItemView",
          "file": "payment_group_payment_account.py",
          "line": 63,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/payment-group-payment-account/<int:object_id>/",
          "handler": "PaymentGroupPaymentAccountItemView",
          "file": "payment_group_payment_account.py",
          "line": 63,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-group-payment-account/last-payment/<int:account_id>",
          "handler": "get_last_posted_payment_by_account",
          "file": "payment_group_payment_account.py",
          "line": 81,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payment-group-payment-account/last-payment/bulk",
          "handler": "get_paginated_list_of_last_payment_by_filters",
          "file": "payment_group_payment_account.py",
          "line": 147,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payment-group-payment-account/payable-details/bulk",
          "handler": "get_payable_details_bulk",
          "file": "payment_group_payment_account.py",
          "line": 202,
          "status": "unused",
          "dead_functions": [
            "logic/worksheet_account_contract_payable_details.py::get_by_payment_group_payment_account_ids"
          ]
        },
        {
          "method": "GET",
          "path": "/payment-group-payment-account/pending-payment/<int:account_id>",
          "handler": "get_pending_payment_by_account",
          "file": "payment_group_payment_account.py",
          "line": 95,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payment-group-payment-account/search",
          "handler": "payments_search",
          "file": "payment_group_payment_account.py",
          "line": 174,
          "status": "unused",
          "dead_functions": [
            "logic/payment_group_payment_account.py::payments_search"
          ]
        },
        {
          "method": "POST",
          "path": "/payment-group-payment-batch-account/bulk/",
          "handler": "bulk_create_payment_group_payment_batch_account",
          "file": "payment_group_payment_batch_account.py",
          "line": 22,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payment-group-payment-batch/",
          "handler": "PaymentGroupPaymentBatchCreateView",
          "file": "payment_group_payment_batch.py",
          "line": 35,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-group-payment/",
          "handler": "get_payment_group_payment_list",
          "file": "payment_group_payment.py",
          "line": 104,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payment-group-payment/",
          "handler": "create_payment_group_payment",
          "file": "payment_group_payment.py",
          "line": 53,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/payment-group-payment/<int:object_id>/",
          "handler": "delete_payment_group_payment",
          "file": "payment_group_payment.py",
          "line": 86,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-group-payment/<int:object_id>/",
          "handler": "get_payment_group_payment",
          "file": "payment_group_payment.py",
          "line": 69,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-group-payment/<int:payment_group_payment_id>/accounts/",
          "handler": "get_payment_group_payment_accounts",
          "file": "payment_group_payment.py",
          "line": 189,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payment-group-payment/<int:payment_group_payment_id>/accounts/",
          "handler": "bulk_create_payment_group_payment_accounts",
          "file": "payment_group_payment.py",
          "line": 162,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-group-payment/<int:payment_group_payment_id>/accounts/pending/",
          "handler": "get_prior_payment_pending_accounts",
          "file": "payment_group_payment.py",
          "line": 277,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/payment-group-payment/<int:payment_group_payment_id>/irrevocable_revert",
          "handler": "irrevocable_revert_payment_group_payment",
          "file": "payment_group_payment.py",
          "line": 130,
          "status": "unused",
          "dead_functions": [
            "logic/payment_group_payment.py::irrevocable_revert_payment_group_payment",
            "models/payment_group_payment_account/PaymentGroupPaymentAccount.py::hard_delete_by_payment_group_payment",
            "models/payment_group_payment_account_detail/PaymentGroupPaymentAccountDetail.py::hard_delete_by_payment_group_payment",
            "models/report_payment_group_payment/ReportPaymentGroupPayment.py::hard_delete_by_payment_group_payment"
          ]
        },
        {
          "method": "GET",
          "path": "/payment-group-payment/<int:payment_group_payment_id>/overview",
          "handler": "get_payment_group_payment_overview",
          "file": "payment_group_payment.py",
          "line": 211,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-group-payment/<int:payment_group_payment_id>/payment-batches/",
          "handler": "get_payment_group_payment_batches",
          "file": "payment_group_payment.py",
          "line": 298,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-group-payment/<int:payment_group_payment_id>/payment-batches/<string:payment_batch_status>",
          "handler": "get_payment_group_payment_batches",
          "file": "payment_group_payment.py",
          "line": 298,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-group-payment/<int:payment_group_payment_id>/payment-status-overview/",
          "handler": "get_payment_status_overview",
          "file": "payment_group_payment.py",
          "line": 334,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-group-payment/<int:payment_group_payment_id>/program-currency-totals",
          "handler": "get_payment_group_payment_totals_per_program_id",
          "file": "payment_group_payment.py",
          "line": 251,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/payment-group-payment/<int:payment_group_payment_id>/report",
          "handler": "ReportPaymentGroupPaymentItemView",
          "file": "report_payment_group_payment.py",
          "line": 44,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-group-payment/<int:payment_group_payment_id>/reports",
          "handler": "get_reports_by_payment_group_payment",
          "file": "report_payment_group_payment.py",
          "line": 76,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payment-group-payment/overview/dataloader",
          "handler": "get_payment_group_payment_overview_dataloader",
          "file": "payment_group_payment.py",
          "line": 233,
          "status": "unused",
          "dead_functions": [
            "logic/payment_group_payment_account.py::get_totals_by_payment_group_payment_ids"
          ]
        },
        {
          "method": "POST",
          "path": "/payment-group-paymentpayment-status-overview/dataloader",
          "handler": "payment_status_overview_by_payment_group_payment_id_dataloader",
          "file": "payment_group_payment.py",
          "line": 359,
          "status": "unused",
          "dead_functions": [
            "logic/payment_group_payment.py::dataload_payment_status_overviews"
          ]
        },
        {
          "method": "POST",
          "path": "/payment-group/",
          "handler": "create_payment_group",
          "file": "payment_group.py",
          "line": 38,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-group/<int:object_id>",
          "handler": "get_payment_group",
          "file": "payment_group.py",
          "line": 52,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/payment-group/<int:object_id>",
          "handler": "update_payment_group",
          "file": "payment_group.py",
          "line": 90,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-group/reusable-groups/",
          "handler": "get_reusable_payment_groups",
          "file": "payment_group.py",
          "line": 69,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-minimums",
          "handler": "PaymentMinimumList",
          "file": "payment_minimum.py",
          "line": 45,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/payment-minimums",
          "handler": "bulk_update_minimums",
          "file": "payment_minimum.py",
          "line": 52,
          "status": "unused",
          "dead_functions": [
            "logic/payment_minimum.py::bulk_update_payment_minimums",
            "models/payment_minimum/PaymentMinimum.py::bulk_update",
            "models/payment_minimum/PaymentMinimum.py::get_all"
          ]
        },
        {
          "method": "GET",
          "path": "/payment-minimums/<string(length=3):currency_code>",
          "handler": "PaymentMinimumItem",
          "file": "payment_minimum.py",
          "line": 40,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment-minimums/by-currency/",
          "handler": "get_payment_minimums_by_currency",
          "file": "payment_minimum.py",
          "line": 63,
          "status": "unused",
          "dead_functions": [
            "logic/payment_minimum.py::get_payment_minimums_by_currency",
            "models/payment_minimum/PaymentMinimum.py::get_all_by_currency"
          ]
        },
        {
          "method": "POST",
          "path": "/payment/advance/<int:contract_advance_id>",
          "handler": "WorksheetPaymentContractAdvanceCreateView",
          "file": "worksheet_payment_contract_advance.py",
          "line": 125,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/payment/advance/worksheet/<int:object_id>",
          "handler": "WorksheetPaymentContractAdvanceItemView",
          "file": "worksheet_payment_contract_advance.py",
          "line": 132,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment/advance/worksheet/<int:object_id>",
          "handler": "WorksheetPaymentContractAdvanceItemView",
          "file": "worksheet_payment_contract_advance.py",
          "line": 132,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/payment/advance/worksheet/<int:object_id>",
          "handler": "WorksheetPaymentContractAdvanceItemView",
          "file": "worksheet_payment_contract_advance.py",
          "line": 132,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payment/advance/worksheet/dataloader",
          "handler": "WorksheetPaymentContractAdvanceDataloader",
          "file": "worksheet_payment_contract_advance.py",
          "line": 147,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payment/custom",
          "handler": "create_worksheet_payment_custom",
          "file": "worksheet_payment_custom.py",
          "line": 33,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/payment/custom/<int:worksheet_payment_custom_id>",
          "handler": "delete_worksheet_payment_custom",
          "file": "worksheet_payment_custom.py",
          "line": 102,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payment/custom/<int:worksheet_payment_custom_id>",
          "handler": "get_worksheet_payment_custom",
          "file": "worksheet_payment_custom.py",
          "line": 77,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/payments/advances",
          "handler": "WorksheetPaymentContractAdvanceListView",
          "file": "worksheet_payment_contract_advance.py",
          "line": 139,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/payments/custom/bulk",
          "handler": "get_worksheet_payment_custom_list",
          "file": "worksheet_payment_custom.py",
          "line": 52,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/reference-payment-type/dataloader",
          "handler": "reference_payment_type_dataloader",
          "file": "reference_payment_type.py",
          "line": 39,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-tax-withholding",
          "handler": "get_reference_tax_withholding",
          "file": "reference_tax_withholding.py",
          "line": 30,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/report-payment-group-payment/<int:object_id>",
          "handler": "ReportPaymentGroupPaymentItemView",
          "file": "report_payment_group_payment.py",
          "line": 51,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/report-payment-group-payment/<int:object_id>",
          "handler": "ReportPaymentGroupPaymentItemView",
          "file": "report_payment_group_payment.py",
          "line": 51,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/report-payment-group-payment/<int:report_payment_group_payment_id>/download",
          "handler": "download_report",
          "file": "report_payment_group_payment.py",
          "line": 63,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/report-payment/<int:report_payment_id>/",
          "handler": "get_report_payment",
          "file": "report_payment.py",
          "line": 80,
          "status": "unused",
          "dead_functions": [
            "logic/report_payment.py::get_report_payment",
            "models/report_payment/ReportPayment.py::get_by_id_or_error"
          ]
        },
        {
          "method": "GET",
          "path": "/report-payment/<int:report_payment_id>/download/",
          "handler": "get_download",
          "file": "report_payment.py",
          "line": 105,
          "status": "unused",
          "dead_functions": [
            "logic/report_payment.py::get_download",
            "models/report_payment/ReportPayment.py::get_by_id_or_error"
          ]
        },
        {
          "method": "GET",
          "path": "/reports/<target_type>/<int:target_id>/",
          "handler": "get_reports_by_target",
          "file": "report_payment.py",
          "line": 55,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/reports/<target_type>/<int:target_id>/",
          "handler": "create_or_update_report_payment",
          "file": "report_payment.py",
          "line": 31,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/tax-corrections/bulk/",
          "handler": "delete_worksheet_account_contract_payable_details",
          "file": "worksheet_tax_correction.py",
          "line": 109,
          "status": "unused",
          "dead_functions": [
            "logic/worksheet_tax_correction.py::delete_worksheet_tax_corrections",
            "models/WorksheetTaxCorrection.py::soft_delete_by_ids"
          ]
        },
        {
          "method": "POST",
          "path": "/tax-corrections/bulk/",
          "handler": "bulk_create_worksheet_tax_correction",
          "file": "worksheet_tax_correction.py",
          "line": 46,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/tax-corrections/vat/bulk/",
          "handler": "delete_tax_corrections_vat",
          "file": "worksheet_tax_correction_vat.py",
          "line": 107,
          "status": "unused",
          "dead_functions": [
            "logic/worksheet_tax_correction_vat.py::delete_worksheet_tax_corrections_vat",
            "models/WorksheetTaxCorrectionVAT.py::soft_delete_by_ids"
          ]
        },
        {
          "method": "POST",
          "path": "/tax-corrections/vat/bulk/",
          "handler": "bulk_create_worksheet_tax_correction_vat",
          "file": "worksheet_tax_correction_vat.py",
          "line": 42,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/worksheet-account-contract-closing-balance/by-payment-account-ids/dataloader",
          "handler": "worksheets_by_payment_account_ids_dataloader",
          "file": "worksheet_account_contract_closing_balance.py",
          "line": 120,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/worksheet-account-contract-closing-balance/event/<int:event_id>/bulk/",
          "handler": "bullk_delete_worksheet_account_contract_closing_balance",
          "file": "worksheet_account_contract_closing_balance.py",
          "line": 66,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/worksheet-account-contract-closing-balance/event/<int:event_id>/statement-period/<int:statement_period_id>/payment-entity/<int:payment_entity_id>/bulk/",
          "handler": "bulk_create_worksheet_account_contract_closing_balance",
          "file": "worksheet_account_contract_closing_balance.py",
          "line": 34,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/worksheet-account-contract-closing-balance/event/<int:event_id>/taxable-revenue/copy/",
          "handler": "bulk_copy_close_balances_to_taxable_revenues",
          "file": "worksheet_account_contract_closing_balance.py",
          "line": 137,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/worksheet-account-contract-closing-balance/statement-period/<int:statement_period_id>/",
          "handler": "get_worksheet_account_contract_closing_balance_by_statement_period_id",
          "file": "worksheet_account_contract_closing_balance.py",
          "line": 93,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/worksheet-account-contract-payable-details/event/<int:event_id>/",
          "handler": "bulk_delete_worksheet_account_contract_payable_details",
          "file": "worksheet_account_contract_payable_details.py",
          "line": 59,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/worksheet-account-contract-payable-details/event/<int:event_id>/statement-period/<int:statement_period_id>/bulk/",
          "handler": "bulk_create_worksheet_account_contract_payable_details",
          "file": "worksheet_account_contract_payable_details.py",
          "line": 32,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/worksheet-account-contract-payable-details/statement-period/<int:statement_period_id>/",
          "handler": "get_worksheet_account_contract_payable_details",
          "file": "worksheet_account_contract_payable_details.py",
          "line": 88,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/worksheet-account-contract-taxable-revenue/catchup",
          "handler": "get_catchup_taxable_revenue_list",
          "file": "worksheet_account_contract_taxable_revenue.py",
          "line": 129,
          "status": "unused",
          "dead_functions": [
            "logic/worksheet_account_contract_taxable_revenue.py::catchup_taxable_revenue"
          ]
        },
        {
          "method": "DELETE",
          "path": "/worksheet-account-contract-taxable-revenue/event/<int:event_id>/",
          "handler": "bulk_delete_worksheet_account_contract_taxable_revenue",
          "file": "worksheet_account_contract_taxable_revenue.py",
          "line": 71,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/worksheet-account-contract-taxable-revenue/event/<int:event_id>/bulk/",
          "handler": "bulk_create_worksheet_account_contract_taxable_revenue",
          "file": "worksheet_account_contract_taxable_revenue.py",
          "line": 48,
          "status": "unused",
          "dead_functions": [
            "logic/worksheet_account_contract_taxable_revenue.py::bulk_create"
          ]
        },
        {
          "method": "POST",
          "path": "/worksheet-account-contract-taxable-revenue/statement-period/<int:statement_period_id>/",
          "handler": "get_worksheet_account_contract_taxable_revenue_list",
          "file": "worksheet_account_contract_taxable_revenue.py",
          "line": 98,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/worksheet-payable-balance-after-tax/<int:worksheet_account_contract_payable_after_tax_id>/",
          "handler": "delete_worksheet_payable_balance_after_tax",
          "file": "worksheet_payable_balance_after_tax.py",
          "line": 159,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/worksheet-payable-balance-after-tax/<int:worksheet_account_contract_payable_after_tax_id>/",
          "handler": "get_worksheet_payable_balance_after_tax_detail",
          "file": "worksheet_payable_balance_after_tax.py",
          "line": 184,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/worksheet-payable-balance-after-tax/bulk",
          "handler": "bulk_update_worksheet_payable_balance_after_tax",
          "file": "worksheet_payable_balance_after_tax.py",
          "line": 212,
          "status": "unused",
          "dead_functions": [
            "logic/worksheet_payable_balance_after_tax.py::bulk_update_worksheet_payable_balance_after_tax",
            "models/worksheet_payable_balance_after_tax/WorksheetPayableBalanceAfterTax.py::bulk_update",
            "models/worksheet_payable_balance_after_tax/WorksheetPayableBalanceAfterTax.py::query_by_ids"
          ]
        },
        {
          "method": "GET",
          "path": "/worksheet-payable-balance-after-tax/event/<int:event_id>/",
          "handler": "get_worksheet_payable_balance_after_tax",
          "file": "worksheet_payable_balance_after_tax.py",
          "line": 99,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/worksheet-payable-balance-after-tax/event/<int:event_id>/bulk",
          "handler": "bulk_delete_worksheet_payable_balance_after_tax",
          "file": "worksheet_payable_balance_after_tax.py",
          "line": 77,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/worksheet-payable-balance-after-tax/event/<int:event_id>/overview/",
          "handler": "get_worksheet_payable_balance_after_tax_overview",
          "file": "worksheet_payable_balance_after_tax.py",
          "line": 137,
          "status": "unused",
          "dead_functions": [
            "logic/worksheet_payable_balance_after_tax.py::get_worksheet_payable_balance_after_tax_overview",
            "models/worksheet_payable_balance_after_tax/WorksheetPayableBalanceAfterTax.py::get_overview_by_event_id"
          ]
        },
        {
          "method": "POST",
          "path": "/worksheet-payable-balance-after-tax/event/<int:event_id>/statement-period/<int:statement_period_id>/bulk/",
          "handler": "bulk_create_worksheet_payable_balance_after_tax",
          "file": "worksheet_payable_balance_after_tax.py",
          "line": 47,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/worksheet-payable-balance-after-tax/statement-period/<int:statement_period_id>/",
          "handler": "get_worksheet_payable_balance_after_tax",
          "file": "worksheet_payable_balance_after_tax.py",
          "line": 99,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/payment_allocation.py::bulk_delete_payment_allocations_flowthrough",
        "logic/payment_allocation.py::bulk_update_payment_allocations_flowthrough",
        "logic/payment_allocation.py::get_flowthrough_allocations_bulk",
        "logic/payment_group_payment.py::dataload_payment_status_overviews",
        "logic/payment_group_payment.py::irrevocable_revert_payment_group_payment",
        "logic/payment_group_payment_account.py::get_totals_by_payment_group_payment_ids",
        "logic/payment_group_payment_account.py::payments_search",
        "logic/payment_minimum.py::bulk_update_payment_minimums",
        "logic/payment_minimum.py::get_payment_minimums_by_currency",
        "logic/report_payment.py::get_download",
        "logic/report_payment.py::get_report_payment",
        "logic/worksheet_account_contract_payable_details.py::get_by_payment_group_payment_account_ids",
        "logic/worksheet_account_contract_taxable_revenue.py::bulk_create",
        "logic/worksheet_account_contract_taxable_revenue.py::catchup_taxable_revenue",
        "logic/worksheet_payable_balance_after_tax.py::bulk_update_worksheet_payable_balance_after_tax",
        "logic/worksheet_payable_balance_after_tax.py::get_worksheet_payable_balance_after_tax_overview",
        "logic/worksheet_tax_correction.py::delete_worksheet_tax_corrections",
        "logic/worksheet_tax_correction_vat.py::delete_worksheet_tax_corrections_vat",
        "models/WorksheetTaxCorrection.py::soft_delete_by_ids",
        "models/WorksheetTaxCorrectionVAT.py::soft_delete_by_ids",
        "models/payment_allocation/PaymentAllocationFlowthrough.py::get_active_by_ids",
        "models/payment_allocation/PaymentAllocationFlowthrough.py::get_filtered_items",
        "models/payment_allocation/PaymentAllocationFlowthrough.py::soft_delete_by_ids",
        "models/payment_group_payment_account/PaymentGroupPaymentAccount.py::hard_delete_by_payment_group_payment",
        "models/payment_group_payment_account_detail/PaymentGroupPaymentAccountDetail.py::hard_delete_by_payment_group_payment",
        "models/payment_minimum/PaymentMinimum.py::bulk_update",
        "models/payment_minimum/PaymentMinimum.py::get_all",
        "models/payment_minimum/PaymentMinimum.py::get_all_by_currency",
        "models/report_payment/ReportPayment.py::get_by_id_or_error",
        "models/report_payment_group_payment/ReportPaymentGroupPayment.py::hard_delete_by_payment_group_payment",
        "models/worksheet_payable_balance_after_tax/WorksheetPayableBalanceAfterTax.py::bulk_update",
        "models/worksheet_payable_balance_after_tax/WorksheetPayableBalanceAfterTax.py::get_overview_by_event_id",
        "models/worksheet_payable_balance_after_tax/WorksheetPayableBalanceAfterTax.py::query_by_ids"
      ]
    },
    {
      "name": "ows-pdp",
      "framework": "fastapi",
      "repo_url": "https://github.com/theorchard/ows-pdp.git",
      "team": "permissions-platform",
      "endpoints": {
        "total": 23,
        "used": {
          "count": 12,
          "percent": 52.2
        },
        "unused": {
          "count": 11,
          "percent": 47.8
        }
      },
      "functions": {
        "total": 12,
        "dead": 3,
        "dead_percent": 25.0
      },
      "details": [
        {
          "method": "GET",
          "path": "",
          "handler": "health",
          "file": "infra.py",
          "line": 98,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "",
          "handler": "check_connectivity_splitio",
          "file": "infra.py",
          "line": 114,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "",
          "handler": "ows_permissions_my_adminable_resources",
          "file": "infra.py",
          "line": 143,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "",
          "handler": "redis_ping",
          "file": "infra.py",
          "line": 160,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "",
          "handler": "ows_account_test",
          "file": "infra.py",
          "line": 175,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "",
          "handler": "check_connectivity_cerbos",
          "file": "infra.py",
          "line": 262,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "",
          "handler": "id_to_uuid_exchange",
          "file": "infra.py",
          "line": 336,
          "status": "unused",
          "dead_functions": [
            "logic/infra.py::gather_id_to_uuid_exchange"
          ]
        },
        {
          "method": "POST",
          "path": "",
          "handler": "uuid_to_id_exchange",
          "file": "infra.py",
          "line": 355,
          "status": "unused",
          "dead_functions": [
            "logic/infra.py::gather_uuid_to_id_exchange"
          ]
        },
        {
          "method": "GET",
          "path": "/",
          "handler": "hello_world",
          "file": "infra.py",
          "line": 77,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/cache/bludgeon/",
          "handler": "cache_bludgeon",
          "file": "infra.py",
          "line": 245,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/cache/bust/",
          "handler": "cache_bust",
          "file": "infra.py",
          "line": 227,
          "status": "unused",
          "dead_functions": [
            "logic/infra.py::cache_bust"
          ]
        },
        {
          "method": "POST",
          "path": "/cache/list/",
          "handler": "cache_list",
          "file": "infra.py",
          "line": 209,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/identity/self/allowed-tenants/",
          "handler": "get_my_allowed_tenants",
          "file": "identity.py",
          "line": 242,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/identity/self/check/resource-type-actions/",
          "handler": "check_my_resource_type_actions",
          "file": "identity.py",
          "line": 178,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/identity/self/check/resources/",
          "handler": "check_my_resources",
          "file": "identity.py",
          "line": 67,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/identity/self/roles/",
          "handler": "get_my_roles",
          "file": "identity.py",
          "line": 131,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/identity/{identity_uuid}/check/resources/",
          "handler": "check_identity_resources",
          "file": "identity.py",
          "line": 580,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/identity/{identity_uuid}/deactivate/",
          "handler": "deactivate_all",
          "file": "identity.py",
          "line": 625,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/identity/{identity_uuid}/roles/",
          "handler": "get_roles_by_identity",
          "file": "identity.py",
          "line": 338,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/identity/{identity_uuid}/tenant/{tenant_uuid}/attach-and-detach/roles/",
          "handler": "attach_detach_roles_by_identity_tenant",
          "file": "identity.py",
          "line": 420,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/identity/{identity_uuid}/tenant/{tenant_uuid}/deactivate/",
          "handler": "deactivate_one",
          "file": "identity.py",
          "line": 492,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/infra/connectivity/ows-participant/",
          "handler": "ows_participant_test",
          "file": "infra.py",
          "line": 192,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/temp/infra/multi-tenant-proxy/accounts/",
          "handler": "multi_tenant_proxy_test",
          "file": "temp.py",
          "line": 27,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/infra.py::cache_bust",
        "logic/infra.py::gather_id_to_uuid_exchange",
        "logic/infra.py::gather_uuid_to_id_exchange"
      ]
    },
    {
      "name": "ows-permissions",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-permissions.git",
      "team": "accounts-platform",
      "endpoints": {
        "total": 36,
        "used": {
          "count": 23,
          "percent": 63.9
        },
        "unused": {
          "count": 13,
          "percent": 36.1
        }
      },
      "functions": {
        "total": 44,
        "dead": 17,
        "dead_percent": 38.6
      },
      "details": [
        {
          "method": "GET",
          "path": "/",
          "handler": "hello_world",
          "file": "handlers.py",
          "line": 45,
          "status": "unused",
          "dead_functions": [
            "logic/hello.py::say_hello"
          ]
        },
        {
          "method": "GET",
          "path": "/<username>",
          "handler": "hello_world_username",
          "file": "handlers.py",
          "line": 52,
          "status": "unused",
          "dead_functions": [
            "logic/hello.py::say_hello"
          ]
        },
        {
          "method": "PATCH",
          "path": "/activate/identity/<identity_id>",
          "handler": "activate_user",
          "file": "handlers.py",
          "line": 185,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/admin/profile-type/<profile_type>/profile/<int:profile_id>/resource/<resource_type>",
          "handler": "get_resources_for_profile",
          "file": "handlers.py",
          "line": 107,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/admin/profile-type/<profile_type>/profile/<profile_uuid>/resource/<resource_type>",
          "handler": "get_resources_for_profile",
          "file": "handlers.py",
          "line": 107,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/admin/profile/<profile_uuid>/resource/<resource_type>",
          "handler": "get_resources_for_profile",
          "file": "handlers.py",
          "line": 107,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/associated-labels/<resource_type>/<int:artist_id>",
          "handler": "get_labels_for_artist_id",
          "file": "handlers.py",
          "line": 144,
          "status": "unused",
          "dead_functions": [
            "logic/resource.py::get_labels_for_artist_id",
            "models/label.py::get_labels_for_artist_id"
          ]
        },
        {
          "method": "DELETE",
          "path": "/deactivate/identity/<identity_id>",
          "handler": "deactivate_user",
          "file": "handlers.py",
          "line": 158,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/e2e/resource/<resource_type>/<int:resource_id>",
          "handler": "delete_resource",
          "file": "handlers.py",
          "line": 320,
          "status": "unused",
          "dead_functions": [
            "logic/resource.py::delete_resource",
            "models/resource.py::delete_node"
          ]
        },
        {
          "method": "POST",
          "path": "/e2e/resource/<resource_type>/<int:resource_id>",
          "handler": "create_resource",
          "file": "handlers.py",
          "line": 303,
          "status": "unused",
          "dead_functions": [
            "logic/resource.py::create_resource",
            "models/resource.py::create_node"
          ]
        },
        {
          "method": "GET",
          "path": "/e2e/resource/<resource_type>/<resource_id>",
          "handler": "get_resources",
          "file": "handlers.py",
          "line": 291,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 62,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/identity/<identity_id>/direct-access/resources/<resource_type>",
          "handler": "get_user_resources_for_admin",
          "file": "handlers.py",
          "line": 584,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/identity/<identity_id>/edit-resources-profiles",
          "handler": "edit_identity_profiles",
          "file": "handlers.py",
          "line": 407,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/identity/add-resources-profiles",
          "handler": "add_identity_profiles",
          "file": "handlers.py",
          "line": 334,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/identity/admin/profiles",
          "handler": "get_profiles_for_admin",
          "file": "handlers.py",
          "line": 489,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/identity/admin/resources/all/",
          "handler": "get_my_adminable_resources",
          "file": "handlers.py",
          "line": 459,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/internal/v2/identities",
          "handler": "create_internal_identity",
          "file": "internal_handlers.py",
          "line": 27,
          "status": "unused",
          "dead_functions": [
            "logic/identity.py::get_identity_by_email",
            "logic/user_invite.py::create_employee",
            "models/identity.py::get_identity_by_email"
          ]
        },
        {
          "method": "PATCH",
          "path": "/internal/v2/identities/<identity_id>",
          "handler": "update_internal_identity",
          "file": "internal_handlers.py",
          "line": 74,
          "status": "unused",
          "dead_functions": [
            "logic/tenant.py::seat_is_update_removing_last_role",
            "models/tenant.py::seat_get_tenant_by_uuid"
          ]
        },
        {
          "method": "DELETE",
          "path": "/ows/profile/<profile_type>/<int:profile_id>/has-access-to/resource/<resource_type>/<resource_id>",
          "handler": "delete_resource_to_profile",
          "file": "handlers.py",
          "line": 271,
          "status": "unused",
          "dead_functions": [
            "logic/resource.py::delete_resource_to_profile",
            "models/resource.py::soft_delete_profile_to_resource_relationship",
            "models/resource.py::soft_delete_profile_uuid_to_resource_relationship"
          ]
        },
        {
          "method": "DELETE",
          "path": "/ows/profile/<profile_uuid>/has-access-to/resource/<resource_type>/<resource_id>",
          "handler": "delete_resource_to_profile",
          "file": "handlers.py",
          "line": 271,
          "status": "unused",
          "dead_functions": [
            "logic/resource.py::delete_resource_to_profile",
            "models/resource.py::soft_delete_profile_to_resource_relationship",
            "models/resource.py::soft_delete_profile_uuid_to_resource_relationship"
          ]
        },
        {
          "method": "POST",
          "path": "/ows/profile/<string:profile_type>/<int:profile_id>/has-access-to/resource/<resource_type>/<resource_id>",
          "handler": "add_resource_to_profile",
          "file": "handlers.py",
          "line": 221,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ows/profile/<string:profile_uuid>/has-access-to/resource/<resource_type>/<resource_id>",
          "handler": "add_resource_to_profile",
          "file": "handlers.py",
          "line": 221,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "HEAD",
          "path": "/profile/uuid/<profile_uuid>/resource/label/id/<label_id>",
          "handler": "check_profile_access",
          "file": "handlers.py",
          "line": 83,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/v2/identities",
          "handler": "v2_create_identity",
          "file": "identity_v2_handlers.py",
          "line": 37,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/v2/identities/<identity_id>",
          "handler": "v2_revoke_all_access_for_identity",
          "file": "identity_v2_handlers.py",
          "line": 452,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/v2/identities/<identity_id>/tenants/<tenant_type>/<tenant_uuid>",
          "handler": "v2_revoke_access_to_single_tenant_for_identity",
          "file": "identity_v2_handlers.py",
          "line": 384,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/v2/identities/<identity_uuid>",
          "handler": "v2_update_identity",
          "file": "identity_v2_handlers.py",
          "line": 207,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/v2/identities/tenants/dataloader",
          "handler": "get_adminable_tenants_for_identities_dataloader",
          "file": "identity_v2_handlers.py",
          "line": 562,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/identity/<identity_uuid>/tenants",
          "handler": "get_adminable_tenants_for_identity",
          "file": "identity_v2_handlers.py",
          "line": 431,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/identity/self/all-label-access",
          "handler": "check_my_all_label_access",
          "file": "identity_v2_handlers.py",
          "line": 542,
          "status": "unused",
          "dead_functions": [
            "logic/identity.py::is_identity_super_admin",
            "models/resource.py::get_vendor_star_for_admin_by_identity_id"
          ]
        },
        {
          "method": "POST",
          "path": "/v2/identity/self/tenant-access",
          "handler": "check_my_admin_access_to_tenants",
          "file": "identity_v2_handlers.py",
          "line": 522,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/identity/self/tenant-types",
          "handler": "get_my_adminable_tenant_types",
          "file": "identity_v2_handlers.py",
          "line": 482,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/profile/self/all-label-access",
          "handler": "check_profile_all_label_access",
          "file": "profile_v2_handlers.py",
          "line": 86,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/profile/self/subaccounts/direct-access",
          "handler": "get_my_directly_accessible_subaccounts_by_profile",
          "file": "profile_v2_handlers.py",
          "line": 127,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/v2/profile/self/vendors/direct-access",
          "handler": "get_my_directly_accessible_vendors_by_profile",
          "file": "profile_v2_handlers.py",
          "line": 29,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/hello.py::say_hello",
        "logic/identity.py::get_identity_by_email",
        "logic/identity.py::is_identity_super_admin",
        "logic/resource.py::create_resource",
        "logic/resource.py::delete_resource",
        "logic/resource.py::delete_resource_to_profile",
        "logic/resource.py::get_labels_for_artist_id",
        "logic/tenant.py::seat_is_update_removing_last_role",
        "logic/user_invite.py::create_employee",
        "models/identity.py::get_identity_by_email",
        "models/label.py::get_labels_for_artist_id",
        "models/resource.py::create_node",
        "models/resource.py::delete_node",
        "models/resource.py::get_vendor_star_for_admin_by_identity_id",
        "models/resource.py::soft_delete_profile_to_resource_relationship",
        "models/resource.py::soft_delete_profile_uuid_to_resource_relationship",
        "models/tenant.py::seat_get_tenant_by_uuid"
      ]
    },
    {
      "name": "ows-playlist",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-playlist.git",
      "team": "insights",
      "endpoints": {
        "total": 25,
        "used": {
          "count": 25,
          "percent": 100.0
        },
        "unused": {
          "count": 0,
          "percent": 0.0
        }
      },
      "functions": {
        "total": 0,
        "dead": 0,
        "dead_percent": 0
      },
      "details": [
        {
          "method": "GET",
          "path": "/global-participant/<global_participant_id>/placements",
          "handler": "get_placements_by_global_participant_id",
          "file": "handlers.py",
          "line": 148,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/placements",
          "handler": "get_placements",
          "file": "handlers.py",
          "line": 521,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/placements/breakdown",
          "handler": "get_placement_metrics_by_store_playlisttype",
          "file": "handlers.py",
          "line": 666,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/placements/recent",
          "handler": "get_recent_placements",
          "file": "handlers.py",
          "line": 623,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/placements/total_vs_playlist_streams_by_store",
          "handler": "get_total_vs_playlist_streams_by_store",
          "file": "handlers.py",
          "line": 730,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/placements_by_isrc",
          "handler": "get_placements_by_isrc",
          "file": "handlers.py",
          "line": 191,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/placements_count",
          "handler": "get_placements_count",
          "file": "handlers.py",
          "line": 567,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/playlist-ids",
          "handler": "get_playlist_ids",
          "file": "handlers.py",
          "line": 1021,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/playlist-metadata-bulk",
          "handler": "get_playlist_metadata_bulk",
          "file": "handlers.py",
          "line": 1003,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/playlist/<store_playlist_id>/dates/",
          "handler": "get_playlist_available_dates",
          "file": "handlers.py",
          "line": 394,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/playlist/<store_playlist_id>/demographics/",
          "handler": "get_playlist_demographics",
          "file": "handlers.py",
          "line": 1095,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/playlist/<store_playlist_id>/placement/<isrc>",
          "handler": "get_placement",
          "file": "handlers.py",
          "line": 601,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/playlist/<store_playlist_id>/placement/<isrc>/breakdown-by-country",
          "handler": "get_placement_metrics_by_country",
          "file": "handlers.py",
          "line": 765,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/playlist/<store_playlist_id>/placement/<isrc>/positions",
          "handler": "get_placement_position_time_series",
          "file": "handlers.py",
          "line": 687,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/playlist/<store_playlist_id>/placement/<isrc>/streams",
          "handler": "get_placement_streams_time_series",
          "file": "handlers.py",
          "line": 701,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/playlist/<store_playlist_id>/placements",
          "handler": "get_placements_by_store_playlist_id",
          "file": "handlers.py",
          "line": 235,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/playlist/<store_playlist_id>/placements",
          "handler": "get_placements_by_store_playlist_id",
          "file": "handlers.py",
          "line": 235,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/playlist/<store_playlist_id>/placements/on-date",
          "handler": "get_placements_by_store_playlist_id_on_date",
          "file": "handlers.py",
          "line": 432,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/playlist/analytics-bulk",
          "handler": "get_playlists_analytics",
          "file": "handlers.py",
          "line": 945,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/playlist/analytics-bulk-timeseries",
          "handler": "get_playlists_analytics_timeseries",
          "file": "handlers.py",
          "line": 874,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/playlist/placement/company-brand",
          "handler": "get_company_brand_for_playlist_placement",
          "file": "handlers.py",
          "line": 1052,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/placements",
          "handler": "get_placements_by_product",
          "file": "handlers.py",
          "line": 107,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<isrc>/top-placements",
          "handler": "get_sound_recording_top_placements",
          "file": "sound_recording_handlers.py",
          "line": 42,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/sound-recording/placement-analytics-bulk",
          "handler": "get_sound_recording_placement_analytics_bulk",
          "file": "sound_recording_handlers.py",
          "line": 76,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/sound-recording/placement-streams-bulk",
          "handler": "get_sound_recording_placement_streams_bulk",
          "file": "sound_recording_handlers.py",
          "line": 160,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-preference-center",
      "framework": "fastapi",
      "repo_url": "https://github.com/theorchard/ows-preference-center.git",
      "team": "fansifter",
      "endpoints": {
        "total": 13,
        "used": {
          "count": 10,
          "percent": 76.9
        },
        "unused": {
          "count": 3,
          "percent": 23.1
        }
      },
      "functions": {
        "total": 0,
        "dead": 0,
        "dead_percent": 0
      },
      "details": [
        {
          "method": "POST",
          "path": "/__debug/profile/token/decrypt",
          "handler": "_debug_decrypt_profile_token",
          "file": "debug.py",
          "line": 36,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/__debug/profile/token/encrypt",
          "handler": "_debug_encrypt_profile_token",
          "file": "debug.py",
          "line": 20,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "hello",
          "file": "profile.py",
          "line": 53,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/profile/{token}",
          "handler": "delete_profile",
          "file": "profile.py",
          "line": 131,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/profile/{token}",
          "handler": "get_profile",
          "file": "profile.py",
          "line": 81,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/profile/{token}",
          "handler": "update_profile",
          "file": "profile.py",
          "line": 103,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/profile/{token}/subscriptions",
          "handler": "unsubscribe_all",
          "file": "profile.py",
          "line": 190,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/profile/{token}/subscriptions",
          "handler": "get_subscriptions",
          "file": "profile.py",
          "line": 150,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/profile/{token}/subscriptions",
          "handler": "update_subscriptions",
          "file": "profile.py",
          "line": 167,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/settings",
          "handler": "get_settings",
          "file": "profile.py",
          "line": 64,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/songwhip/encrypt-fan-consent-id",
          "handler": "encrypt_songwhip_fan_consent_id",
          "file": "songwhip.py",
          "line": 25,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/songwhip/fan-double-opt-in-consent-confirm",
          "handler": "songwhip_fan_double_opt_in_consent_confirm",
          "file": "songwhip.py",
          "line": 41,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/subscriptions/unsubscribe-all",
          "handler": "unsubscribe_all_by_email",
          "file": "profile.py",
          "line": 207,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-pricing",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-pricing.git",
      "team": "content-review-management",
      "endpoints": {
        "total": 43,
        "used": {
          "count": 32,
          "percent": 74.4
        },
        "unused": {
          "count": 11,
          "percent": 25.6
        }
      },
      "functions": {
        "total": 41,
        "dead": 9,
        "dead_percent": 22.0
      },
      "details": [
        {
          "method": "DELETE",
          "path": "/<account_type>/<int:account_id>/<int:pricing_family_id>/default",
          "handler": "soft_delete_default_account_pricing_tier",
          "file": "handlers.py",
          "line": 687,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/<account_type>/<int:account_id>/<int:pricing_family_id>/default",
          "handler": "get_default_account_pricing_tier",
          "file": "handlers.py",
          "line": 636,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/<account_type>/<int:account_id>/<int:pricing_family_id>/default",
          "handler": "set_default_account_pricing_tier",
          "file": "handlers.py",
          "line": 660,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/admin/orchard-pricing-tier",
          "handler": "create_orchard_pricing_tier",
          "file": "handlers.py",
          "line": 116,
          "status": "unused",
          "dead_functions": [
            "logic/orchard_pricing_tier.py::create_orchard_pricing_tier"
          ]
        },
        {
          "method": "PUT",
          "path": "/admin/orchard-pricing-tier/<orchard_pricing_tier_id>",
          "handler": "update_orchard_pricing_tier",
          "file": "handlers.py",
          "line": 128,
          "status": "unused",
          "dead_functions": [
            "logic/orchard_pricing_tier.py::update_orchard_pricing_tier_by_id"
          ]
        },
        {
          "method": "POST",
          "path": "/admin/pricing-family",
          "handler": "create_pricing_family",
          "file": "handlers.py",
          "line": 105,
          "status": "unused",
          "dead_functions": [
            "logic/pricing_family.py::create_pricing_family"
          ]
        },
        {
          "method": "POST",
          "path": "/admin/store-pricing-scheme",
          "handler": "create_store_pricing_scheme",
          "file": "handlers.py",
          "line": 161,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/admin/store-pricing-scheme/<store_pricing_scheme_id>",
          "handler": "update_store_pricing_scheme",
          "file": "handlers.py",
          "line": 173,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/admin/store-pricing-scheme/<store_pricing_scheme_id>/store-pricing-tier",
          "handler": "create_store_pricing_tier",
          "file": "handlers.py",
          "line": 190,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/admin/store-pricing-scheme/store-pricing-tier/<store_pricing_tier_id>",
          "handler": "delete_store_pricing_tier",
          "file": "handlers.py",
          "line": 224,
          "status": "unused",
          "dead_functions": [
            "logic/store_pricing_tier.py::delete"
          ]
        },
        {
          "method": "PUT",
          "path": "/admin/store-pricing-scheme/store-pricing-tier/<store_pricing_tier_id>",
          "handler": "update_store_pricing_tier",
          "file": "handlers.py",
          "line": 207,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/admin/store-pricing-tier/<store_pricing_tier_id>/store-pricing-tier-code",
          "handler": "create_store_pricing_tier_code",
          "file": "handlers.py",
          "line": 238,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/admin/store-pricing-tier/<store_pricing_tier_id>/store-pricing-tier-code/<store_pricing_tier_code_id>",
          "handler": "update_store_pricing_tier_code",
          "file": "handlers.py",
          "line": 255,
          "status": "unused",
          "dead_functions": [
            "logic/store_pricing_tier_code.py::update"
          ]
        },
        {
          "method": "DELETE",
          "path": "/admin/store_pricing_tier_code/<store_pricing_tier_code_id>",
          "handler": "delete_store_pricing_tier_code",
          "file": "handlers.py",
          "line": 273,
          "status": "unused",
          "dead_functions": [
            "logic/store_pricing_tier_code.py::delete"
          ]
        },
        {
          "method": "GET",
          "path": "/clear-cache",
          "handler": "clear_cache",
          "file": "handlers.py",
          "line": 710,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 741,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/pricing-families",
          "handler": "get_pricing_families",
          "file": "handlers.py",
          "line": 48,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/pricing-family/<pricing_family_id>/orchard-pricing-tier",
          "handler": "get_orchard_pricing_tier_by_pricing_family_id",
          "file": "handlers.py",
          "line": 55,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/pricing-family/<pricing_family_id>/store-pricing-scheme",
          "handler": "get_store_pricing_scheme_by_pricing_family_id",
          "file": "handlers.py",
          "line": 91,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/pricing_family/<pricing_family_id>/product/<product_id>/store/<store_id>/pricing",
          "handler": "get_product_pricing_by_store_id",
          "file": "handlers.py",
          "line": 493,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:source_product_id>/pricing/copy/<int:destination_product_id>",
          "handler": "copy_digital_product_pricing",
          "file": "handlers.py",
          "line": 617,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/digital/bff",
          "handler": "get_all_digital_product_pricing",
          "file": "handlers.py",
          "line": 832,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/effective-price-codes",
          "handler": "get_product_effective_price_codes",
          "file": "handlers.py",
          "line": 721,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/override",
          "handler": "get_product_pricing_overrides",
          "file": "handlers.py",
          "line": 332,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<product_id>/override",
          "handler": "create_product_pricing_override",
          "file": "handlers.py",
          "line": 350,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<product_id>/override/<product_pricing_override_id>",
          "handler": "update_product_pricing_override",
          "file": "handlers.py",
          "line": 471,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<product_id>/override/bulk",
          "handler": "bulk_create_product_pricing_override",
          "file": "handlers.py",
          "line": 372,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<product_id>/override/bulk",
          "handler": "bulk_update_create_product_pricing_override",
          "file": "handlers.py",
          "line": 393,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/pricing-family/<pricing_family_id>/orchard_pricing_tier",
          "handler": "get_product_orchard_pricing_tier",
          "file": "handlers.py",
          "line": 287,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<product_id>/pricing-family/<pricing_family_id>/orchard_pricing_tier",
          "handler": "update_product_with_orchard_pricing_tier",
          "file": "handlers.py",
          "line": 310,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<product_id>/track-override/bulk",
          "handler": "bulk_create_track_pricing_override",
          "file": "handlers.py",
          "line": 415,
          "status": "unused",
          "dead_functions": [
            "logic/track_pricing_override.py::bulk_create_track_pricing_override"
          ]
        },
        {
          "method": "PUT",
          "path": "/product/<product_id>/track-override/bulk",
          "handler": "bulk_update_create_track_pricing_override",
          "file": "handlers.py",
          "line": 436,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/track-overrides",
          "handler": "get_track_pricing_overrides_for_product",
          "file": "handlers.py",
          "line": 546,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/bulk-update",
          "handler": "bulk_update_products",
          "file": "handlers.py",
          "line": 458,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/public/pricing-family/<pricing_family_id>/orchard-pricing-tier",
          "handler": "get_public_orchard_pricing_tier_by_pricing_family_id",
          "file": "handlers.py",
          "line": 73,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/store-pricing-scheme/<store_pricing_scheme_id>",
          "handler": "get_store_pricing_scheme_by_id",
          "file": "handlers.py",
          "line": 140,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/store/<store_id>/store-pricing-scheme",
          "handler": "get_store_pricing_scheme_by_store_id",
          "file": "handlers.py",
          "line": 151,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/track/<track_id>/override",
          "handler": "get_track_pricing_overrides",
          "file": "handlers.py",
          "line": 524,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/track/<track_id>/override",
          "handler": "create_track_pricing_override",
          "file": "handlers.py",
          "line": 565,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/track/<track_id>/override/<track_pricing_override_id>",
          "handler": "update_track_pricing_override",
          "file": "handlers.py",
          "line": 590,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/upload-token",
          "handler": "get_upload_token",
          "file": "handlers.py",
          "line": 763,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/upload/complete",
          "handler": "complete_multipart_upload",
          "file": "handlers.py",
          "line": 807,
          "status": "unused",
          "dead_functions": [
            "logic/pricing_helper.py::complete_multipart_upload"
          ]
        },
        {
          "method": "GET",
          "path": "/upload/presigned-urls",
          "handler": "get_upload_presigned_urls",
          "file": "handlers.py",
          "line": 787,
          "status": "unused",
          "dead_functions": [
            "logic/pricing_helper.py::get_presigned_urls"
          ]
        }
      ],
      "dead_functions": [
        "logic/orchard_pricing_tier.py::create_orchard_pricing_tier",
        "logic/orchard_pricing_tier.py::update_orchard_pricing_tier_by_id",
        "logic/pricing_family.py::create_pricing_family",
        "logic/pricing_helper.py::complete_multipart_upload",
        "logic/pricing_helper.py::get_presigned_urls",
        "logic/store_pricing_tier.py::delete",
        "logic/store_pricing_tier_code.py::delete",
        "logic/store_pricing_tier_code.py::update",
        "logic/track_pricing_override.py::bulk_create_track_pricing_override"
      ]
    },
    {
      "name": "ows-product",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-product.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 59,
        "used": {
          "count": 47,
          "percent": 79.7
        },
        "unused": {
          "count": 12,
          "percent": 20.3
        }
      },
      "functions": {
        "total": 55,
        "dead": 10,
        "dead_percent": 18.2
      },
      "details": [
        {
          "method": "GET",
          "path": "/<account_type>/<account_uuid>/product_code/available",
          "handler": "product_codes_available_for_use",
          "file": "handlers.py",
          "line": 115,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "HEAD",
          "path": "/<account_type>/<int:account_id>/product/<int:product_id>",
          "handler": "check_product_ownership",
          "file": "handlers.py",
          "line": 169,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "HEAD",
          "path": "/<account_type>/<int:account_id>/product_code/<string:product_code>",
          "handler": "product_code_exists",
          "file": "handlers.py",
          "line": 90,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/<account_type>/<int:account_id>/products",
          "handler": "get_products",
          "file": "handlers.py",
          "line": 677,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/<account_type>/<int:account_id>/upcs",
          "handler": "check_products_ownership_by_upcs",
          "file": "handlers.py",
          "line": 926,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk-upc",
          "handler": "get_products_by_upcs",
          "file": "handlers.py",
          "line": 749,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 46,
          "status": "unused",
          "dead_functions": [
            "logic/hello.py::health_check"
          ]
        },
        {
          "method": "GET",
          "path": "/hfa/eligible-tracks",
          "handler": "get_hfa_eligible_tracks",
          "file": "handlers.py",
          "line": 1235,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/language/<int:language_id>",
          "handler": "get_itunes_language_by_id",
          "file": "handlers.py",
          "line": 425,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/localization/languages",
          "handler": "get_all_itunes_languages",
          "file": "handlers.py",
          "line": 354,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/localization/product/<int:product_id>",
          "handler": "get_product_localization",
          "file": "handlers.py",
          "line": 376,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/localization/product/<int:product_id>/language/<int:language_id>",
          "handler": "delete_product_localizations",
          "file": "handlers.py",
          "line": 442,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/localization/product/<int:product_id>/language/<int:language_id>",
          "handler": "create_product_localizations",
          "file": "handlers.py",
          "line": 403,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/localization/track",
          "handler": "bulk_get_track_localization",
          "file": "handlers.py",
          "line": 501,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/localization/track/<comma_separated_int:tuids>",
          "handler": "delete_track_localization_with_tuids",
          "file": "handlers.py",
          "line": 457,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/localization/track/<comma_separated_int:tuids>",
          "handler": "get_track_localization",
          "file": "handlers.py",
          "line": 486,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/localization/track/<int:tuid>/language/<int:language_id>",
          "handler": "delete_track_localization_with_language",
          "file": "handlers.py",
          "line": 472,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/localization/track/<int:tuid>/language/<int:language_id>",
          "handler": "update_track_localization",
          "file": "handlers.py",
          "line": 529,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/localization/tracks",
          "handler": "update_multiple_tracks_localization",
          "file": "handlers.py",
          "line": 552,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/log",
          "handler": "say_hi",
          "file": "handlers.py",
          "line": 1220,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/lookup/product/ownership/",
          "handler": "lookup_product_ownership",
          "file": "handlers.py",
          "line": 1187,
          "status": "unused",
          "dead_functions": [
            "logic/product.py::lookup_product_ownership"
          ]
        },
        {
          "method": "POST",
          "path": "/product-id-by-upc-dataloader",
          "handler": "get_product_id_by_upc_dataloader",
          "file": "handlers.py",
          "line": 760,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<account_type>/<account_uuid>/product_code/<string:product_code>",
          "handler": "get_product_id_by_product_code_and_account",
          "file": "handlers.py",
          "line": 146,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>",
          "handler": "delete_product_by_product_id",
          "file": "handlers.py",
          "line": 307,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>",
          "handler": "get_product_by_product_id",
          "file": "handlers.py",
          "line": 225,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>/artist",
          "handler": "delete_release_artist",
          "file": "handlers.py",
          "line": 906,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/artist",
          "handler": "get_release_artist",
          "file": "handlers.py",
          "line": 896,
          "status": "unused",
          "dead_functions": [
            "models/release_artist.py::get"
          ]
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/artist",
          "handler": "create_release_artist",
          "file": "handlers.py",
          "line": 873,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/artist",
          "handler": "update_release_artist",
          "file": "handlers.py",
          "line": 885,
          "status": "unused",
          "dead_functions": [
            "models/release_artist.py::update"
          ]
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/asset-version",
          "handler": "get_asset_version",
          "file": "handlers.py",
          "line": 1147,
          "status": "unused",
          "dead_functions": [
            "models/release_asset_version.py::get"
          ]
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/asset-version",
          "handler": "update_asset_version",
          "file": "handlers.py",
          "line": 1159,
          "status": "unused",
          "dead_functions": [
            "models/release_asset_version.py::update_api_version"
          ]
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/copy",
          "handler": "copy_product",
          "file": "handlers.py",
          "line": 256,
          "status": "unused",
          "dead_functions": [
            "logic/product_copy.py::copy_product"
          ]
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/copy/<string:context_type>",
          "handler": "copy_product_flexible",
          "file": "handlers.py",
          "line": 281,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/document",
          "handler": "get_product_document",
          "file": "handlers.py",
          "line": 772,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>/phonetic-translations",
          "handler": "delete_phonetic_translations",
          "file": "handlers.py",
          "line": 1058,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/phonetic-translations",
          "handler": "get_phonetic_translations",
          "file": "handlers.py",
          "line": 1012,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/phonetic-translations",
          "handler": "create_phonetic_translations",
          "file": "handlers.py",
          "line": 1022,
          "status": "unused",
          "dead_functions": [
            "models/release_phonetic_translations.py::create"
          ]
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/phonetic-translations",
          "handler": "update_phonetic_translations",
          "file": "handlers.py",
          "line": 1040,
          "status": "unused",
          "dead_functions": [
            "models/release_phonetic_translations.py::update"
          ]
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/phonetic-translations/<int:language_id>",
          "handler": "get_phonetic_translations",
          "file": "handlers.py",
          "line": 1012,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>/subgenre",
          "handler": "delete_release_subgenre",
          "file": "handlers.py",
          "line": 863,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/subgenre",
          "handler": "get_release_subgenre",
          "file": "handlers.py",
          "line": 853,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/subgenre",
          "handler": "create_release_subgenre",
          "file": "handlers.py",
          "line": 830,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/subgenre",
          "handler": "update_release_subgenre",
          "file": "handlers.py",
          "line": 842,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/territory_dates",
          "handler": "update_territory_dates",
          "file": "handlers.py",
          "line": 1124,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/upc/<int:upc>",
          "handler": "get_product_by_upc",
          "file": "handlers.py",
          "line": 198,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/products",
          "handler": "get_upcs_by_product_ids",
          "file": "handlers.py",
          "line": 735,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/products/documents",
          "handler": "get_products_documents",
          "file": "handlers.py",
          "line": 801,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/public/localization/languages",
          "handler": "get_public_all_itunes_languages",
          "file": "handlers.py",
          "line": 364,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/release-artist/<int:release_artist_id>/product",
          "handler": "get_products_by_release_artist_id",
          "file": "handlers.py",
          "line": 1088,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound-recording/<string:isrc>/products",
          "handler": "get_products_by_isrc",
          "file": "handlers.py",
          "line": 986,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "HEAD",
          "path": "/subaccount/<int:subaccount_id>/display_upc/<string:display_upc>/available",
          "handler": "check_display_upc_availability_for_subaccount",
          "file": "handlers.py",
          "line": 645,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "HEAD",
          "path": "/upc/<int:upc>",
          "handler": "upc_exists",
          "file": "handlers.py",
          "line": 52,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/upc/<int:upc>/is_orchard_upc",
          "handler": "is_orchard_upc",
          "file": "handlers.py",
          "line": 64,
          "status": "unused",
          "dead_functions": [
            "logic/upc.py::is_orchard_upc"
          ]
        },
        {
          "method": "POST",
          "path": "/upc/available",
          "handler": "upcs_available_for_use",
          "file": "handlers.py",
          "line": 190,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "HEAD",
          "path": "/upc/available/<int:upc>",
          "handler": "upc_avaialble_for_use",
          "file": "handlers.py",
          "line": 58,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/upc/placeholder",
          "handler": "generate_placeholder_upc",
          "file": "handlers.py",
          "line": 564,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/upc/provision",
          "handler": "provision_upc",
          "file": "handlers.py",
          "line": 1107,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/<int:vendor_id>/display_upc/<string:display_upc>",
          "handler": "get_upc_from_vendor_display_upc",
          "file": "handlers.py",
          "line": 574,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "HEAD",
          "path": "/vendor/<int:vendor_id>/display_upc/<string:display_upc>/available",
          "handler": "check_display_upc_availability_for_vendor",
          "file": "handlers.py",
          "line": 610,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/hello.py::health_check",
        "logic/product.py::lookup_product_ownership",
        "logic/product_copy.py::copy_product",
        "logic/upc.py::is_orchard_upc",
        "models/release_artist.py::get",
        "models/release_artist.py::update",
        "models/release_asset_version.py::get",
        "models/release_asset_version.py::update_api_version",
        "models/release_phonetic_translations.py::create",
        "models/release_phonetic_translations.py::update"
      ]
    },
    {
      "name": "ows-product-configuration",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-product-configuration.git",
      "team": "content-delivery-asset-management",
      "endpoints": {
        "total": 10,
        "used": {
          "count": 5,
          "percent": 50.0
        },
        "unused": {
          "count": 5,
          "percent": 50.0
        }
      },
      "functions": {
        "total": 8,
        "dead": 3,
        "dead_percent": 37.5
      },
      "details": [
        {
          "method": "GET",
          "path": "/distribution-format-media",
          "handler": "get_distribution_format_media",
          "file": "handlers.py",
          "line": 61,
          "status": "unused",
          "dead_functions": [
            "logic/product_configuration.py::get_distribution_format_media_types"
          ]
        },
        {
          "method": "GET",
          "path": "/distribution-format-media-format",
          "handler": "get_distribution_format_media_formats",
          "file": "handlers.py",
          "line": 33,
          "status": "unused",
          "dead_functions": [
            "logic/product_configuration.py::get_distribution_format_media_formats"
          ]
        },
        {
          "method": "GET",
          "path": "/distribution-format/<int:distribution_format_id>",
          "handler": "get_distribution_format_by_distribution_format_id",
          "file": "handlers.py",
          "line": 150,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/distribution-formats",
          "handler": "get_distribution_formats",
          "file": "handlers.py",
          "line": 72,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 27,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/public/distribution-formats",
          "handler": "get_public_distribution_formats",
          "file": "handlers.py",
          "line": 85,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/supply-chain/<int:supply_chain_id>/distribution-format/<int:distribution_format_id>",
          "handler": "get_supply_chain_configuration",
          "file": "handlers.py",
          "line": 124,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/supply-chain/<int:supply_chain_id>/distribution-formats",
          "handler": "get_supply_chain_configurations",
          "file": "handlers.py",
          "line": 111,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/supply-chains",
          "handler": "get_supply_chains",
          "file": "handlers.py",
          "line": 98,
          "status": "unused",
          "dead_functions": [
            "logic/product_configuration.py::get_supply_chain_configuration_schemas"
          ]
        },
        {
          "method": "GET",
          "path": "/supply-chains/defaults",
          "handler": "get_supply_chains_defaults",
          "file": "handlers.py",
          "line": 136,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/product_configuration.py::get_distribution_format_media_formats",
        "logic/product_configuration.py::get_distribution_format_media_types",
        "logic/product_configuration.py::get_supply_chain_configuration_schemas"
      ]
    },
    {
      "name": "ows-product-digital",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-product-digital.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 34,
        "used": {
          "count": 30,
          "percent": 88.2
        },
        "unused": {
          "count": 4,
          "percent": 11.8
        }
      },
      "functions": {
        "total": 35,
        "dead": 4,
        "dead_percent": 11.4
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 42,
          "status": "unused",
          "dead_functions": [
            "logic/hello.py::health_check"
          ]
        },
        {
          "method": "GET",
          "path": "/meta-language",
          "handler": "get_meta_languages",
          "file": "handlers.py",
          "line": 59,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>",
          "handler": "delete",
          "file": "handlers.py",
          "line": 897,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/approve",
          "handler": "approve",
          "file": "handlers.py",
          "line": 859,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/copy",
          "handler": "copy_product",
          "file": "handlers.py",
          "line": 136,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/correction",
          "handler": "create_product_correction",
          "file": "handlers.py",
          "line": 563,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>/correction/<int:release_correction_id>",
          "handler": "delete_release_correction",
          "file": "handlers.py",
          "line": 590,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/correction/<int:release_correction_id>/details",
          "handler": "create_correction_details",
          "file": "handlers.py",
          "line": 621,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/display_upc",
          "handler": "UNSAFE_update_display_upc",
          "file": "unsafe_handlers.py",
          "line": 32,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>/mkt_priority",
          "handler": "delete_mkt_priority_in_bulk",
          "file": "handlers.py",
          "line": 915,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/mkt_priority",
          "handler": "get_mkt_priority",
          "file": "handlers.py",
          "line": 653,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/mkt_priority",
          "handler": "set_mkt_priority",
          "file": "handlers.py",
          "line": 696,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>/mkt_priority/<int:country_id>",
          "handler": "delete_mkt_priority",
          "file": "handlers.py",
          "line": 727,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/not_for_distribution",
          "handler": "update_not_for_distribution",
          "file": "handlers.py",
          "line": 832,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/pricing",
          "handler": "get_product_pricing",
          "file": "handlers.py",
          "line": 317,
          "status": "unused",
          "dead_functions": [
            "logic/pricing.py::get_pricing"
          ]
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/pricing",
          "handler": "set_product_pricing",
          "file": "handlers.py",
          "line": 342,
          "status": "unused",
          "dead_functions": [
            "logic/pricing.py::set_pricing"
          ]
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/scheduling-and-pricing",
          "handler": "get_scheduling_and_pricing",
          "file": "handlers.py",
          "line": 501,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>/soft_delete",
          "handler": "UNSAFE_soft_delete",
          "file": "unsafe_handlers.py",
          "line": 51,
          "status": "unused",
          "dead_functions": [
            "logic/unsafe_methods.py::UNSAFE_soft_delete"
          ]
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/tracks/grats",
          "handler": "get_grats_for_product",
          "file": "handlers.py",
          "line": 542,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/audio",
          "handler": "create_product",
          "file": "handlers.py",
          "line": 101,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/audio/<int:product_id>",
          "handler": "get_product",
          "file": "handlers.py",
          "line": 254,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/audio/<int:product_id>",
          "handler": "update_product",
          "file": "handlers.py",
          "line": 150,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/audio/<int:product_id>/approve",
          "handler": "approve_product_from_productreview",
          "file": "handlers.py",
          "line": 803,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/audio/<int:product_id>/reject",
          "handler": "reject_product_from_productreview",
          "file": "handlers.py",
          "line": 777,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/audio/<int:product_id>/status",
          "handler": "submit_product",
          "file": "handlers.py",
          "line": 211,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/audio/<int:product_id>/submit",
          "handler": "simple_submit_product",
          "file": "handlers.py",
          "line": 204,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/audio/<int:product_id>/unsubmit",
          "handler": "unsubmit_product",
          "file": "handlers.py",
          "line": 751,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/audio/<int:product_id>/validate",
          "handler": "get_product_audio_validate",
          "file": "handlers.py",
          "line": 435,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/audio/dataloader",
          "handler": "dataload_products",
          "file": "handlers.py",
          "line": 279,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/audio/validate/dataloader",
          "handler": "dataload_product_audio_validation",
          "file": "handlers.py",
          "line": 367,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/mkt_priority/dataloader",
          "handler": "dataload_mkt_priority",
          "file": "handlers.py",
          "line": 668,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/upc/<upc>",
          "handler": "UNSAFE_delete_product_by_upc",
          "file": "unsafe_handlers.py",
          "line": 12,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/public/meta-language",
          "handler": "get_public_meta_languages",
          "file": "handlers.py",
          "line": 49,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/release-approval/rejections",
          "handler": "update_rejections",
          "file": "handlers.py",
          "line": 528,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/hello.py::health_check",
        "logic/pricing.py::get_pricing",
        "logic/pricing.py::set_pricing",
        "logic/unsafe_methods.py::UNSAFE_soft_delete"
      ]
    },
    {
      "name": "ows-product-physical",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-product-physical.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 33,
        "used": {
          "count": 26,
          "percent": 78.8
        },
        "unused": {
          "count": 7,
          "percent": 21.2
        }
      },
      "functions": {
        "total": 33,
        "dead": 12,
        "dead_percent": 36.4
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello",
          "handler": "health",
          "file": "handlers.py",
          "line": 42,
          "status": "unused",
          "dead_functions": [
            "logic/product_physical.py::healthcheck"
          ]
        },
        {
          "method": "POST",
          "path": "/order",
          "handler": "create_order",
          "file": "handlers.py",
          "line": 606,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/orders",
          "handler": "get_orders",
          "file": "handlers.py",
          "line": 582,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/orders",
          "handler": "update_orders",
          "file": "handlers.py",
          "line": 633,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/packaging",
          "handler": "get_product_physical_packaging",
          "file": "handlers.py",
          "line": 53,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product",
          "handler": "product_physical_create",
          "file": "handlers.py",
          "line": 155,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product-distribution/<int:product_id>",
          "handler": "product_distribution_delete",
          "file": "handlers.py",
          "line": 545,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product-distribution/<int:product_id>",
          "handler": "product_distribution_fetch",
          "file": "handlers.py",
          "line": 526,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product-distribution/<int:product_id>",
          "handler": "save_product_distribution",
          "file": "handlers.py",
          "line": 561,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>",
          "handler": "product_physical_delete",
          "file": "handlers.py",
          "line": 227,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>",
          "handler": "product_physical_fetch",
          "file": "handlers.py",
          "line": 140,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>",
          "handler": "product_physical_update",
          "file": "handlers.py",
          "line": 171,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/change_history",
          "handler": "product_physical_change_history_post",
          "file": "handlers.py",
          "line": 361,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/copy",
          "handler": "copy_product",
          "file": "handlers.py",
          "line": 190,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/inventory",
          "handler": "product_physical_inventory_fetch",
          "file": "handlers.py",
          "line": 345,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/status",
          "handler": "product_physical_update_status",
          "file": "handlers.py",
          "line": 243,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/supply-chain-defaults",
          "handler": "get_supply_chain_defaults_by_product_id",
          "file": "handlers.py",
          "line": 426,
          "status": "unused",
          "dead_functions": [
            "logic/product_physical.py::get_supply_chain_defaults_by_product_id"
          ]
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/supply-chain-defaults",
          "handler": "update_product_physical_supply_chain_info",
          "file": "handlers.py",
          "line": 475,
          "status": "unused",
          "dead_functions": [
            "logic/product_physical.py::update_product_supply_chain_info",
            "models/product_physical_supply_chain_info.py::update_product_supply_chain_info_by_product_store_id"
          ]
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/supply-chain-info",
          "handler": "set_supply_chain_info_by_product_id",
          "file": "handlers.py",
          "line": 510,
          "status": "unused",
          "dead_functions": [
            "logic/product_physical.py::set_supply_chain_info_by_product_id",
            "models/product_physical_supply_chain_info.py::set_supply_chain_info_by_product_id"
          ]
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/supply-chain-metadata",
          "handler": "get_product_physical_supply_chain_metadata",
          "file": "handlers.py",
          "line": 411,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/supply-chain-metadata",
          "handler": "set_physical_supply_chain_metadata",
          "file": "handlers.py",
          "line": 440,
          "status": "unused",
          "dead_functions": [
            "logic/product_physical_supply_chain_metadata.py::set_physical_supply_chain_metadata",
            "models/product_physical_supply_chain_metadata.py::set_physical_supply_chain_metadata"
          ]
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>/supply-chain-metadata/<int:metadata_id>/delete",
          "handler": "delete_supply_chain_metadata",
          "file": "handlers.py",
          "line": 458,
          "status": "unused",
          "dead_functions": [
            "logic/product_physical_supply_chain_metadata.py::delete_supply_chain_metadata",
            "models/product_physical_supply_chain_metadata.py::delete_supply_chain_metadata"
          ]
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>/supply-chain-metadata/<store_id>",
          "handler": "delete_supply_chain_metadata_by_product_and_store",
          "file": "handlers.py",
          "line": 492,
          "status": "unused",
          "dead_functions": [
            "logic/product_physical_supply_chain_metadata.py::delete_supply_chain_metadata_by_product_and_store",
            "models/product_physical_supply_chain_metadata.py::delete_supply_chain_metadata_by_product_and_store"
          ]
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/supply_chain_defaults",
          "handler": "set_supply_chain_defaults_for_product",
          "file": "handlers.py",
          "line": 400,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/tracks",
          "handler": "product_physical_get_tracks",
          "file": "handlers.py",
          "line": 262,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/tracks",
          "handler": "product_physical_create_tracks",
          "file": "handlers.py",
          "line": 280,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/tracks/copy/<int:new_product_id>",
          "handler": "copy_product_tracks",
          "file": "handlers.py",
          "line": 210,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/tracks/publishing-obligation",
          "handler": "get_tracks_publishing_obligations_data_for_product",
          "file": "handlers.py",
          "line": 299,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/tracks/publishing-obligation",
          "handler": "put_tracks_publishing_obligations_data_for_product",
          "file": "handlers.py",
          "line": 322,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/products/<int:store_id>/change-history",
          "handler": "get_physical_product_change_history",
          "file": "handlers.py",
          "line": 380,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/products/<int:store_id>/new-delivery",
          "handler": "eligible_products_for_new_delivery",
          "file": "handlers.py",
          "line": 65,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/products/<int:store_id>/takedown-delivery",
          "handler": "deleted_products_for_takedown",
          "file": "handlers.py",
          "line": 90,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/products/<int:store_id>/update-delivery",
          "handler": "products_eligible_for_update_delivery",
          "file": "handlers.py",
          "line": 115,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/product_physical.py::get_supply_chain_defaults_by_product_id",
        "logic/product_physical.py::healthcheck",
        "logic/product_physical.py::set_supply_chain_info_by_product_id",
        "logic/product_physical.py::update_product_supply_chain_info",
        "logic/product_physical_supply_chain_metadata.py::delete_supply_chain_metadata",
        "logic/product_physical_supply_chain_metadata.py::delete_supply_chain_metadata_by_product_and_store",
        "logic/product_physical_supply_chain_metadata.py::set_physical_supply_chain_metadata",
        "models/product_physical_supply_chain_info.py::set_supply_chain_info_by_product_id",
        "models/product_physical_supply_chain_info.py::update_product_supply_chain_info_by_product_store_id",
        "models/product_physical_supply_chain_metadata.py::delete_supply_chain_metadata",
        "models/product_physical_supply_chain_metadata.py::delete_supply_chain_metadata_by_product_and_store",
        "models/product_physical_supply_chain_metadata.py::set_physical_supply_chain_metadata"
      ]
    },
    {
      "name": "ows-product-review",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-product-review.git",
      "team": "content-review-management",
      "endpoints": {
        "total": 35,
        "used": {
          "count": 25,
          "percent": 71.4
        },
        "unused": {
          "count": 10,
          "percent": 28.6
        }
      },
      "functions": {
        "total": 32,
        "dead": 11,
        "dead_percent": 34.4
      },
      "details": [
        {
          "method": "POST",
          "path": "/account-note/dataloader",
          "handler": "dataload_account_notes",
          "file": "handlers.py",
          "line": 556,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/account-note/vendor/<int:vendor_id>",
          "handler": "get_account_note",
          "file": "handlers.py",
          "line": 534,
          "status": "unused",
          "dead_functions": [
            "logic/account_note.py::get_account_note"
          ]
        },
        {
          "method": "PUT",
          "path": "/account-note/vendor/<int:vendor_id>",
          "handler": "add_account_note",
          "file": "handlers.py",
          "line": 577,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/approve/<int:review_queue_id>",
          "handler": "approve_by_id",
          "file": "handlers.py",
          "line": 349,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/canned-response-categories",
          "handler": "get_canned_response_categories",
          "file": "handlers.py",
          "line": 513,
          "status": "unused",
          "dead_functions": [
            "logic/canned_response.py::get_canned_response_categories"
          ]
        },
        {
          "method": "POST",
          "path": "/canned-response-note/dataloader",
          "handler": "dataload_canned_response_notes",
          "file": "handlers.py",
          "line": 524,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/canned-response/<int:canned_response_id>",
          "handler": "get_canned_response_item",
          "file": "handlers.py",
          "line": 472,
          "status": "unused",
          "dead_functions": [
            "logic/canned_response.py::get_canned_response"
          ]
        },
        {
          "method": "GET",
          "path": "/canned-responses",
          "handler": "get_canned_response_items",
          "file": "handlers.py",
          "line": 486,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello-authorized/",
          "handler": "authorization_health",
          "file": "handlers.py",
          "line": 184,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 177,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reject/<int:product_id>",
          "handler": "get_rejection",
          "file": "handlers.py",
          "line": 414,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/reject/<int:review_queue_id>",
          "handler": "reject_by_id",
          "file": "handlers.py",
          "line": 396,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/review-history/<int:product_id>",
          "handler": "get_product_history",
          "file": "handlers.py",
          "line": 421,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/review-queue",
          "handler": "get_review_queue",
          "file": "handlers.py",
          "line": 191,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/review-queue/<int:review_queue_id>/approval",
          "handler": "create_approval",
          "file": "handlers.py",
          "line": 367,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/review-queue/<int:review_queue_id>/lock",
          "handler": "lock_review_queue_item",
          "file": "handlers.py",
          "line": 285,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/review-queue/<int:review_queue_id>/queue",
          "handler": "move_review_queue_item_to_queue",
          "file": "handlers.py",
          "line": 307,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/review-queue/<int:review_queue_id>/queue/move-history",
          "handler": "get_review_queue_item_queue_move_history",
          "file": "handlers.py",
          "line": 336,
          "status": "unused",
          "dead_functions": [
            "logic/review_queue.py::get_queue_move_history",
            "models/queue_move_history.py::get_queue_move_history"
          ]
        },
        {
          "method": "POST",
          "path": "/review-queue/<int:review_queue_id>/rejection",
          "handler": "create_rejection",
          "file": "handlers.py",
          "line": 381,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/review-queue/<int:review_queue_id>/unlock",
          "handler": "unlock_review_queue_item",
          "file": "handlers.py",
          "line": 296,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/review-queue/dataloader",
          "handler": "get_review_queue_items_dataloader",
          "file": "handlers.py",
          "line": 216,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/review-queue/product/<int:product_id>",
          "handler": "unsubmit_product",
          "file": "handlers.py",
          "line": 256,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/review-queue/product/<int:product_id>",
          "handler": "insert_review_queue",
          "file": "handlers.py",
          "line": 244,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/review-queue/product/<int:product_id>/eligibility-check",
          "handler": "review_queue_product_eligibility_check",
          "file": "handlers.py",
          "line": 276,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/review-queue/product/<int:product_id>/unsubmit",
          "handler": "unsubmit_product_with_reason",
          "file": "handlers.py",
          "line": 263,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/review-queue/target-group/dataloader",
          "handler": "get_target_group_by_item_ids_dataloader",
          "file": "handlers.py",
          "line": 230,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/review/<int:review_id>/apply-revisions-legacy",
          "handler": "apply_revisions_if_applicable",
          "file": "handlers.py",
          "line": 448,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/review/<int:review_id>/email-notification",
          "handler": "send_email_notification",
          "file": "handlers.py",
          "line": 441,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/score/<int:review_queue_id>",
          "handler": "get_score",
          "file": "handlers.py",
          "line": 626,
          "status": "unused",
          "dead_functions": [
            "logic/score_history.py::get_score",
            "models/score_history.py::get_score"
          ]
        },
        {
          "method": "POST",
          "path": "/score/<int:review_queue_id>",
          "handler": "add_score",
          "file": "handlers.py",
          "line": 607,
          "status": "unused",
          "dead_functions": [
            "logic/score_history.py::score_review_queue_item",
            "models/score_history.py::add_score"
          ]
        },
        {
          "method": "GET",
          "path": "/status/<int:product_id>",
          "handler": "get_status",
          "file": "handlers.py",
          "line": 434,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/subaccount-note/dataloader",
          "handler": "dataload_subaccount_notes",
          "file": "handlers.py",
          "line": 566,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/subaccount-note/subaccount/<int:subaccount_id>",
          "handler": "get_subaccount_note",
          "file": "handlers.py",
          "line": 545,
          "status": "unused",
          "dead_functions": [
            "logic/account_note.py::get_subaccount_note"
          ]
        },
        {
          "method": "PUT",
          "path": "/subaccount-note/subaccount/<int:subaccount_id>",
          "handler": "add_subaccount_note",
          "file": "handlers.py",
          "line": 591,
          "status": "unused",
          "dead_functions": [
            "logic/account_note.py::add_subaccount_note"
          ]
        },
        {
          "method": "GET",
          "path": "/target-groups",
          "handler": "get_all_target_groups",
          "file": "handlers.py",
          "line": 461,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/account_note.py::add_subaccount_note",
        "logic/account_note.py::get_account_note",
        "logic/account_note.py::get_subaccount_note",
        "logic/canned_response.py::get_canned_response",
        "logic/canned_response.py::get_canned_response_categories",
        "logic/review_queue.py::get_queue_move_history",
        "logic/score_history.py::get_score",
        "logic/score_history.py::score_review_queue_item",
        "models/queue_move_history.py::get_queue_move_history",
        "models/score_history.py::add_score",
        "models/score_history.py::get_score"
      ]
    },
    {
      "name": "ows-product-staging",
      "framework": "fastapi",
      "repo_url": "https://github.com/theorchard/ows-product-staging.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 52,
        "used": {
          "count": 35,
          "percent": 67.3
        },
        "unused": {
          "count": 17,
          "percent": 32.7
        }
      },
      "functions": {
        "total": 56,
        "dead": 14,
        "dead_percent": 25.0
      },
      "details": [
        {
          "method": "POST",
          "path": "/assets/upload",
          "handler": "assets_upload",
          "file": "bulk_session_assets.py",
          "line": 222,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/assets/upload/google/oauth/exchange",
          "handler": "google_auth_exchange",
          "file": "bulk_session_assets.py",
          "line": 249,
          "status": "unused",
          "dead_functions": [
            "logic/google_auth.py::google_auth_exchange"
          ]
        },
        {
          "method": "PATCH",
          "path": "/assets/upload/{s3_filename:path}",
          "handler": "complete_asset_upload",
          "file": "bulk_session_assets.py",
          "line": 268,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk-session",
          "handler": "create",
          "file": "bulk_session.py",
          "line": 49,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk-session-asset-files/bulk-session-id/dataloader",
          "handler": "dataload_assets_by_bulk_session_id",
          "file": "bulk_session_assets.py",
          "line": 199,
          "status": "unused",
          "dead_functions": [
            "logic/bulk_session_asset_file.py::get_assets_by_bulk_session_ids"
          ]
        },
        {
          "method": "PUT",
          "path": "/bulk-session-ingestion-product",
          "handler": "upsert_bulk_session_ingestion_product",
          "file": "bulk_session_ingestion.py",
          "line": 370,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/bulk-session-ingestion-product/product-code/{product_code}",
          "handler": "get_latest_ingestion_product_by_product_code",
          "file": "bulk_session_ingestion.py",
          "line": 405,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/bulk-session-ingestion-product/product-code/{product_code}/bulk-session/{bulk_session_id}",
          "handler": "get_latest_ingestion_product_by_code_and_session",
          "file": "bulk_session_ingestion.py",
          "line": 433,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/bulk-session-ingestion-product/{bulk_session_ingestion_product_id}",
          "handler": "update_bulk_session_ingestion_product_status",
          "file": "bulk_session_ingestion.py",
          "line": 258,
          "status": "unused",
          "dead_functions": [
            "logic/bulk_session_ingestion_product.py::update_bulk_session_ingestion_product_status"
          ]
        },
        {
          "method": "POST",
          "path": "/bulk-session-ingestion-product/{bulk_session_ingestion_product_id}/track",
          "handler": "create_bulk_session_ingestion_track",
          "file": "bulk_session_ingestion.py",
          "line": 284,
          "status": "unused",
          "dead_functions": [
            "logic/bulk_session_ingestion_track.py::create_bulk_session_ingestion_track"
          ]
        },
        {
          "method": "PUT",
          "path": "/bulk-session-ingestion-product/{bulk_session_ingestion_product_id}/track",
          "handler": "upsert_bulk_session_ingestion_track",
          "file": "bulk_session_ingestion.py",
          "line": 309,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/bulk-session-ingestion-project/{bulk_session_ingestion_id}/upsert",
          "handler": "upsert_bulk_session_ingestion_project",
          "file": "bulk_session_ingestion.py",
          "line": 339,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk-session-ingestion/bulk-session-id/dataloader",
          "handler": "dataload_ingestions_by_bulk_session_id",
          "file": "bulk_session_ingestion.py",
          "line": 189,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/bulk-session-ingestion/to-finalize",
          "handler": "get_ingestions_to_finalize",
          "file": "bulk_session_ingestion.py",
          "line": 65,
          "status": "unused",
          "dead_functions": [
            "logic/bulk_session_ingestion.py::get_ingestions_to_finalize"
          ]
        },
        {
          "method": "PATCH",
          "path": "/bulk-session-ingestion/update/{bulk_session_ingestion_id}",
          "handler": "update",
          "file": "bulk_session_ingestion.py",
          "line": 135,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/bulk-session-ingestion/{bulk_session_ingestion_id}",
          "handler": "get",
          "file": "bulk_session_ingestion.py",
          "line": 81,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/bulk-session-ingestion/{bulk_session_ingestion_id}/execution",
          "handler": "upsert_bulk_session_ingestion_execution",
          "file": "bulk_session_ingestion.py",
          "line": 161,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk-session-ingestion/{bulk_session_ingestion_id}/product",
          "handler": "create_bulk_session_ingestion_product",
          "file": "bulk_session_ingestion.py",
          "line": 213,
          "status": "unused",
          "dead_functions": [
            "logic/bulk_session_ingestion_product.py::create_bulk_session_ingestion_product"
          ]
        },
        {
          "method": "GET",
          "path": "/bulk-session-ingestion/{bulk_session_ingestion_id}/products",
          "handler": "get_products",
          "file": "bulk_session_ingestion.py",
          "line": 107,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/bulk-session-ingestion/{bulk_session_ingestion_id}/report",
          "handler": "get_ingestion_report",
          "file": "bulk_session_ingestion.py",
          "line": 235,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk-session/products/dataloader",
          "handler": "dataload_bulk_sessions_by_product_id",
          "file": "bulk_session.py",
          "line": 371,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk-session/projects/dataloader",
          "handler": "dataload_bulk_sessions_by_project_id",
          "file": "bulk_session.py",
          "line": 391,
          "status": "unused",
          "dead_functions": [
            "logic/bulk_session.py::get_bulk_session_ids_by_project_ids"
          ]
        },
        {
          "method": "POST",
          "path": "/bulk-session/queue/ingest",
          "handler": "ingest_bulk_session",
          "file": "bulk_session.py",
          "line": 147,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk-session/tracks/dataloader",
          "handler": "dataload_bulk_sessions_by_track_id",
          "file": "bulk_session.py",
          "line": 410,
          "status": "unused",
          "dead_functions": [
            "logic/bulk_session.py::get_bulk_session_ids_by_track_ids"
          ]
        },
        {
          "method": "GET",
          "path": "/bulk-session/{bulk_session_id}",
          "handler": "get",
          "file": "bulk_session.py",
          "line": 76,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/bulk-session/{bulk_session_id}",
          "handler": "update",
          "file": "bulk_session.py",
          "line": 99,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk-session/{bulk_session_id}",
          "handler": "create_ingestion",
          "file": "bulk_session.py",
          "line": 124,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk-session/{bulk_session_id}/asset-file/dataloader",
          "handler": "dataload_assets",
          "file": "bulk_session_assets.py",
          "line": 176,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/bulk-session/{bulk_session_id}/asset-file/{bulk_session_asset_file_id}",
          "handler": "delete_asset",
          "file": "bulk_session_assets.py",
          "line": 150,
          "status": "unused",
          "dead_functions": [
            "logic/bulk_session_asset_file.py::delete_bulk_session_asset_file_and_record"
          ]
        },
        {
          "method": "PATCH",
          "path": "/bulk-session/{bulk_session_id}/asset-transfer-job/{bulk_session_asset_cloud_transfer_job_id}",
          "handler": "update_asset_transfer_job",
          "file": "bulk_session_assets.py",
          "line": 300,
          "status": "unused",
          "dead_functions": [
            "logic/bulk_session_asset_cloud_transfer_job.py::update_asset_transfer_job"
          ]
        },
        {
          "method": "GET",
          "path": "/bulk-session/{bulk_session_id}/assets",
          "handler": "get_assets",
          "file": "bulk_session_assets.py",
          "line": 57,
          "status": "unused",
          "dead_functions": [
            "logic/bulk_session_asset_file.py::get_bulk_session_assets"
          ]
        },
        {
          "method": "GET",
          "path": "/bulk-session/{bulk_session_id}/assets/original-filename/{filename}",
          "handler": "get_asset_by_original_filename",
          "file": "bulk_session_assets.py",
          "line": 87,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/bulk-session/{bulk_session_id}/assets/report",
          "handler": "get_asset_report",
          "file": "bulk_session_assets.py",
          "line": 330,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/bulk-session/{bulk_session_id}/assets/{s3_filename:path}",
          "handler": "update_asset",
          "file": "bulk_session_assets.py",
          "line": 119,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/bulk-session/{bulk_session_id}/metadata-errors.json",
          "handler": "get_metadata_errors",
          "file": "bulk_session.py",
          "line": 176,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/bulk-session/{bulk_session_id}/metadata-file/{bulk_session_metadata_file_id}",
          "handler": "get",
          "file": "bulk_session_metadata.py",
          "line": 42,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk-session/{bulk_session_id}/metadata-file/{bulk_session_metadata_file_id}/finalize",
          "handler": "finalize_bulk_session_metadata_file",
          "file": "bulk_session_metadata.py",
          "line": 99,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/bulk-session/{bulk_session_id}/metadata-file/{bulk_session_metadata_file_id}/link",
          "handler": "get_link",
          "file": "bulk_session_metadata.py",
          "line": 70,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/bulk-template",
          "handler": "get_bulk_template",
          "file": "bulk_session.py",
          "line": 257,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/bulk-template/vendor/poll/{id}",
          "handler": "poll_bulk_template_for_vendor",
          "file": "bulk_session.py",
          "line": 352,
          "status": "unused",
          "dead_functions": [
            "logic/bulk_template.py::poll_label_template"
          ]
        },
        {
          "method": "POST",
          "path": "/bulk-template/vendor/{vendor_id}",
          "handler": "get_bulk_template_for_vendor",
          "file": "bulk_session.py",
          "line": 284,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/created-bulk-sessions",
          "handler": "get_created_bulk_sessions",
          "file": "bulk_session.py",
          "line": 211,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/has-created-bulk-sessions",
          "handler": "has_created_bulk_sessions",
          "file": "bulk_session.py",
          "line": 242,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "hello",
          "file": "infra.py",
          "line": 18,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/metadata-hydration/{s3_filename:path}",
          "handler": "hydrate_metadata_json",
          "file": "bulk_session_metadata.py",
          "line": 135,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/metadata/upload",
          "handler": "metadata_upload",
          "file": "bulk_session_metadata.py",
          "line": 161,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/metadata/upload/{s3_filename:path}",
          "handler": "presigned_urls",
          "file": "bulk_session_metadata.py",
          "line": 188,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/metadata/upload/{s3_filename:path}",
          "handler": "complete_metadata_upload",
          "file": "bulk_session_metadata.py",
          "line": 224,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/task-failure/{token}",
          "handler": "task_failure",
          "file": "bulk_session.py",
          "line": 330,
          "status": "unused",
          "dead_functions": [
            "logic/bulk_template.py::mark_task_failure"
          ]
        },
        {
          "method": "POST",
          "path": "/task-success/{token}",
          "handler": "task_success",
          "file": "bulk_session.py",
          "line": 309,
          "status": "unused",
          "dead_functions": [
            "logic/bulk_template.py::mark_task_success"
          ]
        },
        {
          "method": "GET",
          "path": "/validation-enums",
          "handler": "get",
          "file": "allowed_value_sets.py",
          "line": 17,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/validation-enums",
          "handler": "post",
          "file": "allowed_value_sets.py",
          "line": 36,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/bulk_session.py::get_bulk_session_ids_by_project_ids",
        "logic/bulk_session.py::get_bulk_session_ids_by_track_ids",
        "logic/bulk_session_asset_cloud_transfer_job.py::update_asset_transfer_job",
        "logic/bulk_session_asset_file.py::delete_bulk_session_asset_file_and_record",
        "logic/bulk_session_asset_file.py::get_assets_by_bulk_session_ids",
        "logic/bulk_session_asset_file.py::get_bulk_session_assets",
        "logic/bulk_session_ingestion.py::get_ingestions_to_finalize",
        "logic/bulk_session_ingestion_product.py::create_bulk_session_ingestion_product",
        "logic/bulk_session_ingestion_product.py::update_bulk_session_ingestion_product_status",
        "logic/bulk_session_ingestion_track.py::create_bulk_session_ingestion_track",
        "logic/bulk_template.py::mark_task_failure",
        "logic/bulk_template.py::mark_task_success",
        "logic/bulk_template.py::poll_label_template",
        "logic/google_auth.py::google_auth_exchange"
      ]
    },
    {
      "name": "ows-product-store-mapping",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-product-store-mapping.git",
      "team": "content-delivery-asset-management",
      "endpoints": {
        "total": 6,
        "used": {
          "count": 2,
          "percent": 33.3
        },
        "unused": {
          "count": 4,
          "percent": 66.7
        }
      },
      "functions": {
        "total": 5,
        "dead": 3,
        "dead_percent": 60.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 25,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/mapping/product/<int:product_id>/store/<int:store_id>/product",
          "handler": "delete_product",
          "file": "handlers.py",
          "line": 92,
          "status": "unused",
          "dead_functions": [
            "logic/product.py::delete_product"
          ]
        },
        {
          "method": "POST",
          "path": "/mapping/product/<int:product_id>/store/<int:store_id>/product",
          "handler": "save_product_mapping_data",
          "file": "handlers.py",
          "line": 109,
          "status": "unused",
          "dead_functions": [
            "logic/product.py::save_product_data"
          ]
        },
        {
          "method": "GET",
          "path": "/mapping/product/<product_id>/store/<dms_id>",
          "handler": "get_product_mapping_with_tracks",
          "file": "handlers.py",
          "line": 48,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/mapping/product/<product_id>/store/<store_id>/product",
          "handler": "get_product_mapping",
          "file": "handlers.py",
          "line": 62,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/mapping/track/<track_unique_id>/store/<dms_id>/track",
          "handler": "get_track_mapping",
          "file": "handlers.py",
          "line": 76,
          "status": "unused",
          "dead_functions": [
            "logic/track.py::get_track"
          ]
        }
      ],
      "dead_functions": [
        "logic/product.py::delete_product",
        "logic/product.py::save_product_data",
        "logic/track.py::get_track"
      ]
    },
    {
      "name": "ows-product-workflow",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-product-workflow.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 18,
        "used": {
          "count": 15,
          "percent": 83.3
        },
        "unused": {
          "count": 3,
          "percent": 16.7
        }
      },
      "functions": {
        "total": 18,
        "dead": 3,
        "dead_percent": 16.7
      },
      "details": [
        {
          "method": "DELETE",
          "path": "/correction/<int:release_correction_id>",
          "handler": "delete_correction_for_product",
          "file": "handlers.py",
          "line": 156,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/correction/<int:release_correction_id>",
          "handler": "get_correction",
          "file": "handlers.py",
          "line": 110,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/correction/<int:release_correction_id>",
          "handler": "update_release_correction",
          "file": "handlers.py",
          "line": 142,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/correction/<int:release_correction_id>/details",
          "handler": "upsert_correction_details",
          "file": "handlers.py",
          "line": 131,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 36,
          "status": "unused",
          "dead_functions": [
            "logic/hello.py::health_check"
          ]
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/approve",
          "handler": "approve_product",
          "file": "handlers.py",
          "line": 163,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/correction",
          "handler": "get_last_release_correction_for_product",
          "file": "handlers.py",
          "line": 103,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/correction",
          "handler": "create_correction_for_product",
          "file": "handlers.py",
          "line": 118,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/lyrics",
          "handler": "get_track_lyrics_for_product",
          "file": "handlers.py",
          "line": 186,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/lyrics/<int:track_id>",
          "handler": "get_lyrics_for_track",
          "file": "handlers.py",
          "line": 201,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/metadata_queue",
          "handler": "create_metadata_update",
          "file": "handlers.py",
          "line": 232,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/process_metadata_queue",
          "handler": "process_metadata",
          "file": "handlers.py",
          "line": 224,
          "status": "unused",
          "dead_functions": [
            "logic/metadata_queue.py::process"
          ]
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/release-approval",
          "handler": "get_last_release_approval_for_product",
          "file": "handlers.py",
          "line": 63,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/release-approval",
          "handler": "create_release_approval_for_product",
          "file": "handlers.py",
          "line": 73,
          "status": "unused",
          "dead_functions": [
            "logic/release_approval_queue.py::create_release_approval_queue_record"
          ]
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/submission",
          "handler": "submit_product_by_id",
          "file": "handlers.py",
          "line": 84,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/unsubmit",
          "handler": "unsubmit_product_by_id",
          "file": "handlers.py",
          "line": 217,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/release-approval/<int:release_approval_id>/rejections",
          "handler": "get_rejection_notes",
          "file": "handlers.py",
          "line": 45,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/release-approval/rejections",
          "handler": "update_rejections",
          "file": "handlers.py",
          "line": 53,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/hello.py::health_check",
        "logic/metadata_queue.py::process",
        "logic/release_approval_queue.py::create_release_approval_queue_record"
      ]
    },
    {
      "name": "ows-project-manager",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-project-manager.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 25,
        "used": {
          "count": 23,
          "percent": 92.0
        },
        "unused": {
          "count": 2,
          "percent": 8.0
        }
      },
      "functions": {
        "total": 22,
        "dead": 4,
        "dead_percent": 18.2
      },
      "details": [
        {
          "method": "HEAD",
          "path": "/ownership/<account_type>/<int:account_id>/project/<int:project_id>",
          "handler": "check_project_ownership",
          "file": "handlers.py",
          "line": 457,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/genres",
          "handler": "get_product_genres",
          "file": "handlers.py",
          "line": 57,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/genres/<int:genre_id>/subgenres",
          "handler": "get_product_subgenres",
          "file": "handlers.py",
          "line": 112,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/types",
          "handler": "get_product_types",
          "file": "handlers.py",
          "line": 142,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/project",
          "handler": "get_project_by_parameter",
          "file": "handlers.py",
          "line": 223,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/project",
          "handler": "post_project",
          "file": "handlers.py",
          "line": 160,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/project/<int:project_id>",
          "handler": "delete_project",
          "file": "handlers.py",
          "line": 293,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/project/<int:project_id>",
          "handler": "get_project",
          "file": "handlers.py",
          "line": 250,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/project/<int:project_id>",
          "handler": "update_project",
          "file": "handlers.py",
          "line": 193,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/project/<int:project_id>/document",
          "handler": "get_project_document",
          "file": "handlers.py",
          "line": 540,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/project/<int:project_id>/hard-delete",
          "handler": "hard_delete_project",
          "file": "handlers.py",
          "line": 315,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/project/<int:project_id>/mkt_priority",
          "handler": "delete_mkt_priority_for_project",
          "file": "handlers.py",
          "line": 711,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/project/<int:project_id>/mkt_priority",
          "handler": "get_mkt_priority",
          "file": "handlers.py",
          "line": 644,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/project/<int:project_id>/mkt_priority",
          "handler": "set_mkt_priority",
          "file": "handlers.py",
          "line": 612,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/project/<int:project_id>/mkt_priority/<int:projection_id>",
          "handler": "delete_mkt_priority",
          "file": "handlers.py",
          "line": 686,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/project/<int:project_id>/product/<int:product_id>",
          "handler": "get_product_for_project",
          "file": "handlers.py",
          "line": 363,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/project/<int:project_id>/product/imprints",
          "handler": "get_product_imprints",
          "file": "handlers.py",
          "line": 85,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/project/<int:project_id>/products",
          "handler": "get_products_for_project",
          "file": "handlers.py",
          "line": 336,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/project/available",
          "handler": "get_project_codes_available_for_use",
          "file": "handlers.py",
          "line": 276,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/project/mkt_priority/dataloader",
          "handler": "dataload_mkt_priority",
          "file": "handlers.py",
          "line": 659,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/projects",
          "handler": "get_projects",
          "file": "handlers.py",
          "line": 394,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/public/product/genres",
          "handler": "get_public_product_genres",
          "file": "handlers.py",
          "line": 70,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/public/product/genres/<int:genre_id>/subgenres",
          "handler": "get_public_product_subgenres",
          "file": "handlers.py",
          "line": 126,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/report/<int:project_id>",
          "handler": "get_report_metadata",
          "file": "handlers.py",
          "line": 514,
          "status": "unused",
          "dead_functions": [
            "logic/label_copy_export.py::get_generated_metadata_for_project",
            "models/label_copy_history.py::get_job_by_project_id"
          ]
        },
        {
          "method": "POST",
          "path": "/report/<int:project_id>",
          "handler": "post_report_generation",
          "file": "handlers.py",
          "line": 495,
          "status": "unused",
          "dead_functions": [
            "logic/label_copy_export.py::trigger_project_metadata_generation",
            "models/label_copy_history.py::create_job"
          ]
        }
      ],
      "dead_functions": [
        "logic/label_copy_export.py::get_generated_metadata_for_project",
        "logic/label_copy_export.py::trigger_project_metadata_generation",
        "models/label_copy_history.py::create_job",
        "models/label_copy_history.py::get_job_by_project_id"
      ]
    },
    {
      "name": "ows-promo-player",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-promo-player.git",
      "team": "content-review-management",
      "endpoints": {
        "total": 13,
        "used": {
          "count": 6,
          "percent": 46.2
        },
        "unused": {
          "count": 7,
          "percent": 53.8
        }
      },
      "functions": {
        "total": 10,
        "dead": 10,
        "dead_percent": 100.0
      },
      "details": [
        {
          "method": "DELETE",
          "path": "/admin/product/<product_id>/players",
          "handler": "delete_promo_players_by_product_id",
          "file": "handlers.py",
          "line": 259,
          "status": "unused",
          "dead_functions": [
            "logic/promo_player.py::delete_by_product_id",
            "models/promo_player.py::delete_by_product_id"
          ]
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 34,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/player",
          "handler": "create_promo_player_without_product_id",
          "file": "handlers.py",
          "line": 67,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/player/<promo_player_id>",
          "handler": "update_promo_player_without_product",
          "file": "handlers.py",
          "line": 150,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/player/<promo_player_id>/track/<track_id>",
          "handler": "delete_promo_player_track",
          "file": "handlers.py",
          "line": 189,
          "status": "unused",
          "dead_functions": [
            "logic/promo_player_track.py::delete",
            "models/promo_player_track.py::delete"
          ]
        },
        {
          "method": "POST",
          "path": "/player/<promo_player_id>/track/<track_id>",
          "handler": "create_promo_player_track",
          "file": "handlers.py",
          "line": 84,
          "status": "unused",
          "dead_functions": [
            "logic/promo_player_track.py::create",
            "models/promo_player_track.py::create"
          ]
        },
        {
          "method": "PUT",
          "path": "/player/<promo_player_id>/track/<track_id>",
          "handler": "update_promo_player_track",
          "file": "handlers.py",
          "line": 166,
          "status": "unused",
          "dead_functions": [
            "logic/promo_player_track.py::update",
            "models/promo_player_track.py::update"
          ]
        },
        {
          "method": "GET",
          "path": "/player/code/<code>",
          "handler": "get_promo_player_by_code",
          "file": "handlers.py",
          "line": 246,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/players",
          "handler": "get_promo_players_by_vendor_id",
          "file": "handlers.py",
          "line": 228,
          "status": "unused",
          "dead_functions": [
            "logic/promo_player.py::get_by_vendor_id",
            "models/promo_player.py::get_by_vendor_id"
          ]
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/player",
          "handler": "get_active_promo_player_by_product_id",
          "file": "handlers.py",
          "line": 107,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<product_id>/player",
          "handler": "create_promo_player",
          "file": "handlers.py",
          "line": 40,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<product_id>/player/<promo_player_id>",
          "handler": "update_promo_player",
          "file": "handlers.py",
          "line": 126,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>/players",
          "handler": "get_promo_players_by_product_id",
          "file": "handlers.py",
          "line": 209,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/promo_player.py::delete_by_product_id",
        "logic/promo_player.py::get_by_vendor_id",
        "logic/promo_player_track.py::create",
        "logic/promo_player_track.py::delete",
        "logic/promo_player_track.py::update",
        "models/promo_player.py::delete_by_product_id",
        "models/promo_player.py::get_by_vendor_id",
        "models/promo_player_track.py::create",
        "models/promo_player_track.py::delete",
        "models/promo_player_track.py::update"
      ]
    },
    {
      "name": "ows-reporting",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-reporting",
      "team": "content-creation-management",
      "endpoints": {
        "total": 11,
        "used": {
          "count": 8,
          "percent": 72.7
        },
        "unused": {
          "count": 3,
          "percent": 27.3
        }
      },
      "functions": {
        "total": 12,
        "dead": 2,
        "dead_percent": 16.7
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 40,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<string:local_product_cd>/overview/<string:territory>",
          "handler": "get_product_overview",
          "file": "handlers.py",
          "line": 240,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/report/<string:report_name>",
          "handler": "get_data",
          "file": "handlers.py",
          "line": 186,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/report/<string:report_name>/filters",
          "handler": "get_filters",
          "file": "handlers.py",
          "line": 213,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/report/<string:report_token>/embed",
          "handler": "generate_embed_url",
          "file": "handlers.py",
          "line": 73,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/report/<string:report_token>/report_run/<string:report_run_token>",
          "handler": "report_run",
          "file": "handlers.py",
          "line": 46,
          "status": "unused",
          "dead_functions": [
            "logic/mode.py::report_run_status"
          ]
        },
        {
          "method": "POST",
          "path": "/report/<string:report_token>/run",
          "handler": "initiate_report_run",
          "file": "handlers.py",
          "line": 92,
          "status": "unused",
          "dead_functions": [
            "logic/mode.py::initiate_report_run"
          ]
        },
        {
          "method": "POST",
          "path": "/report/preset",
          "handler": "create_report_preset",
          "file": "handlers.py",
          "line": 138,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/report/preset/<int:preset_id>",
          "handler": "delete_report_presets",
          "file": "handlers.py",
          "line": 163,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/report/presets",
          "handler": "get_report_presets",
          "file": "handlers.py",
          "line": 119,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/space/<string:space_name>/report/<string:report_name>",
          "handler": "get_report_token",
          "file": "handlers.py",
          "line": 108,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/mode.py::initiate_report_run",
        "logic/mode.py::report_run_status"
      ]
    },
    {
      "name": "ows-royalties",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-royalties.git",
      "team": "abacus",
      "endpoints": {
        "total": 175,
        "used": {
          "count": 135,
          "percent": 77.1
        },
        "unused": {
          "count": 40,
          "percent": 22.9
        }
      },
      "functions": {
        "total": 88,
        "dead": 16,
        "dead_percent": 18.2
      },
      "details": [
        {
          "method": "GET",
          "path": "/abacus-adjustments/download/template",
          "handler": "downloadAbacusAdjustmentsTemplate",
          "file": "statement_period_adjustment_file.py",
          "line": 184,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/account/<int:account_id>/contract-terms/",
          "handler": "get_contract_terms_for_account_and_term_type",
          "file": "contract_term.py",
          "line": 194,
          "status": "unused",
          "dead_functions": [
            "logic/contract_term.py::get_contract_terms_for_account_and_term_type"
          ]
        },
        {
          "method": "POST",
          "path": "/accounting-period",
          "handler": "AccountingPeriodCreateView",
          "file": "accounting_period.py",
          "line": 170,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/accounting-period/<int:accounting_period_id>/accounting-period-report",
          "handler": "AccountingPeriodReportCreateView",
          "file": "accounting_period_report.py",
          "line": 39,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/accounting-period/<int:accounting_period_id>/accounting-period-reports",
          "handler": "get_acc_period_reports_by_acc_period_id",
          "file": "accounting_period_report.py",
          "line": 52,
          "status": "unused",
          "dead_functions": [
            "logic/accounting_period_report.py::get_acc_period_reports_by_acc_period_id"
          ]
        },
        {
          "method": "GET",
          "path": "/accounting-period/<int:accounting_period_id>/report-type/<string:report_type>/accounting-period-report",
          "handler": "get_acc_period_report",
          "file": "accounting_period_report.py",
          "line": 71,
          "status": "unused",
          "dead_functions": [
            "logic/accounting_period_report.py::get_acc_period_report"
          ]
        },
        {
          "method": "GET",
          "path": "/accounting-period/<int:object_id>",
          "handler": "AccountingPeriodItemView",
          "file": "accounting_period.py",
          "line": 182,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/accounting-period/<int:object_id>",
          "handler": "AccountingPeriodItemView",
          "file": "accounting_period.py",
          "line": 182,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/accounting-period/<int:object_id>/accounting-runs",
          "handler": "AccountingRunList",
          "file": "accounting_period.py",
          "line": 196,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/accounting-period/<int:object_id>/sales-files",
          "handler": "AccountingPeriodSalesFilesListView",
          "file": "accounting_period.py",
          "line": 188,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/accounting-periods",
          "handler": "AccountingPeriodList",
          "file": "accounting_period.py",
          "line": 176,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/accounting-run/<int:accounting_run_id>/run-controller/contracts",
          "handler": "get_contracts_by_accounting_run",
          "file": "accounting_run.py",
          "line": 88,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/accounting-run/<int:object_id>",
          "handler": "AccountingRunItemView",
          "file": "accounting_run.py",
          "line": 78,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/accounting-run/<int:object_id>",
          "handler": "AccountingRunItemView",
          "file": "accounting_run.py",
          "line": 78,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/accounting-run/<int:object_id>/accounting-period",
          "handler": "get_accounting_period_by_accounting_run_id",
          "file": "accounting_period.py",
          "line": 206,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/accounting-run/<int:object_id>/summary/download",
          "handler": "download_summary",
          "file": "accounting_run.py",
          "line": 60,
          "status": "unused",
          "dead_functions": [
            "logic/accounting_run.py::get_run_summary_items_csv"
          ]
        },
        {
          "method": "GET",
          "path": "/contract",
          "handler": "ContractCreateView",
          "file": "contract.py",
          "line": 186,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/contract-advance/<int:object_id>/",
          "handler": "ContractAdvanceItemView",
          "file": "contract_advance.py",
          "line": 139,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-advance/<int:object_id>/",
          "handler": "ContractAdvanceItemView",
          "file": "contract_advance.py",
          "line": 139,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract-advance/<int:object_id>/",
          "handler": "ContractAdvanceItemView",
          "file": "contract_advance.py",
          "line": 139,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/contract-flowthrough/<int:object_id>/",
          "handler": "ContractFlowthroughItemView",
          "file": "contract_flowthrough.py",
          "line": 101,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-flowthrough/<int:object_id>/",
          "handler": "ContractFlowthroughItemView",
          "file": "contract_flowthrough.py",
          "line": 101,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract-flowthrough/<int:object_id>/",
          "handler": "ContractFlowthroughItemView",
          "file": "contract_flowthrough.py",
          "line": 101,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-lifecycle-schedule-detail/<int:object_id>",
          "handler": "ContractLifecycleScheduleDetailItemView",
          "file": "contract_lifecycle_schedule_detail.py",
          "line": 46,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-lifecycle-schedule-detail/dataloader",
          "handler": "get_contract_lifecycle_schedule_details_by_ids",
          "file": "contract_lifecycle_schedule_detail.py",
          "line": 58,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-lifecycle-schedule/<int:contract_lifecycle_schedule_id>/contract-lifecycle/",
          "handler": "get_contract_lifecycle_by_schedule_id",
          "file": "contract_lifecycle.py",
          "line": 240,
          "status": "unused",
          "dead_functions": [
            "logic/contract_lifecycle.py::get_contract_lifecycle_by_schedule_id"
          ]
        },
        {
          "method": "GET",
          "path": "/contract-lifecycle-schedule/<int:object_id>/",
          "handler": "ContractLifecycleScheduleItemView",
          "file": "contract_lifecycle_schedule.py",
          "line": 64,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-lifecycle-schedules/dataloader",
          "handler": "get_contract_lifecycle_schedules_by_ids",
          "file": "contract_lifecycle_schedule.py",
          "line": 109,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-lifecycle/<int:object_id>/",
          "handler": "ContractLifecycleItemView",
          "file": "contract_lifecycle.py",
          "line": 92,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-lifecycles/activable",
          "handler": "get_contract_lifecycles_to_be_activated",
          "file": "contract_lifecycle.py",
          "line": 341,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-lifecycles/activate",
          "handler": "activate_contract_lifecycles",
          "file": "contract_lifecycle.py",
          "line": 365,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-lifecycles/dataloader/",
          "handler": "get_contract_lifecycles_by_ids",
          "file": "contract_lifecycle.py",
          "line": 212,
          "status": "unused",
          "dead_functions": [
            "logic/contract_lifecycle.py::get_contract_lifecycles_by_ids"
          ]
        },
        {
          "method": "POST",
          "path": "/contract-lifecycles/renew/",
          "handler": "renew_contract_lifecycles",
          "file": "contract_lifecycle.py",
          "line": 390,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-lifecycles/renewable/",
          "handler": "get_contract_lifecycles_to_be_renewed",
          "file": "contract_lifecycle.py",
          "line": 261,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-lifecycles/terminable/",
          "handler": "get_contract_lifecycles_to_be_terminated",
          "file": "contract_lifecycle.py",
          "line": 287,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-lifecycles/terminate/",
          "handler": "terminate_contract_lifecycles",
          "file": "contract_lifecycle.py",
          "line": 315,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/contract-mechanical-deduction/<int:object_id>",
          "handler": "ContractMechanicalDeductionItemView",
          "file": "contract_mechanical_deduction.py",
          "line": 126,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-mechanical-deduction/<int:object_id>",
          "handler": "ContractMechanicalDeductionItemView",
          "file": "contract_mechanical_deduction.py",
          "line": 126,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract-mechanical-deduction/<int:object_id>",
          "handler": "ContractMechanicalDeductionItemView",
          "file": "contract_mechanical_deduction.py",
          "line": 126,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-party/",
          "handler": "ContractPartyCreateView",
          "file": "contract_party.py",
          "line": 66,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/contract-party/<int:object_id>/",
          "handler": "ContractPartyItemView",
          "file": "contract_party.py",
          "line": 113,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-reserves/",
          "handler": "get_contract_reserves_by_ids",
          "file": "contract_reserve.py",
          "line": 98,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-template/<contract_template_id>/contract",
          "handler": "create_contract_from_template_id",
          "file": "contract_template.py",
          "line": 19,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract-term-conditions/soft-delete",
          "handler": "bulk_soft_delete_contract_term_conditions",
          "file": "contract_term_condition.py",
          "line": 47,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-term/<int:contract_term_id>/conditions",
          "handler": "get_conditions_by_term_id",
          "file": "contract_term_condition.py",
          "line": 86,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-term/<int:contract_term_id>/conditions",
          "handler": "bulk_create_contract_term_conditions",
          "file": "contract_term_condition.py",
          "line": 28,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract-term/<int:contract_term_id>/conditions",
          "handler": "bulk_update_contract_term_conditions",
          "file": "contract_term_condition.py",
          "line": 67,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-term/<int:contract_term_id>/contract-term-schedules",
          "handler": "get_contract_term_schedules_by_term_id",
          "file": "contract_term_schedule.py",
          "line": 21,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/contract-term/<int:object_id>/",
          "handler": "ContractTermItemView",
          "file": "contract_term.py",
          "line": 120,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract-term/<int:object_id>/",
          "handler": "ContractTermItemView",
          "file": "contract_term.py",
          "line": 120,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract-term/<int:object_id>/",
          "handler": "ContractTermItemView",
          "file": "contract_term.py",
          "line": 120,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract-terms/snapshot",
          "handler": "get_tsv_contract_terms_snapshot",
          "file": "contract_term.py",
          "line": 172,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/contract/<int:contract_id>",
          "handler": "delete_contract",
          "file": "contract.py",
          "line": 491,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/<string:target_type>/parties",
          "handler": "get_contract_parties",
          "file": "contract_party.py",
          "line": 81,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/<int:contract_id>/advance/",
          "handler": "ContractAdvanceCreateView",
          "file": "contract_advance.py",
          "line": 42,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/advances/",
          "handler": "get_advances_by_contract_id",
          "file": "contract_advance.py",
          "line": 55,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/advances/<string:status>/",
          "handler": "get_advances_by_contract_id",
          "file": "contract_advance.py",
          "line": 55,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/can-be-deleted",
          "handler": "can_contract_be_deleted",
          "file": "contract.py",
          "line": 471,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/contract-flowthrough/",
          "handler": "get_contract_flowthrough_by_contract_id",
          "file": "contract_flowthrough.py",
          "line": 140,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/contract-flowthrough/",
          "handler": "ContractFlowthroughCreateView",
          "file": "contract_flowthrough.py",
          "line": 131,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/<int:contract_id>/contract-lifecycle-schedule/<int:contract_lifecycle_schedule_id>/contract-lifecycle/",
          "handler": "ContractLifecycleCreateView",
          "file": "contract_lifecycle.py",
          "line": 98,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/contract-lifecycle-schedules/",
          "handler": "get_contract_lifecycle_schedules_by_contract_id",
          "file": "contract_lifecycle_schedule.py",
          "line": 74,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/<int:contract_id>/contract-lifecycle-schedules/",
          "handler": "create_contract_lifecycle_schedules",
          "file": "contract_lifecycle_schedule.py",
          "line": 148,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract/<int:contract_id>/contract-lifecycle-schedules/",
          "handler": "update_contract_lifecycle_schedules",
          "file": "contract_lifecycle_schedule.py",
          "line": 181,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/contract-lifecycle/",
          "handler": "get_contract_lifecycle_by_contract_id",
          "file": "contract_lifecycle.py",
          "line": 108,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract/<int:contract_id>/contract-lifecycle/",
          "handler": "update_contract_lifecycle_by_contract_id",
          "file": "contract_lifecycle.py",
          "line": 140,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/contract-mechanical-deduction/",
          "handler": "ContractMechanicalDeductionCreateView",
          "file": "contract_mechanical_deduction.py",
          "line": 135,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/contract-mechanical-deductions/",
          "handler": "get_contract_mechanical_deductions_by_contract_id",
          "file": "contract_mechanical_deduction.py",
          "line": 146,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/<int:contract_id>/contract-mechanical-deductions/worldwide/",
          "handler": "create_contract_mechanical_deductions_worldwide",
          "file": "contract_mechanical_deduction.py",
          "line": 191,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/contract-term",
          "handler": "ContractTermCreateView",
          "file": "contract_term.py",
          "line": 114,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/exclusions/",
          "handler": "get_exclusions_by_contract",
          "file": "contract_exclusion.py",
          "line": 79,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/<int:contract_id>/exclusions/",
          "handler": "create_contract_exclusions",
          "file": "contract_exclusion.py",
          "line": 46,
          "status": "unused",
          "dead_functions": [
            "logic/contract_exclusion.py::create_contract_exclusions"
          ]
        },
        {
          "method": "PUT",
          "path": "/contract/<int:contract_id>/exclusions/",
          "handler": "update_contract_exclusions",
          "file": "contract_exclusion.py",
          "line": 136,
          "status": "unused",
          "dead_functions": [
            "logic/contract_exclusion.py::update_contract_exclusions"
          ]
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/legacy-contract",
          "handler": "get_legacy_contract_by_contract_id",
          "file": "legacy_contract.py",
          "line": 72,
          "status": "unused",
          "dead_functions": [
            "logic/legacy_contract.py::get_legacy_contract_by_contract_id"
          ]
        },
        {
          "method": "POST",
          "path": "/contract/<int:contract_id>/legacy-contract/",
          "handler": "LegacyContractCreateView",
          "file": "legacy_contract.py",
          "line": 41,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/parties/",
          "handler": "get_contract_parties",
          "file": "contract_party.py",
          "line": 81,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract/<int:contract_id>/reactivate",
          "handler": "reactivate_contract",
          "file": "contract.py",
          "line": 452,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/reserves/",
          "handler": "get_reserve_by_contract_id",
          "file": "contract_reserve.py",
          "line": 50,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:contract_id>/reserves/",
          "handler": "ContractReserveCreateView",
          "file": "contract_reserve.py",
          "line": 43,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract/<int:contract_id>/reserves/",
          "handler": "update_reserve_by_contract_id",
          "file": "contract_reserve.py",
          "line": 73,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract/<int:contract_id>/terminate",
          "handler": "terminate_contract",
          "file": "contract.py",
          "line": 436,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:object_id>",
          "handler": "ContractItemView",
          "file": "contract.py",
          "line": 180,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/contract/<int:object_id>",
          "handler": "ContractItemView",
          "file": "contract.py",
          "line": 180,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contract/<int:object_id>/sap",
          "handler": "ContractSapItemView",
          "file": "contract.py",
          "line": 174,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/contract-lifecycle-schedule/contract-lifecycle",
          "handler": "create_contract_with_lifecycle_and_schedules",
          "file": "contract.py",
          "line": 416,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/contract-lifecycle/dataloader",
          "handler": "get_contract_lifecycle_by_dataloaded_contract_id",
          "file": "contract_lifecycle.py",
          "line": 183,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contract/contract-reserves/",
          "handler": "get_contract_reserves_by_contract_ids",
          "file": "contract_reserve.py",
          "line": 132,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/",
          "handler": "ContractList",
          "file": "contract.py",
          "line": 170,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/",
          "handler": "get_contracts_by_ids",
          "file": "contract.py",
          "line": 192,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/<int:contract_id>/contract-terms",
          "handler": "get_contract_terms_by_contract_handler",
          "file": "contract_term.py",
          "line": 128,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/account/<int:account_id>",
          "handler": "get_contracts_by_account_handler",
          "file": "contract.py",
          "line": 261,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/account/dataloader",
          "handler": "get_contracts_by_account_dataloader_handler",
          "file": "contract.py",
          "line": 293,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/accounts",
          "handler": "get_contracts_by_accounts",
          "file": "contract.py",
          "line": 334,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/dataloader",
          "handler": "get_contracts_dataloaded",
          "file": "contract.py",
          "line": 216,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/mechanical-deductions/account/<int:account_id>/mechadmin",
          "handler": "get_mechadmin_for_account",
          "file": "contract_mechanical_deduction.py",
          "line": 266,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/contracts/mechanical-deductions/active",
          "handler": "get_active_contracts_with_mechanical_deductions",
          "file": "contract_mechanical_deduction.py",
          "line": 219,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/snapshot",
          "handler": "get_tsv_contract_snapshot",
          "file": "contract.py",
          "line": 360,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/contracts/vat-info",
          "handler": "get_contracts_vat_info",
          "file": "contract.py",
          "line": 385,
          "status": "unused",
          "dead_functions": [
            "logic/contract.py::get_vat_info_by_contract_ids"
          ]
        },
        {
          "method": "GET",
          "path": "/dag_run_time/<string:dag_id>",
          "handler": "get_dag_run_time",
          "file": "dag.py",
          "line": 12,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/dataloader/statement-periods/",
          "handler": "get_statement_periods_by_ids",
          "file": "dataloader.py",
          "line": 18,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/exchange-rate/bulk-exchange-rates",
          "handler": "ExchangeRatesCreateView",
          "file": "exchange_rate.py",
          "line": 38,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/file-upload",
          "handler": "file_upload_initiate_view",
          "file": "file_upload.py",
          "line": 383,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/file-upload-config",
          "handler": "file_upload_config_create_view",
          "file": "file_upload_config.py",
          "line": 304,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/file-upload-config/<int:object_id>",
          "handler": "file_upload_config_item_view",
          "file": "file_upload_config.py",
          "line": 350,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/file-upload-config/<int:object_id>",
          "handler": "file_upload_config_item_view",
          "file": "file_upload_config.py",
          "line": 350,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/file-upload-config/<int:object_id>",
          "handler": "file_upload_config_item_view",
          "file": "file_upload_config.py",
          "line": 350,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/file-upload-configs",
          "handler": "file_upload_config_list_view",
          "file": "file_upload_config.py",
          "line": 340,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/file-upload/<file_key>",
          "handler": "get_file_upload",
          "file": "file_upload.py",
          "line": 92,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/file-upload/<file_key>/cancel",
          "handler": "cancel_upload",
          "file": "file_upload.py",
          "line": 215,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/file-upload/<file_key>/complete",
          "handler": "complete_upload",
          "file": "file_upload.py",
          "line": 159,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/file-upload/<file_key>/download",
          "handler": "download_file",
          "file": "file_upload.py",
          "line": 271,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/file-upload/<file_key>/quarantine",
          "handler": "quarantine_infected_upload",
          "file": "file_upload.py",
          "line": 327,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/file-upload/<file_key>/status",
          "handler": "update_file_upload_status",
          "file": "file_upload.py",
          "line": 425,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "base.py",
          "line": 11,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/historical-contract-advances/dataloader",
          "handler": "get_historical_contract_advances_by_contract_ids",
          "file": "historical_contract_advance.py",
          "line": 26,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/oa-contracts/contracts",
          "handler": "get_contracts_by_oa_contract_ids",
          "file": "legacy_contract.py",
          "line": 49,
          "status": "unused",
          "dead_functions": [
            "logic/contract.py::get_contracts_by_oa_contract_ids"
          ]
        },
        {
          "method": "GET",
          "path": "/reference-flowthrough-calculation/<int:object_id>",
          "handler": "ReferenceFlowthroughCalculationItemView",
          "file": "reference_flowthrough_calculation.py",
          "line": 75,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-flowthrough-calculations/",
          "handler": "ReferenceFlowthroughCalculationListView",
          "file": "reference_flowthrough_calculation.py",
          "line": 67,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-mechanical-rate/<int:object_id>",
          "handler": "ReferenceMechanicalRateView",
          "file": "reference_mechanical_rate.py",
          "line": 75,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-mechanical-rates/",
          "handler": "ReferenceMechanicalRateList",
          "file": "reference_mechanical_rate.py",
          "line": 68,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-payment-entities/",
          "handler": "ReferencePaymentEntityListView",
          "file": "reference_payment_entity.py",
          "line": 78,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-payment-entity/<int:object_id>/",
          "handler": "ReferencePaymentEntityItemView",
          "file": "reference_payment_entity.py",
          "line": 72,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-payment-type/<int:object_id>",
          "handler": "ReferencePaymentTypeItemView",
          "file": "reference_payment_type.py",
          "line": 67,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-payment-types",
          "handler": "ReferencePaymentTypeListView",
          "file": "reference_payment_type.py",
          "line": 73,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-sap-profit-center/",
          "handler": "ReferenceSapProfitCenterListView",
          "file": "reference_sap_profit_center.py",
          "line": 83,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-sap-profit-center/<int:object_id>",
          "handler": "ReferenceSapProfitCenterItemView",
          "file": "reference_sap_profit_center.py",
          "line": 77,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-signing-entities/",
          "handler": "ReferenceSigningEntityListView",
          "file": "reference_signing_entity.py",
          "line": 109,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-signing-entity/<int:object_id>/",
          "handler": "ReferenceSigningEntityItemView",
          "file": "reference_signing_entity.py",
          "line": 103,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-transaction-type-group/<int:reference_transaction_type_group_id>/reference-transaction-types",
          "handler": "get_transaction_types_by_group",
          "file": "reference_transaction_type_group.py",
          "line": 52,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-transaction-type-group/group-admin/<string:group_admin>",
          "handler": "get_transaction_type_groups_by_group_admin",
          "file": "reference_transaction_type_group.py",
          "line": 22,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-transaction-type-group/reference_transaction_type_group_transaction_types",
          "handler": "get_transaction_type_group_transaction_types",
          "file": "reference_transaction_type_group.py",
          "line": 84,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-transaction-type-groups",
          "handler": "get_transaction_type_groups",
          "file": "reference_transaction_type_group.py",
          "line": 108,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/reference-transaction-types",
          "handler": "ReferenceTransactionTypeList",
          "file": "reference_transaction_type.py",
          "line": 55,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/run-controller",
          "handler": "RunControllerCreateView",
          "file": "run_controller.py",
          "line": 129,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/run-controller-by-contract/<int:contract_id>",
          "handler": "get_contract_run_controllers",
          "file": "run_controller.py",
          "line": 103,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/run-controller-contracts",
          "handler": "update_run_controller_contract",
          "file": "run_controller_contract.py",
          "line": 113,
          "status": "unused",
          "dead_functions": [
            "logic/run_controller_contract.py::update_run_controller_contract"
          ]
        },
        {
          "method": "GET",
          "path": "/run-controller/<int:object_id>",
          "handler": "RunControllerItemView",
          "file": "run_controller.py",
          "line": 123,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/run-controller/contract",
          "handler": "RunControllerContractCreateView",
          "file": "run_controller_contract.py",
          "line": 48,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/run-controllers",
          "handler": "RunControllerListView",
          "file": "run_controller.py",
          "line": 135,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/run-controllers/contracts/account/<int:account_id>",
          "handler": "get_run_controller_contracts_by_account",
          "file": "run_controller_contract.py",
          "line": 58,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/run-controllers/contracts/dataloader",
          "handler": "get_run_controller_contracts_dataloaded",
          "file": "run_controller_contract.py",
          "line": 78,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/sales-file",
          "handler": "SalesFileCreateView",
          "file": "sales_file.py",
          "line": 81,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sales-file/<int:object_id>",
          "handler": "SalesFileItemView",
          "file": "sales_file.py",
          "line": 87,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/sales-file/<int:object_id>",
          "handler": "SalesFileItemView",
          "file": "sales_file.py",
          "line": 87,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-period-adjustment-file/<int:adjustment_file_id>/download/error",
          "handler": "downloadAbacusAdjustmentFileInvalidReport",
          "file": "statement_period_adjustment_file.py",
          "line": 239,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-period-adjustment-file/<int:adjustment_file_id>/download/report",
          "handler": "downloadAbacusAdjustmentFileValidReport",
          "file": "statement_period_adjustment_file.py",
          "line": 271,
          "status": "unused",
          "dead_functions": [
            "logic/statement_period_adjustment_file.py::get_adjustment_file_valid_report"
          ]
        },
        {
          "method": "DELETE",
          "path": "/statement-period-adjustment-file/<int:object_id>",
          "handler": "StatementPeriodAdjustmentFileItemView",
          "file": "statement_period_adjustment_file.py",
          "line": 164,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-period-adjustment-file/<int:object_id>",
          "handler": "StatementPeriodAdjustmentFileItemView",
          "file": "statement_period_adjustment_file.py",
          "line": 164,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/statement-period-adjustment-file/<int:object_id>",
          "handler": "StatementPeriodAdjustmentFileItemView",
          "file": "statement_period_adjustment_file.py",
          "line": 164,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-period-adjustment-file/<statement_period_adjustment_file_id>/batch-criteria/",
          "handler": "get_statement_period_adjustment_batch_criteria",
          "file": "statement_period_adjustment_batch_criteria.py",
          "line": 51,
          "status": "unused",
          "dead_functions": [
            "logic/statement_period_adjustment_batch_criteria.py::get_statement_period_adjustment_batch_criteria"
          ]
        },
        {
          "method": "GET",
          "path": "/statement-period-adjustment-file/by-source-file-key/<source_file_key>",
          "handler": "get_statement_period_adjustment_file_by_file_upload_key",
          "file": "statement_period_adjustment_file.py",
          "line": 221,
          "status": "unused",
          "dead_functions": [
            "logic/statement_period_adjustment_file.py::get_adjustment_file_by_source_file_key"
          ]
        },
        {
          "method": "GET",
          "path": "/statement-period-adjustment-file/users/<user_action>",
          "handler": "get_statement_period_adjustment_file_users",
          "file": "statement_period_adjustment_file.py",
          "line": 319,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/statement-period-adjustment-file/validate-adjustments",
          "handler": "validate_adjustments",
          "file": "statement_period_adjustment_file.py",
          "line": 350,
          "status": "unused",
          "dead_functions": [
            "logic/statement_period_adjustment_file.py::validate_adjustments"
          ]
        },
        {
          "method": "GET",
          "path": "/statement-period-adjustment-files",
          "handler": "get_statement_period_adjustment_files",
          "file": "statement_period_adjustment_file.py",
          "line": 302,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-period-payment-entity/<int:object_id>",
          "handler": "StatementPeriodPaymentEntityItemView",
          "file": "statement_period_payment_entity.py",
          "line": 103,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-period/<int:object_id>",
          "handler": "StatementPeriodItemView",
          "file": "statement_period.py",
          "line": 144,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-period/<int:object_id>/payment-entities",
          "handler": "get_statement_period_payment_entity_by_statement_period",
          "file": "statement_period_payment_entity.py",
          "line": 24,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/statement-period/<int:statement_period_id>/adjustment-file",
          "handler": "StatementPeriodAdjustmentFileCreateView",
          "file": "statement_period_adjustment_file.py",
          "line": 148,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/statement-period/<int:statement_period_id>/adjustment-file/<int:object_id>",
          "handler": "StatementPeriodAdjustmentFileItemView",
          "file": "statement_period_adjustment_file.py",
          "line": 156,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-period/<int:statement_period_id>/adjustment-file/<int:object_id>",
          "handler": "StatementPeriodAdjustmentFileItemView",
          "file": "statement_period_adjustment_file.py",
          "line": 156,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/statement-period/<int:statement_period_id>/adjustment-file/<int:object_id>",
          "handler": "StatementPeriodAdjustmentFileItemView",
          "file": "statement_period_adjustment_file.py",
          "line": 156,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-period/<int:statement_period_id>/adjustment-files",
          "handler": "StatementPeriodAdjustmentFileListView",
          "file": "statement_period_adjustment_file.py",
          "line": 172,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-period/<int:statement_period_id>/bulk-exchange-rates",
          "handler": "bulk_get_exchange_rates",
          "file": "statement_period.py",
          "line": 154,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/statement-period/<int:statement_period_id>/close",
          "handler": "close_statement_period",
          "file": "statement_period.py",
          "line": 83,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-period/<int:statement_period_id>/payment-entities/states",
          "handler": "get_states_by_statement_period",
          "file": "statement_period_payment_entity.py",
          "line": 65,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/statement-period/<int:statement_period_id>/payment-entity/<int:payment_entity_id>/visible",
          "handler": "set_statement_period_payment_entity_is_visible",
          "file": "statement_period_payment_entity.py",
          "line": 43,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-period/current",
          "handler": "get_current_statement_period",
          "file": "statement_period.py",
          "line": 66,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-periods/",
          "handler": "StatementPeriodListView",
          "file": "statement_period.py",
          "line": 172,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/statement-periods/",
          "handler": "get_statement_periods_by_years",
          "file": "statement_period.py",
          "line": 180,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-periods/recent",
          "handler": "get_recent_statement_periods",
          "file": "statement_period.py",
          "line": 22,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statement-periods/upcoming",
          "handler": "get_upcoming_statement_periods",
          "file": "statement_period.py",
          "line": 44,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/worksheet-flowthrough-batch",
          "handler": "worksheet_flowthrough_batch_create_view",
          "file": "worksheet_flowthrough_batch.py",
          "line": 145,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/worksheet-flowthrough-batch/<int:object_id>",
          "handler": "worksheet_flowthrough_batch_item_view",
          "file": "worksheet_flowthrough_batch.py",
          "line": 257,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/worksheet-flowthrough-batch/<int:object_id>",
          "handler": "worksheet_flowthrough_batch_item_view",
          "file": "worksheet_flowthrough_batch.py",
          "line": 227,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/worksheet-flowthrough-batch/<int:object_id>",
          "handler": "worksheet_flowthrough_batch_item_view",
          "file": "worksheet_flowthrough_batch.py",
          "line": 193,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/accounting_period_report.py::get_acc_period_report",
        "logic/accounting_period_report.py::get_acc_period_reports_by_acc_period_id",
        "logic/accounting_run.py::get_run_summary_items_csv",
        "logic/contract.py::get_contracts_by_oa_contract_ids",
        "logic/contract.py::get_vat_info_by_contract_ids",
        "logic/contract_exclusion.py::create_contract_exclusions",
        "logic/contract_exclusion.py::update_contract_exclusions",
        "logic/contract_lifecycle.py::get_contract_lifecycle_by_schedule_id",
        "logic/contract_lifecycle.py::get_contract_lifecycles_by_ids",
        "logic/contract_term.py::get_contract_terms_for_account_and_term_type",
        "logic/legacy_contract.py::get_legacy_contract_by_contract_id",
        "logic/run_controller_contract.py::update_run_controller_contract",
        "logic/statement_period_adjustment_batch_criteria.py::get_statement_period_adjustment_batch_criteria",
        "logic/statement_period_adjustment_file.py::get_adjustment_file_by_source_file_key",
        "logic/statement_period_adjustment_file.py::get_adjustment_file_valid_report",
        "logic/statement_period_adjustment_file.py::validate_adjustments"
      ]
    },
    {
      "name": "ows-sales-goals",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-sales-goals.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 30,
        "used": {
          "count": 23,
          "percent": 76.7
        },
        "unused": {
          "count": 7,
          "percent": 23.3
        }
      },
      "functions": {
        "total": 26,
        "dead": 5,
        "dead_percent": 19.2
      },
      "details": [
        {
          "method": "GET",
          "path": "/digital/<int:product_id>",
          "handler": "get_digital_projections",
          "file": "handlers.py",
          "line": 310,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/digital/<int:product_id>",
          "handler": "upsert_digital_global_projections",
          "file": "handlers.py",
          "line": 358,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/digital/<int:product_id>/projection/<int:projection_id>",
          "handler": "delete_digital_territory_projection",
          "file": "handlers.py",
          "line": 407,
          "status": "unused",
          "dead_functions": [
            "logic/digital_projections.py::delete_territory_projection"
          ]
        },
        {
          "method": "POST",
          "path": "/digital/<int:product_id>/projections",
          "handler": "upsert_digital_territory_projections",
          "file": "handlers.py",
          "line": 378,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/digital/<int:product_id>/projections",
          "handler": "upsert_digital_territory_projections",
          "file": "handlers.py",
          "line": 378,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/digital/projections/dataloader",
          "handler": "dataload_digital_product_projections",
          "file": "handlers.py",
          "line": 333,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/goals/<int:product_id>",
          "handler": "sales_goal_fetch",
          "file": "handlers.py",
          "line": 67,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/goals/<int:product_id>",
          "handler": "update_sales_goal_patch",
          "file": "handlers.py",
          "line": 134,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/goals/<int:product_id>",
          "handler": "sales_goal_create",
          "file": "handlers.py",
          "line": 87,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/goals/<int:product_id>/<int:country_id>",
          "handler": "target_market_goal_delete",
          "file": "handlers.py",
          "line": 184,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/goals/<int:product_id>/<int:country_id>",
          "handler": "target_market_goal_create",
          "file": "handlers.py",
          "line": 158,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/goals/countries",
          "handler": "countries_get",
          "file": "handlers.py",
          "line": 111,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 45,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/marketing_highlights/<int:project_id>",
          "handler": "get_marketing_highlight",
          "file": "handlers.py",
          "line": 258,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/marketing_highlights/<int:project_id>",
          "handler": "create_marketing_highlight",
          "file": "handlers.py",
          "line": 207,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/marketing_highlights/<int:project_id>",
          "handler": "upsert_marketing_highlights",
          "file": "handlers.py",
          "line": 231,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/marketing_highlights/<int:project_id>/<int:territory_id>",
          "handler": "delete_marketing_highlight",
          "file": "handlers.py",
          "line": 285,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/marketing_program_info",
          "handler": "create_marketing_program_info",
          "file": "handlers.py",
          "line": 436,
          "status": "unused",
          "dead_functions": [
            "logic/marketing_program_info.py::create_marketing_program_info"
          ]
        },
        {
          "method": "PUT",
          "path": "/marketing_program_info/<int:marketing_program_info_id>",
          "handler": "update_marketing_program_info",
          "file": "handlers.py",
          "line": 538,
          "status": "unused",
          "dead_functions": [
            "logic/marketing_program_info.py::update_marketing_program_info"
          ]
        },
        {
          "method": "GET",
          "path": "/marketing_program_info/<int:product_id>/<int:program_id>",
          "handler": "get_product_marketing_program_info_by_program",
          "file": "handlers.py",
          "line": 518,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/marketing_program_info/<string:entity_type>/<int:entity_id>",
          "handler": "get_marketing_program_info",
          "file": "handlers.py",
          "line": 457,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/marketing_program_info/<string:entity_type>/<int:entity_id>",
          "handler": "upsert_marketing_program_info",
          "file": "handlers.py",
          "line": 559,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/marketing_program_info/<string:entity_type>/<int:entity_id>/program/<int:program_id>",
          "handler": "get_marketing_program_info_by_program",
          "file": "handlers.py",
          "line": 484,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/project/<int:project_id>",
          "handler": "get_project_marketing_projections",
          "file": "handlers.py",
          "line": 618,
          "status": "unused",
          "dead_functions": [
            "logic/digital_projections.py::get_territory_priorities_for_project"
          ]
        },
        {
          "method": "POST",
          "path": "/project/<int:project_id>",
          "handler": "upsert_project_global_projections",
          "file": "handlers.py",
          "line": 691,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/project/<int:project_id>/projection/<int:projection_id>",
          "handler": "delete_project_territory_projection",
          "file": "handlers.py",
          "line": 667,
          "status": "unused",
          "dead_functions": [
            "logic/digital_projections.py::delete_project_territory_projection"
          ]
        },
        {
          "method": "POST",
          "path": "/project/<int:project_id>/projections",
          "handler": "upsert_project_territory_projections",
          "file": "handlers.py",
          "line": 586,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/project/<int:project_id>/projections",
          "handler": "upsert_project_territory_projections",
          "file": "handlers.py",
          "line": 586,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/project/projections/dataloader",
          "handler": "dataload_project_marketing_projections",
          "file": "handlers.py",
          "line": 641,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/territories",
          "handler": "get_territories",
          "file": "handlers.py",
          "line": 123,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/digital_projections.py::delete_project_territory_projection",
        "logic/digital_projections.py::delete_territory_projection",
        "logic/digital_projections.py::get_territory_priorities_for_project",
        "logic/marketing_program_info.py::create_marketing_program_info",
        "logic/marketing_program_info.py::update_marketing_program_info"
      ]
    },
    {
      "name": "ows-salessheets",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-salessheets.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 9,
        "used": {
          "count": 8,
          "percent": 88.9
        },
        "unused": {
          "count": 1,
          "percent": 11.1
        }
      },
      "functions": {
        "total": 8,
        "dead": 0,
        "dead_percent": 0.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/bulk/<job_id>",
          "handler": "get_generation_result",
          "file": "handlers.py",
          "line": 116,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk/duplicate-upc",
          "handler": "trigger_pdf_generating_duplicate_upc",
          "file": "handlers.py",
          "line": 84,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/bulk/history",
          "handler": "get_user_history",
          "file": "handlers.py",
          "line": 129,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/default_templates",
          "handler": "get_default_templates",
          "file": "handlers.py",
          "line": 249,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 40,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/single/<int:release_id>",
          "handler": "get_job_data_by_release_id",
          "file": "handlers.py",
          "line": 151,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/single/<int:release_id>",
          "handler": "trigger_pdf_generating_single_release_id",
          "file": "handlers.py",
          "line": 168,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendor/<int:vendor_id>/default_template",
          "handler": "get_vendor_template",
          "file": "handlers.py",
          "line": 206,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/vendor/<int:vendor_id>/default_template/<int:template_id>",
          "handler": "post_vendor_template",
          "file": "handlers.py",
          "line": 228,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-socials",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-socials.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 7,
        "used": {
          "count": 5,
          "percent": 71.4
        },
        "unused": {
          "count": 2,
          "percent": 28.6
        }
      },
      "functions": {
        "total": 6,
        "dead": 2,
        "dead_percent": 33.3
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 31,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/socials/artists/<artist_id>/stats",
          "handler": "get_socials_stats_by_account_id",
          "file": "handlers.py",
          "line": 107,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/socials/artists/<artist_id>/stats-by-account",
          "handler": "get_social_account_stats_by_account_id",
          "file": "handlers.py",
          "line": 121,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/socials/artists/<artist_id>/timeseries",
          "handler": "get_socials_timeseries_by_account_id",
          "file": "handlers.py",
          "line": 93,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/socials/artists/stats-by-artists-ids",
          "handler": "get_social_account_stats_by_artists_ids",
          "file": "handlers.py",
          "line": 133,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/socials/stats",
          "handler": "get_socials_stats",
          "file": "handlers.py",
          "line": 66,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/socials/timeseries",
          "handler": "get_socials_timeseries",
          "file": "handlers.py",
          "line": 37,
          "status": "unused",
          "dead_functions": [
            "logic/timeseries.py::get_timeseries",
            "models/timeseries.py::get_timeseries"
          ]
        }
      ],
      "dead_functions": [
        "logic/timeseries.py::get_timeseries",
        "models/timeseries.py::get_timeseries"
      ]
    },
    {
      "name": "ows-sony-metadata",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-sony-metadata.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 5,
        "used": {
          "count": 4,
          "percent": 80.0
        },
        "unused": {
          "count": 1,
          "percent": 20.0
        }
      },
      "functions": {
        "total": 3,
        "dead": 0,
        "dead_percent": 0.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 26,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/label_fields/subaccount/<subaccount_id>",
          "handler": "label_fields_subaccount",
          "file": "handlers.py",
          "line": 32,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/label_fields/vendor/<int:vendor_id>/subaccount/<int:subaccount_id>",
          "handler": "cud_label_fields_subaccount",
          "file": "handlers.py",
          "line": 95,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/label_fields/vendor/<vendor_id>",
          "handler": "label_fields_vendor",
          "file": "handlers.py",
          "line": 52,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/label_fields/vendor/<vendor_id>",
          "handler": "cud_label_fields_vendor",
          "file": "handlers.py",
          "line": 71,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-sound-recordings",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-sound-recordings.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 18,
        "used": {
          "count": 16,
          "percent": 88.9
        },
        "unused": {
          "count": 2,
          "percent": 11.1
        }
      },
      "functions": {
        "total": 13,
        "dead": 2,
        "dead_percent": 15.4
      },
      "details": [
        {
          "method": "POST",
          "path": "/<obj_type>/<obj_id>/rules",
          "handler": "fingerprint_rules_post",
          "file": "handlers.py",
          "line": 617,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/<obj_type>/<obj_id>/rules/history",
          "handler": "sound_recordings_rules_history",
          "file": "handlers.py",
          "line": 664,
          "status": "unused",
          "dead_functions": [
            "logic/fingerprint_rules.py::fetch_history",
            "models/fingerprint_rules.py::get_history"
          ]
        },
        {
          "method": "POST",
          "path": "/<obj_type>/bulk/rules",
          "handler": "fingerprint_bulk_rules_post",
          "file": "handlers.py",
          "line": 568,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/acrids",
          "handler": "acrids_post",
          "file": "handlers.py",
          "line": 70,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 58,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound_recording/<osr_id>/full_delivery_history",
          "handler": "sound_recordings_full_delivery_history_get",
          "file": "handlers.py",
          "line": 291,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound_recordings",
          "handler": "sound_recordings_get",
          "file": "handlers.py",
          "line": 188,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/sound_recordings",
          "handler": "sound_recordings_post",
          "file": "handlers.py",
          "line": 95,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/sound_recordings/<osr_id>",
          "handler": "sound_recordings_patch",
          "file": "handlers.py",
          "line": 131,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound_recordings/<osr_id>/versions/<version_id>",
          "handler": "sound_recordings_version_get",
          "file": "handlers.py",
          "line": 258,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sound_recordings/cr",
          "handler": "sound_recordings_product_get",
          "file": "handlers.py",
          "line": 229,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/sound_recordings/full_delivery_history",
          "handler": "sound_recordings_full_delivery_history",
          "file": "handlers.py",
          "line": 331,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/sound_recordings/mark_unacked_as_awaited",
          "handler": "sound_recordings_mark_unacked_as_awaited",
          "file": "handlers.py",
          "line": 372,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/sound_recordings/resolve_awaited",
          "handler": "sound_recordings_resolve_awaited",
          "file": "handlers.py",
          "line": 402,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/sound_recordings/touch",
          "handler": "sound_recordings_touch",
          "file": "handlers.py",
          "line": 426,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/subaccounts/rules",
          "handler": "subaccount_fingerprint_rules_get",
          "file": "handlers.py",
          "line": 496,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tracks/rules",
          "handler": "track_fingerprint_rules_get",
          "file": "handlers.py",
          "line": 534,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/vendors/rules",
          "handler": "vendor_fingerprint_rules_get",
          "file": "handlers.py",
          "line": 457,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/fingerprint_rules.py::fetch_history",
        "models/fingerprint_rules.py::get_history"
      ]
    },
    {
      "name": "ows-store",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-store.git",
      "team": "content-delivery-asset-management",
      "endpoints": {
        "total": 6,
        "used": {
          "count": 5,
          "percent": 83.3
        },
        "unused": {
          "count": 1,
          "percent": 16.7
        }
      },
      "functions": {
        "total": 5,
        "dead": 0,
        "dead_percent": 0.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 30,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/stores",
          "handler": "get_stores",
          "file": "handlers.py",
          "line": 51,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/stores/classifications/dataloader",
          "handler": "get_store_classifications_dataloader",
          "file": "handlers.py",
          "line": 195,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/stores/dataloader",
          "handler": "get_stores_dataloader",
          "file": "handlers.py",
          "line": 115,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/stores/distribution_types/dataloader",
          "handler": "get_store_distribution_types_dataloader",
          "file": "handlers.py",
          "line": 159,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/substores/dataloader",
          "handler": "get_substores_dataloader",
          "file": "handlers.py",
          "line": 231,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-store-availability",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-store-availability.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 6,
        "used": {
          "count": 3,
          "percent": 50.0
        },
        "unused": {
          "count": 3,
          "percent": 50.0
        }
      },
      "functions": {
        "total": 6,
        "dead": 1,
        "dead_percent": 16.7
      },
      "details": [
        {
          "method": "POST",
          "path": "/admin/import_store_links",
          "handler": "import_store_links",
          "file": "handlers.py",
          "line": 179,
          "status": "unused",
          "dead_functions": [
            "logic/product_store.py::import_store_links"
          ]
        },
        {
          "method": "POST",
          "path": "/admin/produce-job-messages/<store_id>",
          "handler": "produce_job_messages",
          "file": "handlers.py",
          "line": 92,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/admin/products",
          "handler": "add_products_to_poll",
          "file": "handlers.py",
          "line": 78,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 46,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sleep/<seconds>",
          "handler": "sleep",
          "file": "handlers.py",
          "line": 52,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/status",
          "handler": "get_products_status",
          "file": "handlers.py",
          "line": 144,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/product_store.py::import_store_links"
      ]
    },
    {
      "name": "ows-territories",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-territories.git",
      "team": "content-delivery-asset-management",
      "endpoints": {
        "total": 5,
        "used": {
          "count": 3,
          "percent": 60.0
        },
        "unused": {
          "count": 2,
          "percent": 40.0
        }
      },
      "functions": {
        "total": 4,
        "dead": 2,
        "dead_percent": 50.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/complement/<standard>",
          "handler": "get_complement_territories",
          "file": "handlers.py",
          "line": 108,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/conversion/<input_standard>/<output_standard>",
          "handler": "convert_territories",
          "file": "handlers.py",
          "line": 76,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 30,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/standards",
          "handler": "get_standards",
          "file": "handlers.py",
          "line": 37,
          "status": "unused",
          "dead_functions": [
            "logic/territories.py::get_standards",
            "models/territory.py::get_standards"
          ]
        },
        {
          "method": "GET",
          "path": "/territory/<standard>",
          "handler": "get_territories",
          "file": "handlers.py",
          "line": 54,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/territories.py::get_standards",
        "models/territory.py::get_standards"
      ]
    },
    {
      "name": "ows-text-campaigns",
      "framework": "fastapi",
      "repo_url": "https://github.com/theorchard/ows-text-campaigns.git",
      "team": "fansifter",
      "endpoints": {
        "total": 37,
        "used": {
          "count": 1,
          "percent": 2.7
        },
        "unused": {
          "count": 36,
          "percent": 97.3
        }
      },
      "functions": {
        "total": 0,
        "dead": 0,
        "dead_percent": 0
      },
      "details": [
        {
          "method": "GET",
          "path": "/artist-settings/by-phone-number/{phoneNumber}",
          "handler": "get_artist_settings_by_phone_number",
          "file": "artist.py",
          "line": 52,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/artist-settings/{globalParticipantId}",
          "handler": "get_artist_settings",
          "file": "artist.py",
          "line": 73,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/artist-settings/{globalParticipantId}",
          "handler": "update_artist_settings",
          "file": "artist.py",
          "line": 134,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/artist-settings/{globalParticipantId}",
          "handler": "create_or_update_artist_settings",
          "file": "artist.py",
          "line": 101,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/artist-settings/{globalParticipantId}/content/scan",
          "handler": "scan_artist_content",
          "file": "artist.py",
          "line": 241,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/artist-settings/{globalParticipantId}/image",
          "handler": "delete_artist_image",
          "file": "artist.py",
          "line": 192,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/artist-settings/{globalParticipantId}/image",
          "handler": "create_artist_image",
          "file": "artist.py",
          "line": 166,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/artist-settings/{globalParticipantId}/image/upload/credentials",
          "handler": "create_artist_image_upload_credentials",
          "file": "artist.py",
          "line": 216,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns",
          "handler": "get_campaigns",
          "file": "campaigns.py",
          "line": 103,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns",
          "handler": "create_campaign",
          "file": "campaigns.py",
          "line": 147,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/campaigns/{campaignId}",
          "handler": "delete_campaign",
          "file": "campaigns.py",
          "line": 196,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}",
          "handler": "get_campaign",
          "file": "campaigns.py",
          "line": 173,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/campaigns/{campaignId}",
          "handler": "update_campaign",
          "file": "campaigns.py",
          "line": 228,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/analytics",
          "handler": "get_campaign_analytics",
          "file": "campaigns.py",
          "line": 578,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/analytics/links",
          "handler": "get_campaign_link_analytics",
          "file": "campaigns.py",
          "line": 600,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/attachments",
          "handler": "get_campaign_attachments",
          "file": "campaigns.py",
          "line": 354,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/attachments",
          "handler": "create_campaign_attachment",
          "file": "campaigns.py",
          "line": 381,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/attachments/upload/credentials",
          "handler": "create_campaign_attachment_upload_credentials",
          "file": "campaigns.py",
          "line": 406,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/content",
          "handler": "get_campaign_content",
          "file": "campaigns.py",
          "line": 256,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/campaigns/{campaignId}/content",
          "handler": "update_campaign_content",
          "file": "campaigns.py",
          "line": 281,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/content/scan",
          "handler": "scan_campaign_content",
          "file": "campaigns.py",
          "line": 304,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/duplicate",
          "handler": "duplicate_campaign",
          "file": "campaigns.py",
          "line": 330,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/messages/batch-render",
          "handler": "render_campaign_messages_batch",
          "file": "campaigns.py",
          "line": 625,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/messages/preview",
          "handler": "get_campaign_message_preview",
          "file": "campaigns.py",
          "line": 648,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/messages/send-test",
          "handler": "send_campaign_test_message",
          "file": "campaigns.py",
          "line": 674,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/pricing-estimation",
          "handler": "get_campaign_pricing_estimation",
          "file": "campaigns.py",
          "line": 720,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/schedule",
          "handler": "schedule_campaign",
          "file": "campaigns.py",
          "line": 491,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/campaigns/{campaignId}/schedule",
          "handler": "edit_campaign_schedule",
          "file": "campaigns.py",
          "line": 527,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/send-timezones",
          "handler": "get_campaign_send_timezones",
          "file": "campaigns.py",
          "line": 745,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/shortened-urls",
          "handler": "get_campaign_shortened_urls",
          "file": "campaigns.py",
          "line": 430,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/shortened-urls/validate",
          "handler": "validate_campaign_shortened_url",
          "file": "campaigns.py",
          "line": 454,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/campaigns/{campaignId}/status",
          "handler": "get_campaign_live_status",
          "file": "campaigns.py",
          "line": 698,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/campaigns/{campaignId}/unschedule",
          "handler": "unschedule_campaign",
          "file": "campaigns.py",
          "line": 556,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/domains",
          "handler": "get_url_domains",
          "file": "domains.py",
          "line": 21,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "hello",
          "file": "infra.py",
          "line": 15,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/twilio/inbound",
          "handler": "handle_twilio_inbound_message",
          "file": "twilio.py",
          "line": 38,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/twilio/sync-pricing",
          "handler": "handle_sync_twilio_pricing",
          "file": "twilio.py",
          "line": 27,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-timed-release",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-timed-release.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 17,
        "used": {
          "count": 9,
          "percent": 52.9
        },
        "unused": {
          "count": 8,
          "percent": 47.1
        }
      },
      "functions": {
        "total": 15,
        "dead": 11,
        "dead_percent": 73.3
      },
      "details": [
        {
          "method": "GET",
          "path": "/",
          "handler": "hello_world",
          "file": "handlers.py",
          "line": 47,
          "status": "unused",
          "dead_functions": [
            "logic/hello.py::say_hello"
          ]
        },
        {
          "method": "GET",
          "path": "/<username>",
          "handler": "hello_world_username",
          "file": "handlers.py",
          "line": 54,
          "status": "unused",
          "dead_functions": [
            "logic/hello.py::say_hello"
          ]
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 64,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product",
          "handler": "create_product_live_time_detail",
          "file": "handlers.py",
          "line": 103,
          "status": "unused",
          "dead_functions": [
            "logic/product_live_time.py::create_product_live_time_detail",
            "models/product_live_time.py::create_product_live_time_details_with_stores"
          ]
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/timed_release/store/<int:store_id>",
          "handler": "get_product_timed_release_by_store_id",
          "file": "handlers.py",
          "line": 325,
          "status": "unused",
          "dead_functions": [
            "logic/timed_release.py::get_product_timed_release_by_store_id",
            "models/scheduled_update.py::get_product_scheduled_update_by_store_id",
            "models/timed_release.py::get_product_timed_release_by_store_id"
          ]
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>/timed_release/ws",
          "handler": "delete_timed_release_ws",
          "file": "handlers.py",
          "line": 384,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/timed_release/ws",
          "handler": "get_product_timed_release_for_ws",
          "file": "handlers.py",
          "line": 363,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/timed_release/ws",
          "handler": "upsert_product_timed_release_and_schedule",
          "file": "handlers.py",
          "line": 286,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<product_id>",
          "handler": "delete_product_live_details",
          "file": "handlers.py",
          "line": 115,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<product_id>",
          "handler": "get_product_live_detail_by_id",
          "file": "handlers.py",
          "line": 86,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<product_id>",
          "handler": "update_product_live_detail_by_id",
          "file": "handlers.py",
          "line": 132,
          "status": "unused",
          "dead_functions": [
            "logic/product_live_time.py::update_product_live_time",
            "models/product_live_time.py::update_product_live_time_details_with_stores"
          ]
        },
        {
          "method": "DELETE",
          "path": "/scheduled_update/<product_id>",
          "handler": "delete_scheduled_update",
          "file": "handlers.py",
          "line": 247,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/scheduled_update/<product_id>",
          "handler": "get_scheduled_update",
          "file": "handlers.py",
          "line": 228,
          "status": "unused",
          "dead_functions": [
            "logic/scheduled_update.py::get_scheduled_update"
          ]
        },
        {
          "method": "POST",
          "path": "/scheduled_update/<product_id>",
          "handler": "upsert_scheduled_update",
          "file": "handlers.py",
          "line": 208,
          "status": "unused",
          "dead_functions": [
            "logic/scheduled_update.py::upsert",
            "models/scheduled_update.py::upsert"
          ]
        },
        {
          "method": "POST",
          "path": "/scheduled_update/<product_id>/execute",
          "handler": "execute_scheduled_update",
          "file": "handlers.py",
          "line": 265,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/timedrelease/<int:product_id>",
          "handler": "get_timed_release_data",
          "file": "handlers.py",
          "line": 147,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/timedrelease/<product_id>",
          "handler": "update_timed_release_data",
          "file": "handlers.py",
          "line": 177,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/hello.py::say_hello",
        "logic/product_live_time.py::create_product_live_time_detail",
        "logic/product_live_time.py::update_product_live_time",
        "logic/scheduled_update.py::get_scheduled_update",
        "logic/scheduled_update.py::upsert",
        "logic/timed_release.py::get_product_timed_release_by_store_id",
        "models/product_live_time.py::create_product_live_time_details_with_stores",
        "models/product_live_time.py::update_product_live_time_details_with_stores",
        "models/scheduled_update.py::get_product_scheduled_update_by_store_id",
        "models/scheduled_update.py::upsert",
        "models/timed_release.py::get_product_timed_release_by_store_id"
      ]
    },
    {
      "name": "ows-track",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-track.git",
      "team": "content-creation-management",
      "endpoints": {
        "total": 74,
        "used": {
          "count": 63,
          "percent": 85.1
        },
        "unused": {
          "count": 11,
          "percent": 14.9
        }
      },
      "functions": {
        "total": 71,
        "dead": 10,
        "dead_percent": 14.1
      },
      "details": [
        {
          "method": "GET",
          "path": "/<string:account_type>/<string:account_id>/tracks/<string:track_type>/<string:isrc>",
          "handler": "get_account_tracks_by_type_and_isrc",
          "file": "track_handlers.py",
          "line": 1109,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/audio-attributes",
          "handler": "get_audio_attributes",
          "file": "audio_attribute_handlers.py",
          "line": 18,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/audio-attributes-edits/<int:tuid>",
          "handler": "get_track_audio_attributes_edits",
          "file": "audio_attribute_handlers.py",
          "line": 72,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/audio-attributes/<int:tuid>",
          "handler": "get_track_audio_attributes",
          "file": "audio_attribute_handlers.py",
          "line": 36,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/claim_new_isrc",
          "handler": "claim_new_isrc",
          "file": "track_handlers.py",
          "line": 1243,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "base_handlers.py",
          "line": 17,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/isrc/<string:isrc>/matches",
          "handler": "isrc_match_info",
          "file": "track_handlers.py",
          "line": 1262,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/isrc/<string:track_type>/<string:isrc>",
          "handler": "is_isrc_in_use",
          "file": "track_handlers.py",
          "line": 1058,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/performer/roles",
          "handler": "get_performer_roles",
          "file": "performer_handlers.py",
          "line": 18,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>/tracks",
          "handler": "bulk_delete_tracks",
          "file": "track_handlers.py",
          "line": 714,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/tracks",
          "handler": "get_all_tracks_by_product_id",
          "file": "track_handlers.py",
          "line": 373,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/product/<int:product_id>/tracks",
          "handler": "update_field_for_all_tracks_in_product",
          "file": "track_handlers.py",
          "line": 626,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/tracks",
          "handler": "bulk_create_tracks",
          "file": "track_handlers.py",
          "line": 63,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/tracks",
          "handler": "create_tracks_with_metadata",
          "file": "track_handlers.py",
          "line": 1149,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/product/<int:product_id>/tracks/<role_type>",
          "handler": "update_roles_for_all_tracks_in_product",
          "file": "track_handlers.py",
          "line": 813,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/tracks/arrange",
          "handler": "reorder_tracks",
          "file": "track_handlers.py",
          "line": 660,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/tracks/change_genre",
          "handler": "update_artist",
          "file": "track_handlers.py",
          "line": 138,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>/tracks/grats",
          "handler": "delete_all_instant_grats_by_product_id",
          "file": "instant_grat_handlers.py",
          "line": 89,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/tracks/grats",
          "handler": "get_all_instant_grats_by_product_id",
          "file": "instant_grat_handlers.py",
          "line": 17,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/product/<int:product_id>/tracks/grats",
          "handler": "update_instant_grats_for_product_id",
          "file": "instant_grat_handlers.py",
          "line": 151,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/tracks/grats",
          "handler": "create_instant_grats_for_product_id",
          "file": "instant_grat_handlers.py",
          "line": 120,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>/tracks/grats/<int:track_id>/store/<int:store_id>",
          "handler": "delete_instant_grat_by_store_id",
          "file": "instant_grat_handlers.py",
          "line": 58,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/tracks/import",
          "handler": "bulk_import_tracks",
          "file": "track_handlers.py",
          "line": 100,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/tracks/light",
          "handler": "get_all_tracks_by_product_id_light",
          "file": "track_handlers.py",
          "line": 480,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/tracks/performers",
          "handler": "get_performers_for_tracks_in_product",
          "file": "performer_handlers.py",
          "line": 101,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/product/<int:product_id>/tracks/performers/<performer_type>",
          "handler": "update_by_performer_type_for_product",
          "file": "performer_handlers.py",
          "line": 136,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/tracks/publishing-obligation",
          "handler": "get_tracks_publishing_obligation_data_for_product",
          "file": "publishing_obligation_handlers.py",
          "line": 19,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/tracks/publishing-obligation",
          "handler": "update_tracks_publishing_obligation",
          "file": "publishing_obligation_handlers.py",
          "line": 48,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/product/<int:product_id>/tracks/set",
          "handler": "set_product_tracks",
          "file": "track_handlers.py",
          "line": 1178,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/tracks/validate",
          "handler": "validate_tracks_for_product",
          "file": "track_handlers.py",
          "line": 935,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/tracks/validate/performers",
          "handler": "validate_tracks_performers_for_product",
          "file": "performer_handlers.py",
          "line": 194,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/tracks/validate/publishing-obligation",
          "handler": "validate_tracks_pub_obl_for_product",
          "file": "publishing_obligation_handlers.py",
          "line": 77,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:src_product_id>/tracks/copy/<int:dest_product_id>",
          "handler": "import_product_tracks",
          "file": "track_handlers.py",
          "line": 185,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/products/trackids",
          "handler": "get_tracks_ids_by_product_ids",
          "file": "track_handlers.py",
          "line": 407,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "HEAD",
          "path": "/profile/uuid/<string:profile_uuid>/resource/track/id/<int:tuid>",
          "handler": "check_profile_track_access",
          "file": "track_handlers.py",
          "line": 1288,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/public/performer/roles",
          "handler": "get_public_performer_roles",
          "file": "performer_handlers.py",
          "line": 44,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/rights-attributes",
          "handler": "get_rights_attributes",
          "file": "rights_attribute_handlers.py",
          "line": 18,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/rights-attributes-edits/<int:tuid>",
          "handler": "get_track_rights_attributes_edits",
          "file": "rights_attribute_handlers.py",
          "line": 74,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/rights-attributes/<int:tuid>",
          "handler": "get_track_rights_attributes",
          "file": "rights_attribute_handlers.py",
          "line": 55,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/suggested-audio-attributes/<int:tuid>",
          "handler": "get_track_suggested_audio_attributes",
          "file": "audio_attribute_handlers.py",
          "line": 54,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/suggested-rights-attributes/<int:tuid>",
          "handler": "get_suggested_rights_attributes",
          "file": "rights_attribute_handlers.py",
          "line": 36,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/track",
          "handler": "create_track",
          "file": "track_handlers.py",
          "line": 36,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/track-artist/<int:track_artist_id>/track",
          "handler": "get_track_by_track_artist_id",
          "file": "track_handlers.py",
          "line": 1214,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/track-wide-dataloader",
          "handler": "get_tracks_dataloaded",
          "file": "track_handlers.py",
          "line": 343,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/track/<int:tuid>",
          "handler": "delete_track",
          "file": "track_handlers.py",
          "line": 688,
          "status": "unused",
          "dead_functions": [
            "logic/track.py::delete"
          ]
        },
        {
          "method": "GET",
          "path": "/track/<int:tuid>",
          "handler": "get_track",
          "file": "track_handlers.py",
          "line": 232,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/track/<int:tuid>",
          "handler": "update_track_patch",
          "file": "track_handlers.py",
          "line": 550,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/track/<int:tuid>",
          "handler": "update_track",
          "file": "track_handlers.py",
          "line": 512,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/track/<int:tuid>/<role>",
          "handler": "create_track_role",
          "file": "track_handlers.py",
          "line": 750,
          "status": "unused",
          "dead_functions": [
            "logic/track_role.py::create"
          ]
        },
        {
          "method": "PATCH",
          "path": "/track/<int:tuid>/<role>/<int:role_id>",
          "handler": "update_track_role",
          "file": "track_handlers.py",
          "line": 780,
          "status": "unused",
          "dead_functions": [
            "logic/track_role.py::update"
          ]
        },
        {
          "method": "DELETE",
          "path": "/track/<int:tuid>/<role_type>/<int:track_role_id>",
          "handler": "delete_track_role",
          "file": "track_handlers.py",
          "line": 843,
          "status": "unused",
          "dead_functions": [
            "logic/track_role.py::delete"
          ]
        },
        {
          "method": "PATCH",
          "path": "/track/<int:tuid>/duration",
          "handler": "update_track_duration",
          "file": "track_handlers.py",
          "line": 593,
          "status": "unused",
          "dead_functions": [
            "logic/track.py::update_track_duration"
          ]
        },
        {
          "method": "DELETE",
          "path": "/track/<int:tuid>/localization/<int:language_id>",
          "handler": "delete_track_localization",
          "file": "track_handlers.py",
          "line": 906,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/track/<int:tuid>/localization/<int:language_id>",
          "handler": "update_track_localization",
          "file": "track_handlers.py",
          "line": 874,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/track/<int:tuid>/performers",
          "handler": "get_performers_for_track",
          "file": "performer_handlers.py",
          "line": 57,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/track/<int:tuid>/performers",
          "handler": "update_performers",
          "file": "performer_handlers.py",
          "line": 165,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/track/<int:tuid>/samples",
          "handler": "create_track_sample",
          "file": "track_sample_handlers.py",
          "line": 16,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/track/<int:tuid>/spatial",
          "handler": "delete_track_spatial",
          "file": "track_handlers.py",
          "line": 1387,
          "status": "unused",
          "dead_functions": [
            "logic/track_spatial.py::delete_track_spatial"
          ]
        },
        {
          "method": "POST",
          "path": "/track/<int:tuid>/spatial",
          "handler": "create_track_spatial",
          "file": "track_handlers.py",
          "line": 1327,
          "status": "unused",
          "dead_functions": [
            "logic/track_spatial.py::create_track_spatial"
          ]
        },
        {
          "method": "PUT",
          "path": "/track/<int:tuid>/spatial",
          "handler": "update_track_spatial",
          "file": "track_handlers.py",
          "line": 1357,
          "status": "unused",
          "dead_functions": [
            "logic/track_spatial.py::update_track_spatial"
          ]
        },
        {
          "method": "GET",
          "path": "/track/<string:track_type>/<string:isrc>",
          "handler": "get_all_tracks_by_type_and_isrc",
          "file": "track_handlers.py",
          "line": 1081,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/track/samples",
          "handler": "bulk_delete_samples_by_tuids",
          "file": "track_sample_handlers.py",
          "line": 80,
          "status": "unused",
          "dead_functions": [
            "logic/track_sample.py::bulk_delete_samples_by_tuids"
          ]
        },
        {
          "method": "DELETE",
          "path": "/track/samples/<int:sampleid>",
          "handler": "delete_sample_data",
          "file": "track_sample_handlers.py",
          "line": 58,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/track/samples/<int:sampleid>",
          "handler": "get_track_sample",
          "file": "track_sample_handlers.py",
          "line": 36,
          "status": "unused",
          "dead_functions": [
            "logic/track_sample.py::get_track_sample"
          ]
        },
        {
          "method": "PATCH",
          "path": "/track/samples/<int:sampleid>",
          "handler": "update_sample_data",
          "file": "track_sample_handlers.py",
          "line": 108,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tracks",
          "handler": "get_multiple_tracks",
          "file": "track_handlers.py",
          "line": 263,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tracks-bulk",
          "handler": "get_multiple_bulk_tracks",
          "file": "track_handlers.py",
          "line": 291,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/tracks/osr_id/<string:osr_id>",
          "handler": "get_tracks_by_osrid",
          "file": "track_handlers.py",
          "line": 1302,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/tracks/performers",
          "handler": "get_performers_for_tracks",
          "file": "performer_handlers.py",
          "line": 80,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/upsert-audio-attributes",
          "handler": "upsert_track_audio_attributes",
          "file": "audio_attribute_handlers.py",
          "line": 91,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/upsert-audio-attributes-edits",
          "handler": "upsert_track_audio_attributes_edits",
          "file": "audio_attribute_handlers.py",
          "line": 120,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/upsert-rights-attributes",
          "handler": "upsert_track_rights_attributes",
          "file": "rights_attribute_handlers.py",
          "line": 94,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/upsert-rights-attributes-edits",
          "handler": "upsert_track_rights_attributes_edits",
          "file": "rights_attribute_handlers.py",
          "line": 124,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/vendor/tracks/validate/dataloader",
          "handler": "dataload_validate_tracks_for_vendor",
          "file": "track_handlers.py",
          "line": 998,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/track.py::delete",
        "logic/track.py::update_track_duration",
        "logic/track_role.py::create",
        "logic/track_role.py::delete",
        "logic/track_role.py::update",
        "logic/track_sample.py::bulk_delete_samples_by_tuids",
        "logic/track_sample.py::get_track_sample",
        "logic/track_spatial.py::create_track_spatial",
        "logic/track_spatial.py::delete_track_spatial",
        "logic/track_spatial.py::update_track_spatial"
      ]
    },
    {
      "name": "ows-transcoding",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-transcoding.git",
      "team": "content-delivery-asset-management",
      "endpoints": {
        "total": 6,
        "used": {
          "count": 2,
          "percent": 33.3
        },
        "unused": {
          "count": 4,
          "percent": 66.7
        }
      },
      "functions": {
        "total": 5,
        "dead": 5,
        "dead_percent": 100.0
      },
      "details": [
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 34,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/transcoding-job/<int:transcoding_job_id>",
          "handler": "get_transcoding_job",
          "file": "handlers.py",
          "line": 133,
          "status": "unused",
          "dead_functions": [
            "logic/transcoding_job.py::get_transcoding_job_by_id"
          ]
        },
        {
          "method": "POST",
          "path": "/transcoding-job/<transcoding_job_id>/status",
          "handler": "set_transcoding_job_status",
          "file": "handlers.py",
          "line": 111,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/transcoding-order/<int:transcoding_order_id>/status",
          "handler": "get_transcoding_status",
          "file": "handlers.py",
          "line": 94,
          "status": "unused",
          "dead_functions": [
            "logic/transcoding_order.py::get_status",
            "models/transcoding_job.py::get_transcoding_jobs_by_order_id"
          ]
        },
        {
          "method": "POST",
          "path": "/transcoding/preset/<string:preset_alias>",
          "handler": "create_preset_transcoding",
          "file": "handlers.py",
          "line": 67,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/transcoding/presets",
          "handler": "get_all_presets",
          "file": "handlers.py",
          "line": 56,
          "status": "unused",
          "dead_functions": [
            "logic/preset.py::get_all_presets",
            "models/preset.py::get_all_presets"
          ]
        }
      ],
      "dead_functions": [
        "logic/preset.py::get_all_presets",
        "logic/transcoding_job.py::get_transcoding_job_by_id",
        "logic/transcoding_order.py::get_status",
        "models/preset.py::get_all_presets",
        "models/transcoding_job.py::get_transcoding_jobs_by_order_id"
      ]
    },
    {
      "name": "ows-url-shortener",
      "framework": "fastapi",
      "repo_url": "https://github.com/theorchard/ows-url-shortener.git",
      "team": "fansifter",
      "endpoints": {
        "total": 8,
        "used": {
          "count": 1,
          "percent": 12.5
        },
        "unused": {
          "count": 7,
          "percent": 87.5
        }
      },
      "functions": {
        "total": 0,
        "dead": 0,
        "dead_percent": 0
      },
      "details": [
        {
          "method": "GET",
          "path": "/allowed-domains",
          "handler": "allowed_domains",
          "file": "main.py",
          "line": 130,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/bulk-shorten",
          "handler": "bulk_shorten_url",
          "file": "main.py",
          "line": 105,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/check-path",
          "handler": "check_path",
          "file": "main.py",
          "line": 34,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/delete-paths",
          "handler": "delete_paths",
          "file": "main.py",
          "line": 138,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "hello",
          "file": "infra.py",
          "line": 15,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/paths/{path}",
          "handler": "update_path",
          "file": "main.py",
          "line": 151,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/redirect/{path}",
          "handler": "short_url_redirect",
          "file": "main.py",
          "line": 43,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/shorten",
          "handler": "shorten_url",
          "file": "main.py",
          "line": 72,
          "status": "unused",
          "dead_functions": []
        }
      ],
      "dead_functions": []
    },
    {
      "name": "ows-users",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-users.git",
      "team": "accounts-platform",
      "endpoints": {
        "total": 93,
        "used": {
          "count": 61,
          "percent": 65.6
        },
        "unused": {
          "count": 32,
          "percent": 34.4
        }
      },
      "functions": {
        "total": 97,
        "dead": 43,
        "dead_percent": 44.3
      },
      "details": [
        {
          "method": "GET",
          "path": "/<string:account_type>/<string:account_id>/users",
          "handler": "get_contact_details",
          "file": "user.py",
          "line": 392,
          "status": "unused",
          "dead_functions": [
            "logic/user_info.py::get_contact_details",
            "models/user_info.py::get_contact_details"
          ]
        },
        {
          "method": "GET",
          "path": "/auth0/<auth0_user_id>/organizations",
          "handler": "get_auth0_user_organizations",
          "file": "auth0.py",
          "line": 477,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/auth0/add/organization-members",
          "handler": "create_organization_members",
          "file": "auth0.py",
          "line": 518,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/auth0/invite/organization-member",
          "handler": "create_organization_invitation",
          "file": "auth0.py",
          "line": 494,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/auth0/organizations/<string:org_name>",
          "handler": "get_auth0_organization",
          "file": "auth0.py",
          "line": 270,
          "status": "unused",
          "dead_functions": [
            "logic/auth0_client.py::get_organization"
          ]
        },
        {
          "method": "POST",
          "path": "/auth0/recovery",
          "handler": "create_user_password_reset",
          "file": "auth0.py",
          "line": 213,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/auth0/reset-mfa/<string:auth0_id>",
          "handler": "reset_mfa_devices_for_user",
          "file": "auth0.py",
          "line": 185,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/auth0/reset-user/<string:user_identifier>",
          "handler": "reset_user_with_user_id",
          "file": "auth0.py",
          "line": 450,
          "status": "unused",
          "dead_functions": [
            "logic/user_info.py::reset_user_auth0_details",
            "models/user_info.py::reset_user_auth0_details"
          ]
        },
        {
          "method": "DELETE",
          "path": "/auth0/reset-users/<string:auth0_id>",
          "handler": "reset_user_with_auth0",
          "file": "auth0.py",
          "line": 166,
          "status": "unused",
          "dead_functions": [
            "logic/user_info.py::reset_users_auth0_details",
            "models/user_info.py::reset_users_auth0_details"
          ]
        },
        {
          "method": "POST",
          "path": "/auth0/send-verification-email",
          "handler": "resend_verify_email",
          "file": "auth0.py",
          "line": 252,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/auth0/users",
          "handler": "get_paginated_auth0_users",
          "file": "auth0.py",
          "line": 49,
          "status": "unused",
          "dead_functions": [
            "logic/auth0_client.py::get_auth0_users_paginated"
          ]
        },
        {
          "method": "POST",
          "path": "/auth0/users",
          "handler": "create_user_with_auth0",
          "file": "auth0.py",
          "line": 76,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/auth0/users/<string:auth0_id>/all-accounts",
          "handler": "get_all_accounts_with_auth0_id",
          "file": "auth0.py",
          "line": 26,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/auth0/users/<string:user_id>",
          "handler": "delete_user_with_auth0",
          "file": "auth0.py",
          "line": 158,
          "status": "unused",
          "dead_functions": [
            "logic/auth0_client.py::delete_user"
          ]
        },
        {
          "method": "GET",
          "path": "/auth0/users/<string:user_id>",
          "handler": "read_user_with_auth0",
          "file": "auth0.py",
          "line": 84,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/auth0/users/<string:user_id>",
          "handler": "update_user_with_auth0",
          "file": "auth0.py",
          "line": 132,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/auth0/users/<string:user_id>/picture",
          "handler": "read_user_picture_with_auth0_user_id",
          "file": "auth0.py",
          "line": 92,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/auth0/users/bulk",
          "handler": "get_bulk_paginated_auth0_users",
          "file": "auth0.py",
          "line": 61,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "hello_world",
          "file": "common.py",
          "line": 23,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/identities/<identity_id>/application-access/<app_name>",
          "handler": "get_application_access",
          "file": "identity.py",
          "line": 215,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/internal/user/get_by_email",
          "handler": "get_internal_user_by_email",
          "file": "internal.py",
          "line": 44,
          "status": "unused",
          "dead_functions": [
            "models/identities.py::get_identity_id_by_email"
          ]
        },
        {
          "method": "GET",
          "path": "/internal/users",
          "handler": "get_internal_users",
          "file": "internal.py",
          "line": 21,
          "status": "unused",
          "dead_functions": [
            "models/identities.py::get_employees_by_search_term"
          ]
        },
        {
          "method": "POST",
          "path": "/logout/identity/<identity_id>",
          "handler": "logout_mobile_device",
          "file": "identity.py",
          "line": 64,
          "status": "unused",
          "dead_functions": [
            "logic/auth0_client.py::revoke_refresh_token",
            "logic/devices.py::delete_push_notification_device",
            "models/devices.py::delete_push_notification_device"
          ]
        },
        {
          "method": "GET",
          "path": "/ows/<string:account_type>/<string:account_id>/primary-contact",
          "handler": "get_primary_contact",
          "file": "user.py",
          "line": 424,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/ows/users/identity/email/<email>",
          "handler": "update_identity_by_email_backend",
          "file": "identity.py",
          "line": 195,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/profile/identity/<orchard_identity_id>",
          "handler": "create_profile_for_identity",
          "file": "profile.py",
          "line": 158,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/profile/profile_id/<int:profile_id>/profile_type/<profile_type>",
          "handler": "delete_profile_by_id_and_type",
          "file": "profile.py",
          "line": 217,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/profile/profile_id/<int:profile_id>/profile_type/<profile_type>",
          "handler": "get_profile_by_id_and_type",
          "file": "profile.py",
          "line": 189,
          "status": "unused",
          "dead_functions": [
            "logic/profiles.py::get_profile"
          ]
        },
        {
          "method": "PATCH",
          "path": "/profile/profile_id/<int:profile_id>/profile_type/<profile_type>",
          "handler": "update_profile_by_id_and_type",
          "file": "profile.py",
          "line": 247,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/profile/profile_id/<int:profile_id>/profile_type/<profile_type>/identity",
          "handler": "get_identity_for_profile",
          "file": "profile.py",
          "line": 348,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/profile/profile_id/<profile_uuid>/profile_type/<profile_type>",
          "handler": "delete_profile_by_id_and_type",
          "file": "profile.py",
          "line": 217,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/profile/profile_id/<profile_uuid>/profile_type/<profile_type>",
          "handler": "get_profile_by_id_and_type",
          "file": "profile.py",
          "line": 189,
          "status": "unused",
          "dead_functions": [
            "logic/profiles.py::get_profile"
          ]
        },
        {
          "method": "GET",
          "path": "/profile/profile_id/<profile_uuid>/profile_type/<profile_type>/identity",
          "handler": "get_identity_for_profile",
          "file": "profile.py",
          "line": 348,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/profile/profile_id/<uuid>/profile_type/<profile_type>",
          "handler": "update_profile_by_id_and_type",
          "file": "profile.py",
          "line": 247,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/profile/profile_uuid/<profile_uuid>",
          "handler": "delete_profile_by_id_and_type",
          "file": "profile.py",
          "line": 217,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/profile/profile_uuid/<profile_uuid>",
          "handler": "get_profile_by_id_and_type",
          "file": "profile.py",
          "line": 189,
          "status": "unused",
          "dead_functions": [
            "logic/profiles.py::get_profile"
          ]
        },
        {
          "method": "GET",
          "path": "/profile/profile_uuid/<profile_uuid>/identity",
          "handler": "get_identity_for_profile",
          "file": "profile.py",
          "line": 348,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/profile/profile_uuid/<uuid>",
          "handler": "update_profile_by_id_and_type",
          "file": "profile.py",
          "line": 247,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/profile/uuid/<uuid>",
          "handler": "get_profile_by_uuid",
          "file": "profile.py",
          "line": 379,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users",
          "handler": "get_users",
          "file": "user.py",
          "line": 140,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/<string:user_id>",
          "handler": "get_user",
          "file": "user.py",
          "line": 207,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/users/<string:user_id>/auth0/deactivate/<string:app>",
          "handler": "deactivate_user",
          "file": "auth0.py",
          "line": 435,
          "status": "unused",
          "dead_functions": [
            "logic/user_info.py::deactivate_user"
          ]
        },
        {
          "method": "GET",
          "path": "/users/<string:user_id>/minimum-details",
          "handler": "get_minimum_user_details",
          "file": "user.py",
          "line": 245,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/<string:user_id>/session/<string:app>",
          "handler": "get_user_session_metadata_for_app",
          "file": "user.py",
          "line": 28,
          "status": "unused",
          "dead_functions": [
            "logic/user_info.py::get_user_session_metadata_for_app",
            "models/user_info.py::fetch_alw_session_user_metatada"
          ]
        },
        {
          "method": "GET",
          "path": "/users/<string:user_id>/session/<string:app>/raw",
          "handler": "get_user_session_metadata_for_app_raw",
          "file": "user.py",
          "line": 44,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/<string:vc_id>/session/<string:app_name>/linked-accounts",
          "handler": "get_linked_accounts",
          "file": "user.py",
          "line": 63,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/users/<vend_contact_id>/status",
          "handler": "update_user_status",
          "file": "user.py",
          "line": 344,
          "status": "unused",
          "dead_functions": [
            "logic/notifications.py::subscribe_labelprofile",
            "logic/notifications.py::unsubscribe_labelprofile",
            "logic/user_info.py::deactivate_user",
            "logic/user_info.py::reactivate_user",
            "logic/user_info.py::update_user_status",
            "models/ows_notifications.py::subscribe_label",
            "models/ows_notifications.py::unsubscribe_label"
          ]
        },
        {
          "method": "GET",
          "path": "/users/account_managers",
          "handler": "get_account_managers",
          "file": "user.py",
          "line": 481,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/users/alw/<string:user_id>",
          "handler": "update_vend_contact_user",
          "file": "user.py",
          "line": 442,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/users/auth0-update",
          "handler": "update_user_with_auth0_details",
          "file": "auth0.py",
          "line": 367,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/users/auth0/<string:auth0_id>/primary",
          "handler": "set_auth0_primary_user",
          "file": "auth0.py",
          "line": 340,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/auth0/email/<string:email>",
          "handler": "get_auth0_users_with_email",
          "file": "auth0.py",
          "line": 275,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/users/auth0/single-signon",
          "handler": "send_auth0_single_signon",
          "file": "auth0.py",
          "line": 304,
          "status": "unused",
          "dead_functions": [
            "logic/auth0_client.py::send_sqs_message",
            "logic/user_info.py::get_label_names",
            "logic/user_info.py::get_label_names_for_auth0",
            "models/user_info.py::fetch_vendor_names"
          ]
        },
        {
          "method": "POST",
          "path": "/users/bulk-auth0-password-reset",
          "handler": "bulk_password_reset",
          "file": "auth0.py",
          "line": 289,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/closers",
          "handler": "get_closers",
          "file": "user.py",
          "line": 492,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/document",
          "handler": "get_user_document",
          "file": "user.py",
          "line": 277,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/get-alw-users-by-email",
          "handler": "get_user_by_email",
          "file": "user.py",
          "line": 221,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/users/identity",
          "handler": "create_identity",
          "file": "identity.py",
          "line": 244,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/users/identity/<identity_id>",
          "handler": "delete_identity",
          "file": "identity.py",
          "line": 339,
          "status": "unused",
          "dead_functions": [
            "logic/profiles.py::delete_identity_from_graph",
            "models/identities.py::delete_identity"
          ]
        },
        {
          "method": "GET",
          "path": "/users/identity/<identity_id>",
          "handler": "get_identity",
          "file": "identity.py",
          "line": 277,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/users/identity/<identity_id>",
          "handler": "update_identity",
          "file": "identity.py",
          "line": 313,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/identity/<identity_id>/device",
          "handler": "get_user_device",
          "file": "identity.py",
          "line": 84,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/users/identity/<identity_id>/device",
          "handler": "add_user_device",
          "file": "identity.py",
          "line": 33,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/users/identity/<identity_id>/device/<device_id>",
          "handler": "delete_user_device",
          "file": "identity.py",
          "line": 160,
          "status": "unused",
          "dead_functions": [
            "logic/devices.py::delete_push_notification_device",
            "models/devices.py::delete_push_notification_device"
          ]
        },
        {
          "method": "DELETE",
          "path": "/users/identity/<identity_id>/profile/<profile_type>/<int:profile_id>",
          "handler": "delete_profile_to_identity",
          "file": "profile.py",
          "line": 317,
          "status": "unused",
          "dead_functions": [
            "logic/profiles.py::delete_profile_to_identity",
            "logic/profiles.py::delete_profile_uuid_to_identity",
            "models/profiles.py::soft_delete_profile_to_identity_relationship",
            "models/profiles.py::soft_delete_profile_to_identity_relationship_by_uuid"
          ]
        },
        {
          "method": "POST",
          "path": "/users/identity/<identity_id>/profile/<profile_type>/<int:profile_id>",
          "handler": "add_profile_to_identity",
          "file": "profile.py",
          "line": 285,
          "status": "unused",
          "dead_functions": [
            "logic/profiles.py::add_profile_to_identity",
            "logic/profiles.py::add_profile_uuid_to_identity",
            "models/profiles.py::link_identity_to_profile_by_uuid"
          ]
        },
        {
          "method": "DELETE",
          "path": "/users/identity/<identity_id>/profile/<profile_type>/<profile_uuid>",
          "handler": "delete_profile_to_identity",
          "file": "profile.py",
          "line": 317,
          "status": "unused",
          "dead_functions": [
            "logic/profiles.py::delete_profile_to_identity",
            "logic/profiles.py::delete_profile_uuid_to_identity",
            "models/profiles.py::soft_delete_profile_to_identity_relationship",
            "models/profiles.py::soft_delete_profile_to_identity_relationship_by_uuid"
          ]
        },
        {
          "method": "POST",
          "path": "/users/identity/<identity_id>/profile/<profile_type>/<profile_uuid>",
          "handler": "add_profile_to_identity",
          "file": "profile.py",
          "line": 285,
          "status": "unused",
          "dead_functions": [
            "logic/profiles.py::add_profile_to_identity",
            "logic/profiles.py::add_profile_uuid_to_identity",
            "models/profiles.py::link_identity_to_profile_by_uuid"
          ]
        },
        {
          "method": "DELETE",
          "path": "/users/identity/<identity_id>/profile/<profile_uuid>",
          "handler": "delete_profile_to_identity",
          "file": "profile.py",
          "line": 317,
          "status": "unused",
          "dead_functions": [
            "logic/profiles.py::delete_profile_to_identity",
            "logic/profiles.py::delete_profile_uuid_to_identity",
            "models/profiles.py::soft_delete_profile_to_identity_relationship",
            "models/profiles.py::soft_delete_profile_to_identity_relationship_by_uuid"
          ]
        },
        {
          "method": "POST",
          "path": "/users/identity/<identity_id>/profile/<profile_uuid>",
          "handler": "add_profile_to_identity",
          "file": "profile.py",
          "line": 285,
          "status": "unused",
          "dead_functions": [
            "logic/profiles.py::add_profile_to_identity",
            "logic/profiles.py::add_profile_uuid_to_identity",
            "models/profiles.py::link_identity_to_profile_by_uuid"
          ]
        },
        {
          "method": "PATCH",
          "path": "/users/identity/<identity_id>/update-auth0-id/<auth0_user_id>",
          "handler": "update_auth0_details_for_identity",
          "file": "identity.py",
          "line": 350,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/identity/<identity_id>/vendor/<label_profile_id>",
          "handler": "get_identity_vendor",
          "file": "identity.py",
          "line": 402,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/identity/<orchard_identity>/application/<app_name>/profiles",
          "handler": "get_profiles",
          "file": "profile.py",
          "line": 29,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/identity/<orchard_identity>/profiles",
          "handler": "get_all_identity_profiles",
          "file": "identity.py",
          "line": 373,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/identity/<orchard_identity_id>/applications",
          "handler": "get_applications",
          "file": "profile.py",
          "line": 88,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/identity/<string:identity_id>/can_unlink_social_account",
          "handler": "get_can_unlink_participant_social_account",
          "file": "identity.py",
          "line": 438,
          "status": "unused",
          "dead_functions": [
            "logic/user_info.py::can_unlink_participant_social_account",
            "models/social_auth_item.py::fetch"
          ]
        },
        {
          "method": "PATCH",
          "path": "/users/identity/<string:identity_id>/unlink_social_account",
          "handler": "unlink_participant_social_account",
          "file": "identity.py",
          "line": 477,
          "status": "unused",
          "dead_functions": [
            "logic/user_info.py::unlink_participant_social_account",
            "models/social_auth_item.py::fetch",
            "models/social_auth_item.py::set_linked_to_false"
          ]
        },
        {
          "method": "GET",
          "path": "/users/identity/<string:identity_id>/zendesk_token/<string:token_version>",
          "handler": "get_zendesk_token",
          "file": "identity.py",
          "line": 420,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/identity/auth0/<auth0_user_id>",
          "handler": "get_identity_by_auth0_id",
          "file": "identity.py",
          "line": 119,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/identity/email/<email>",
          "handler": "get_identity_by_email",
          "file": "identity.py",
          "line": 95,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PATCH",
          "path": "/users/identity/email/<email>",
          "handler": "update_identity_by_email",
          "file": "identity.py",
          "line": 175,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/identity/email/<email>/valid-invitation",
          "handler": "check_valid_invitation",
          "file": "identity.py",
          "line": 134,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/users/orchadmin/dataloader",
          "handler": "get_orchadmin_users",
          "file": "user.py",
          "line": 171,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/product_managers",
          "handler": "get_product_managers",
          "file": "user.py",
          "line": 462,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/roles/<string:app>",
          "handler": "get_user_roles",
          "file": "user.py",
          "line": 109,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/users/session/<string:app>",
          "handler": "get_user_session_metadata_for_app_with_grass",
          "file": "user.py",
          "line": 78,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/users/verify-login",
          "handler": "verify_login_user",
          "file": "user.py",
          "line": 308,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/ws/agreements/vendor",
          "handler": "delete_vendor_agreement",
          "file": "common.py",
          "line": 229,
          "status": "unused",
          "dead_functions": [
            "logic/vendor_agreement.py::delete_vendor_agreement",
            "models/vendor_agreement.py::delete_vendor_agreement"
          ]
        },
        {
          "method": "GET",
          "path": "/ws/agreements/vendor/<int:permission_type_id>",
          "handler": "get_vendor_agreement",
          "file": "common.py",
          "line": 192,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ws/agreements/vendor/<int:permission_type_id>",
          "handler": "create_vendor_agreement",
          "file": "common.py",
          "line": 144,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ws/generate-jwt-token/feature-fm",
          "handler": "generate_jwt_token",
          "file": "common.py",
          "line": 99,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ws/generate-token/<token_type>",
          "handler": "generate_token",
          "file": "common.py",
          "line": 45,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/ws/users/roles/<int:user_id>",
          "handler": "get_vend_contact_user_roles",
          "file": "user.py",
          "line": 449,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/auth0_client.py::delete_user",
        "logic/auth0_client.py::get_auth0_users_paginated",
        "logic/auth0_client.py::get_organization",
        "logic/auth0_client.py::revoke_refresh_token",
        "logic/auth0_client.py::send_sqs_message",
        "logic/devices.py::delete_push_notification_device",
        "logic/notifications.py::subscribe_labelprofile",
        "logic/notifications.py::unsubscribe_labelprofile",
        "logic/profiles.py::add_profile_to_identity",
        "logic/profiles.py::add_profile_uuid_to_identity",
        "logic/profiles.py::delete_identity_from_graph",
        "logic/profiles.py::delete_profile_to_identity",
        "logic/profiles.py::delete_profile_uuid_to_identity",
        "logic/profiles.py::get_profile",
        "logic/user_info.py::can_unlink_participant_social_account",
        "logic/user_info.py::deactivate_user",
        "logic/user_info.py::get_contact_details",
        "logic/user_info.py::get_label_names",
        "logic/user_info.py::get_label_names_for_auth0",
        "logic/user_info.py::get_user_session_metadata_for_app",
        "logic/user_info.py::reactivate_user",
        "logic/user_info.py::reset_user_auth0_details",
        "logic/user_info.py::reset_users_auth0_details",
        "logic/user_info.py::unlink_participant_social_account",
        "logic/user_info.py::update_user_status",
        "logic/vendor_agreement.py::delete_vendor_agreement",
        "models/devices.py::delete_push_notification_device",
        "models/identities.py::delete_identity",
        "models/identities.py::get_employees_by_search_term",
        "models/identities.py::get_identity_id_by_email",
        "models/ows_notifications.py::subscribe_label",
        "models/ows_notifications.py::unsubscribe_label",
        "models/profiles.py::link_identity_to_profile_by_uuid",
        "models/profiles.py::soft_delete_profile_to_identity_relationship",
        "models/profiles.py::soft_delete_profile_to_identity_relationship_by_uuid",
        "models/social_auth_item.py::fetch",
        "models/social_auth_item.py::set_linked_to_false",
        "models/user_info.py::fetch_alw_session_user_metatada",
        "models/user_info.py::fetch_vendor_names",
        "models/user_info.py::get_contact_details",
        "models/user_info.py::reset_user_auth0_details",
        "models/user_info.py::reset_users_auth0_details",
        "models/vendor_agreement.py::delete_vendor_agreement"
      ]
    },
    {
      "name": "ows-vectororder",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-vectororder.git",
      "team": "content-delivery-asset-management",
      "endpoints": {
        "total": 14,
        "used": {
          "count": 9,
          "percent": 64.3
        },
        "unused": {
          "count": 5,
          "percent": 35.7
        }
      },
      "functions": {
        "total": 12,
        "dead": 7,
        "dead_percent": 58.3
      },
      "details": [
        {
          "method": "GET",
          "path": "/delivery-statuses",
          "handler": "get_delivery_statuses",
          "file": "main.py",
          "line": 140,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/encoders",
          "handler": "get_encoders",
          "file": "main.py",
          "line": 128,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/encoding-statuses",
          "handler": "get_encoding_statuses",
          "file": "main.py",
          "line": 134,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "main.py",
          "line": 35,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/jobs/<int:job_id>/eligibility",
          "handler": "get_job_eligibility",
          "file": "jobs.py",
          "line": 41,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/jobs/search",
          "handler": "jobs_search",
          "file": "search.py",
          "line": 18,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/jobs/status",
          "handler": "jobs_status_action",
          "file": "jobs.py",
          "line": 19,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/orders",
          "handler": "get_orders",
          "file": "main.py",
          "line": 108,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/orders",
          "handler": "create_order",
          "file": "main.py",
          "line": 146,
          "status": "unused",
          "dead_functions": [
            "logic/orders.py::create_order",
            "models/orders.py::create_order"
          ]
        },
        {
          "method": "PATCH",
          "path": "/orders/<int:order_id>",
          "handler": "update_order",
          "file": "main.py",
          "line": 163,
          "status": "unused",
          "dead_functions": [
            "logic/orders.py::update_order",
            "models/orders.py::update_order"
          ]
        },
        {
          "method": "GET",
          "path": "/orders/<order_id>",
          "handler": "get_order",
          "file": "main.py",
          "line": 93,
          "status": "unused",
          "dead_functions": [
            "logic/orders.py::get_order",
            "models/orders.py::get_order_from_dynamo"
          ]
        },
        {
          "method": "GET",
          "path": "/priorities",
          "handler": "get_priorities",
          "file": "main.py",
          "line": 79,
          "status": "unused",
          "dead_functions": [
            "logic/priorities.py::get_priorities"
          ]
        },
        {
          "method": "GET",
          "path": "/products/<int:upc>/eligibility",
          "handler": "get_product_eligibility",
          "file": "jobs.py",
          "line": 48,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/statuses",
          "handler": "get_statuses",
          "file": "main.py",
          "line": 85,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/orders.py::create_order",
        "logic/orders.py::get_order",
        "logic/orders.py::update_order",
        "logic/priorities.py::get_priorities",
        "models/orders.py::create_order",
        "models/orders.py::get_order_from_dynamo",
        "models/orders.py::update_order"
      ]
    },
    {
      "name": "ows-video",
      "framework": "flask",
      "repo_url": "https://github.com/theorchard/ows-video.git",
      "team": "content-delivery-asset-management",
      "endpoints": {
        "total": 39,
        "used": {
          "count": 27,
          "percent": 69.2
        },
        "unused": {
          "count": 12,
          "percent": 30.8
        }
      },
      "functions": {
        "total": 35,
        "dead": 19,
        "dead_percent": 54.3
      },
      "details": [
        {
          "method": "GET",
          "path": "/assets-bulk",
          "handler": "get_video_asset_details_for_bulk_products",
          "file": "handlers.py",
          "line": 545,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/create_bundle",
          "handler": "create_bundle",
          "file": "handlers.py",
          "line": 659,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/create_product",
          "handler": "create_product",
          "file": "handlers.py",
          "line": 187,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/delivery/<int:upc>/status",
          "handler": "get_asset_delivery_status",
          "file": "handlers.py",
          "line": 507,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/hello/",
          "handler": "health",
          "file": "handlers.py",
          "line": 66,
          "status": "unused",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/ingest",
          "handler": "ingest",
          "file": "handlers.py",
          "line": 523,
          "status": "unused",
          "dead_functions": [
            "logic/ingest.py::ingest"
          ]
        },
        {
          "method": "POST",
          "path": "/job",
          "handler": "manage_job",
          "file": "handlers.py",
          "line": 136,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/job/<int:job_id>",
          "handler": "get_job",
          "file": "handlers.py",
          "line": 72,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/jobs",
          "handler": "get_jobs",
          "file": "handlers.py",
          "line": 96,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/max_dashboard_item_id",
          "handler": "get_max_dashboard_item_id",
          "file": "handlers.py",
          "line": 164,
          "status": "unused",
          "dead_functions": [
            "logic/video_dashboard_item.py::get_max_dashboard_item_id",
            "models/sql/queries.py::get_max_dashboard_item_id"
          ]
        },
        {
          "method": "GET",
          "path": "/metadata/<int:product_id>",
          "handler": "load_metadata",
          "file": "handlers.py",
          "line": 243,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/metadata/<int:product_id>",
          "handler": "save_metadata",
          "file": "handlers.py",
          "line": 256,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/metadata/<int:product_id>/track",
          "handler": "get_tracks_metadata",
          "file": "handlers.py",
          "line": 224,
          "status": "unused",
          "dead_functions": [
            "logic/track.py::get_tracks_metadata",
            "models/ows/track.py::get_track_ids",
            "models/sql/queries.py::get_video_tracks_metadata"
          ]
        },
        {
          "method": "POST",
          "path": "/metadata/<int:product_id>/track",
          "handler": "create_track_metadata",
          "file": "handlers.py",
          "line": 234,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/metadata/bulk-ingest",
          "handler": "bulk_ingest_metadata",
          "file": "handlers.py",
          "line": 315,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "PUT",
          "path": "/migrate_artist/<int:product_id>",
          "handler": "migrate_artist",
          "file": "handlers.py",
          "line": 285,
          "status": "unused",
          "dead_functions": [
            "logic/product.py::migrate_artist",
            "models/ows/artist.py::check_artist_ownership",
            "models/sql/classes/product_video.py::update_primary_artist"
          ]
        },
        {
          "method": "GET",
          "path": "/new_assets/<int:dashboard_item_id>",
          "handler": "get_new_assets",
          "file": "handlers.py",
          "line": 143,
          "status": "unused",
          "dead_functions": [
            "logic/video_dashboard_item.py::get_new_assets",
            "models/sql/queries.py::get_new_assets",
            "models/sql/queries.py::get_new_assets_count"
          ]
        },
        {
          "method": "GET",
          "path": "/output_video_outer_resolutions",
          "handler": "get_output_video_outer_sizing_rules",
          "file": "handlers.py",
          "line": 602,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/product/<int:product_id>",
          "handler": "delete_product",
          "file": "handlers.py",
          "line": 211,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/approval",
          "handler": "get_approvals",
          "file": "handlers.py",
          "line": 338,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/approval",
          "handler": "change_approval",
          "file": "handlers.py",
          "line": 346,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/<int:product_id>/get_available_channels",
          "handler": "get_available_channels",
          "file": "handlers.py",
          "line": 364,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/migrate_project",
          "handler": "migrate_project",
          "file": "handlers.py",
          "line": 379,
          "status": "unused",
          "dead_functions": [
            "logic/metadata.py::migrate_project",
            "models/sql/classes/product_video.py::update_primary_artist"
          ]
        },
        {
          "method": "POST",
          "path": "/product/<int:product_id>/submit",
          "handler": "submit",
          "file": "handlers.py",
          "line": 325,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/product/assets",
          "handler": "get_product_assets",
          "file": "handlers.py",
          "line": 531,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/project/<int:project_id>/get_available_channels",
          "handler": "get_available_channels_by_project_id",
          "file": "handlers.py",
          "line": 401,
          "status": "unused",
          "dead_functions": [
            "logic/metadata.py::get_available_channels_by_project_id"
          ]
        },
        {
          "method": "POST",
          "path": "/sizing_rule",
          "handler": "save_sizing_rule",
          "file": "handlers.py",
          "line": 640,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "DELETE",
          "path": "/sizing_rule/<int:item_id>",
          "handler": "delete_sizing_rule",
          "file": "handlers.py",
          "line": 625,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/sizing_rule/<int:item_id>",
          "handler": "get_sizing_rule",
          "file": "handlers.py",
          "line": 617,
          "status": "unused",
          "dead_functions": [
            "logic/product_video_sizing_rule.py::load_resolution_override",
            "models/sql/classes/product_video_sizing_rules.py::get"
          ]
        },
        {
          "method": "GET",
          "path": "/sizing_rules",
          "handler": "get_all_sizing_rules",
          "file": "handlers.py",
          "line": 610,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/stream/product/<int:product_id>/hls",
          "handler": "get_hls_streaming_url",
          "file": "handlers.py",
          "line": 174,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/thumbnails/job/<int:job_id>",
          "handler": "get_available_thumbnails",
          "file": "handlers.py",
          "line": 467,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/thumbnails/product/<int:product_id>",
          "handler": "get_product_thumbnail",
          "file": "handlers.py",
          "line": 486,
          "status": "unused",
          "dead_functions": [
            "logic/thumbnails.py::get_product_thumbnail"
          ]
        },
        {
          "method": "POST",
          "path": "/thumbnails/upload-token",
          "handler": "generate_upload_token_for_custom_thumbnail",
          "file": "handlers.py",
          "line": 499,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/video-asset",
          "handler": "upsert_video_asset",
          "file": "handlers.py",
          "line": 588,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/video-asset/bulk-ingest",
          "handler": "bulk_upsert_video_asset",
          "file": "handlers.py",
          "line": 595,
          "status": "unused",
          "dead_functions": [
            "logic/video_asset.py::bulk_upsert_video_assets",
            "models/sql/classes/video_asset.py::bulk_upsert_video_assets"
          ]
        },
        {
          "method": "GET",
          "path": "/video-types-all",
          "handler": "get_all_video_types",
          "file": "handlers.py",
          "line": 677,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "GET",
          "path": "/workflow/<int:workflow_job_id>/transfer/<string:filename>/progress",
          "handler": "get_cloud_transfer_progress",
          "file": "handlers.py",
          "line": 516,
          "status": "used",
          "dead_functions": []
        },
        {
          "method": "POST",
          "path": "/workflow/<string:workflow_job_type>",
          "handler": "setup_workflow",
          "file": "handlers.py",
          "line": 424,
          "status": "used",
          "dead_functions": []
        }
      ],
      "dead_functions": [
        "logic/ingest.py::ingest",
        "logic/metadata.py::get_available_channels_by_project_id",
        "logic/metadata.py::migrate_project",
        "logic/product.py::migrate_artist",
        "logic/product_video_sizing_rule.py::load_resolution_override",
        "logic/thumbnails.py::get_product_thumbnail",
        "logic/track.py::get_tracks_metadata",
        "logic/video_asset.py::bulk_upsert_video_assets",
        "logic/video_dashboard_item.py::get_max_dashboard_item_id",
        "logic/video_dashboard_item.py::get_new_assets",
        "models/ows/artist.py::check_artist_ownership",
        "models/ows/track.py::get_track_ids",
        "models/sql/classes/product_video.py::update_primary_artist",
        "models/sql/classes/product_video_sizing_rules.py::get",
        "models/sql/classes/video_asset.py::bulk_upsert_video_assets",
        "models/sql/queries.py::get_max_dashboard_item_id",
        "models/sql/queries.py::get_new_assets",
        "models/sql/queries.py::get_new_assets_count",
        "models/sql/queries.py::get_video_tracks_metadata"
      ]
    }
  ]
}