Spl3 API: Salmon - Post - fetus-hina/stat.ink GitHub Wiki

not detailed, for stat.ink API profreshionals:

Request

Endpoint URL: https://stat.ink/api/v3/salmon
Request Method: POST or PUT
Authorization: Required, HTTP Header bearer auth only
Content-Type: application/x-msgpack or application/json

name type example info
test boolean "no" If "yes", validation only. Defaults to "no"
uuid uuid-string "b771b3dc-b50d-445b-97cd-a59e9cca541c" UUID to identify the job on the client side.
See here for the recommended calculation method when creating on the basis of data obtained from SplatNet 3.
Be careful: Calculation method differs from battle
private boolean "no" "Is Private Job" flag. Set "yes" when played a private job, otherwise send "no". (Do not omit)
big_run boolean "no" "Is Big Run" flag. Set "yes" when played a Big Run, otherwise send "no". (Do not omit this flag)
eggstra_work boolean "no" "Is Eggstra Work" flag. Set "yes" when played an Eggstra Work. Defaults to "no"
stage key-string "meuniere" https://stat.ink/api-info/stage3
Send Salmon Run stage key (big_run = "no").
Send VS-stage key (big_run = "yes")
danger_rate number [0, 333.3] 123.4 Send 123.4 for 123.4% (Not Verified: Send null for Eggstra Work)
clear_waves integer [0, 3] 3 0 = Failed in Wave1
3 = Normal waves cleared
The result of the Xtra wave (King Salmonid's wave) is not relevant here.
For Eggstra Work, you can send [0, 5]
fail_reason key-string "wipe_out" "wipe_out": Wipe out
"time_limit": Time is up
null: Cleared/Unknown
king_smell integer [0, 5] 5 Salmometer (ja:オカシラゲージ)
king_salmonid key-string "yokozuna" https://stat.ink/api-info/boss-salmonid3
If it appeared, then the key-string of King Salmonid.
If it did not appear, then null or unset
clear_extra boolean "no" Set "yes" if killed the King.
Set "no" if you defeat or timed up.
Set null or unset otherwise (i.e., the King not appeared)
title_before key-string "profreshional_0" https://stat.ink/api-info/salmon-title3
Probably not getting exact data if you are getting from SplatNet 3
title_exp_before integer [0, 999] 40 Profreshional 40/99
title_after key-string "profreshional_0"
title_exp_after integer [0, 999] 60 Profreshional 60/99
golden_eggs integer 123 Number of Golden Eggs collected by all members
power_eggs integer 2345 Number of Power Eggs (normal eggs) collected by all members
gold_scale integer 0 Number of gold scales obtained
silver_scale integer 1 Number of silver scales obtained
bronze_scale integer 9 Number of bronze scales obtained
job_point integer 121 job_point = job_score x job_rate + job_bonus (see the image)
job_score integer 53
job_rate number 2.29
job_bonus integer 0 maybe one of 0, 50 or 100
waves array<Wave struct> (1-4 elements) [{"tide": "low", ...}, ...] Waves information. The 4th element is Xtra Wave.
For Eggstra Work, you can send 5 elements
players array<Player struct> (1-4 elements) [{"name": "...", ...}, ...] Players information. Typ. 4 elements
bosses map<key-string, Boss-struct> (see example) Boss appearances and defeated
key-string: https://stat.ink/api-info/boss-salmonid3
note string public note
private_note string private note
link_url http-url-string https://example.com/ IDN is not allowed, it will be public
agent string (1 ≤ length ≤ 64) "the super client" your client name (see the Battle API for details)
agent_version string (1 ≤ length ≤ 255) "v1.0.0" its version
agent_variables map<string, string>
(1 ≤ len(key) ≤ 63)
(1 ≤ len(value) ≤ 255)
{"foo": "blablabla"} Extra data by UA
automated boolean "yes" Set "yes" if the client is operating in automatic mode.
Otherwise, set "no"
start_at unix-time 1599577200 the job starts at
end_at unix-time 1599577380 the job ends at

Wave structure

name type example info
tide key-string "low" Water level, high, normal or low
event key-string "cohock_charge" https://stat.ink/api-info/salmon-event3
For normal wave, set null or unset
danger_rate number [0.0, 333.3] 123.4 Only for Eggstra Work. Set null for other modes
golden_quota integer 23 Golden Eggs quota (ja:ノルマ)
Set null for Xtra Wave
golden_delivered integer 24 Golden Eggs delivered (ja:納品数)
Set null for Xtra Wave
golden_appearances integer 45 Golden Eggs appearances
special_uses map<key-string, integer> {"sameride": 2, "nicedama": 1} Special weapon used in this wave
https://stat.ink/api-info/weapon3 (Special)

Player structure

name type example info
me boolean "yes" set "yes" if the player is "current" user. otherwise, set "no".
name string (1 ≤ length ≤ 10) "なぎさのこあくま" the player's name
number string "1112" #1112 in splashtag. Do not send #.
Be careful this value is not always integer (may contains alphabet).
We will accept /^[0-9a-zA-Z]{0,32}$/ at this time.
splashtag_title string "アゲアゲのルーキー" title in splashtag, localized & joined
uniform key-string "orange" https://stat.ink/api-info/salmon-uniform3
special key-string "nicedama" https://stat.ink/api-info/weapon3 (Special)
weapons array<key-string> (1-5 elements) ["wakaba", "splatcharger", "splatroller", "bold"] Loaned weapon for each wave
null for unknown
https://stat.ink/api-info/weapon3
golden_eggs integer 14 Golden Eggs delivered
golden_assist integer 8 Golden Eggs touched then delivered it by another player
power_eggs integer 1015 Power Eggs collected
rescue integer 2 The player rescues other players
rescued integer 1 The player rescued by other player (Close to death count)
defeat_boss integer 5 The player 5 kills the Boss Salmonids in this example
disconnected boolean "no" set "yes" if the player disconnected. otherwise, set "no".
species key-string "inkling" "inkling" or "octoling"

Boss structure

name type example info
appearances integer 5 Number of appearances
defeated integer 3 Total number killed by all players
defeated_by_me integer 1 Number killed by the player

appearancesdefeateddefeated_by_me0

{
  "bosses": {
    "bakudan": { // Steelhead
      "appearances": 5,
      "defeated": 3,
      "defeated_by_me": 0
    },
    "katapad": null, // OK, means no Flyfish appearances
    // or unset the key also means no appearances
    "mogura": { // Also OK, means no Maws appearances
      "appearances": 0, // can be zero
      "defeated": 0,
      "defeated_by_me": 0
    },
  }
}

types

  • range (like [1, 4]): See this

  • boolean: "yes" or "no". Be careful - it is not a native boolean type, it is a string. (Note: internally, it accepts native boolean value, but the MsgPack library does not support them.)

  • http-url-string: HTTP or HTTPS URL. IDN (Internationalized Domain Names) are not supported. It might work if Punycode encode is done on the client side.

  • unix-time: integer, seconds from 1970-01-01T00:00:00+00:00 without leap seconds. Be careful if the client using JavaScript -- its time unit is milliseconds, so it must be 1/1000.

  • uuid-string: case insensitive string(lowercase recommended), "00000000-0000-M000-N000-000000000000" format, version 1, 3, 4 or 5 is required (M=1, 3, 4, 5). RFC 4122 variant is required (N=8, 9, a, b).

SplatNet data based UUID

When posting to stat.ink from data obtained from SplatNet, we expect the following method to generate a uuid.
This method IS DIFFERENT with the Battle API.

  1. decode Base64'ed ID from coopHistoryDetail.id ("CoopHistoryDetail-u-..." )
  2. Calc UUIDv5 with namespace f1911910-605e-11ed-a622-7085c2057a9d
$theUUID = uuid_v5(
  base64_decode($history->id),
  uuid_from_string('f1911910-605e-11ed-a622-7085c2057a9d'),
);
⚠️ **GitHub.com Fallback** ⚠️