[{"data":1,"prerenderedAt":172},["ShallowReactive",2],{"doc:\u002Freference\u002Fmanagement\u002Frisk-weights":3},{"page":4,"toc":163,"updated":171},{"path":5,"title":6,"seoTitle":7,"description":8,"blocks":9,"examples":146},"\u002Freference\u002Fmanagement\u002Frisk-weights","Risk weights","Management API: Risk Weights and Thresholds","Read, save and restore suspect-score weights and thresholds for your organization and for individual SDK keys, and list the signals they apply to.",[10,13,28,33,38,40,43,45,93,96,99,110,112,115,117,119,122,124,126,129,131,138,140,143,144],{"type":11,"text":12},"p","Risk weights decide what each signal adds to the suspect score, and the threshold decides where `high` begins. Keep them in version control and apply them from code. See [risk weights](\u002Fdocs\u002Frisk-weights) for how profiles are chosen. Any management key can read weights; only **admin** keys can change them.",{"type":14,"title":15,"fields":16},"fields","Path parameters",[17,22,25],{"name":18,"type":19,"text":20,"required":21},"organization_id","string","Your organization, from [Describe the key](\u002Freference\u002Fmanagement\u002Foverview#describe-the-key). A path naming any other organization answers `404`.",true,{"name":23,"type":19,"text":24},"platform","`web`, `android` or `ios`, where a path has it.",{"name":26,"type":19,"text":27},"sdk_key_id","The SDK key, where a path has it.",{"type":29,"level":30,"text":31,"id":32},"heading",2,"List signals","list-signals",{"type":34,"method":35,"path":36,"auth":37},"endpoint","GET","\u002Fapi\u002Fv1\u002Fmanagement\u002Fsignals\u002Fcatalogue","management",{"type":11,"text":39},"Every signal group and the signals in it, with the platforms each applies to and its default weights, the default threshold and the maximum weight. The same for every organization. Weights are set against the signal names listed here.",{"type":29,"level":30,"text":41,"id":42},"Read the organization's weights","read-the-organization-s-weights",{"type":34,"method":35,"path":44,"auth":37},"\u002Fapi\u002Fv1\u002Fmanagement\u002Forganizations\u002F{organization_id}\u002Frisk-weights",{"type":14,"title":46,"fields":47},"Response",[48,51,55],{"name":49,"type":19,"text":50},"scope","`organization`.",{"name":52,"type":53,"text":54},"max_weight","integer","The largest weight accepted, `10000`.",{"name":56,"type":57,"text":58,"children":59},"platforms","PlatformWeights[]","One entry per platform.",[60,62,64,68,71,74,78,81,85,88,90],{"name":23,"type":19,"text":61},"`web`, `android` or `ios`.",{"name":49,"type":19,"text":63},"`organization`, or `default` when nothing has been saved.",{"name":65,"type":66,"text":67},"stored","boolean","Whether this scope has its own saved configuration.",{"name":69,"type":53,"text":70},"revision","Send it back to detect concurrent edits.",{"name":72,"type":53,"text":73},"suspect_threshold","The threshold.",{"name":75,"type":76,"text":77},"weights","object","Signal name to weight.",{"name":79,"type":76,"text":80},"defaults","The shipped default for each signal.",{"name":82,"type":83,"text":84},"signals","string[]","The signals this platform can weight.",{"name":86,"type":19,"text":87},"vpn_weights_mode","`method` or `confidence`.",{"name":89,"type":19,"text":87},"residential_proxy_weights_mode",{"name":91,"type":19,"text":92},"updated_at","When the configuration was last saved.",{"type":29,"level":30,"text":94,"id":95},"Save the organization's weights","save-the-organization-s-weights",{"type":34,"method":97,"path":98,"auth":37},"PUT","\u002Fapi\u002Fv1\u002Fmanagement\u002Forganizations\u002F{organization_id}\u002Frisk-weights\u002F{platform}",{"type":14,"title":100,"fields":101},"Body",[102,104,106,107,108],{"name":75,"type":76,"text":103},"Signal name to weight, from `0` to `10000`. Replaces the stored weights. A signal left out uses its default; `0` turns it off.",{"name":72,"type":53,"text":105},"The score at which the level becomes `high`, from `1` to `1000000`.",{"name":86,"type":19,"text":87},{"name":89,"type":19,"text":87},{"name":69,"type":53,"text":109},"The `revision` a read returned. The save is refused with `409` and `weights_stale` if the weights changed since. Omit it to overwrite.",{"type":11,"text":111},"Every field is optional. Answers with the platform's configuration, which scores the next identification.",{"type":29,"level":30,"text":113,"id":114},"Restore the default weights","restore-the-default-weights",{"type":34,"method":116,"path":98,"auth":37},"DELETE",{"type":11,"text":118},"Saves the shipped defaults for the platform and answers with them.",{"type":29,"level":30,"text":120,"id":121},"Read an SDK key's weights","read-an-sdk-key-s-weights",{"type":34,"method":35,"path":123,"auth":37},"\u002Fapi\u002Fv1\u002Fmanagement\u002Forganizations\u002F{organization_id}\u002Fsdk-keys\u002F{sdk_key_id}\u002Frisk-weights",{"type":11,"text":125},"The same shape as the organization's, with `scope` set to `key`. A platform the key has not overridden answers with the organization's values and `stored` set to `false`.",{"type":29,"level":30,"text":127,"id":128},"Save an SDK key's weights","save-an-sdk-key-s-weights",{"type":34,"method":97,"path":130,"auth":37},"\u002Fapi\u002Fv1\u002Fmanagement\u002Forganizations\u002F{organization_id}\u002Fsdk-keys\u002F{sdk_key_id}\u002Frisk-weights\u002F{platform}",{"type":14,"title":100,"fields":132},[133,134,135,136,137],{"name":75,"type":76,"text":103},{"name":72,"type":53,"text":105},{"name":86,"type":19,"text":87},{"name":89,"type":19,"text":87},{"name":69,"type":53,"text":109},{"type":11,"text":139},"Overrides the organization's profile for this key alone. Because a key belongs to one environment, this is how a new policy is tried on staging keys before it reaches production.",{"type":29,"level":30,"text":141,"id":142},"Remove an SDK key's weights","remove-an-sdk-key-s-weights",{"type":34,"method":116,"path":130,"auth":37},{"type":11,"text":145},"Deletes the key's own configuration, so the key follows the organization's profile again, and answers with what the key is scored under now.",{"request":147,"response":155},[148,152],{"label":149,"lang":150,"code":151},"Organization","bash","curl -X PUT \"https:\u002F\u002Fus.api.fingerly.io\u002Fapi\u002Fv1\u002Fmanagement\u002Forganizations\u002F01a0a7f2-3c18-7b40-8d2e-5f6a9b1c0d37\u002Frisk-weights\u002Fweb\" \\\n  -H \"x-api-key: $FINGERLY_MANAGEMENT_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"suspect_threshold\": 25,\n    \"weights\": {\n      \"automation\": 12\n    },\n    \"revision\": 3\n  }'",{"label":153,"lang":150,"code":154},"One SDK key","curl -X PUT \"https:\u002F\u002Fus.api.fingerly.io\u002Fapi\u002Fv1\u002Fmanagement\u002Forganizations\u002F01a0a7f2-3c18-7b40-8d2e-5f6a9b1c0d37\u002Fsdk-keys\u002F01a0a7f3-9e05-7a61-b4c7-2d8e0f3a6b19\u002Frisk-weights\u002Fweb\" \\\n  -H \"x-api-key: $FINGERLY_MANAGEMENT_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"suspect_threshold\": 20\n  }'",[156,160],{"label":157,"lang":158,"code":159},"200","json","{\n  \"platform\": \"web\",\n  \"scope\": \"organization\",\n  \"stored\": true,\n  \"revision\": 4,\n  \"suspect_threshold\": 25,\n  \"vpn_weights_mode\": \"method\",\n  \"residential_proxy_weights_mode\": \"method\",\n  \"weights\": {\n    \"tor\": 14,\n    \"automation\": 12,\n    \"…\": \"…\"\n  },\n  \"defaults\": {\n    \"tor\": 14,\n    \"automation\": 9,\n    \"…\": \"…\"\n  },\n  \"signals\": [\n    \"tor\",\n    \"automation\",\n    \"…\"\n  ],\n  \"updated_at\": \"2026-09-16T10:02:11Z\"\n}",{"label":161,"lang":158,"code":162},"409","{\n  \"error\": {\n    \"code\": \"weights_stale\",\n    \"message\": \"these weights have been changed since you read them\",\n    \"status\": 409\n  },\n  \"request_id\": \"01a0a84c-0f11-7a3e-9c2d-4b5e6f708192\"\n}",[164,165,166,167,168,169,170],{"id":32,"text":31,"level":30},{"id":42,"text":41,"level":30},{"id":95,"text":94,"level":30},{"id":114,"text":113,"level":30},{"id":121,"text":120,"level":30},{"id":128,"text":127,"level":30},{"id":142,"text":141,"level":30},"2026-09-17T16:56:08.000Z",1789667797871]