OptionaladaptiveOptionalbloksThe shape of the build's bk_client_context: the keys in the order the
build sends them, including pixel_ratio where the build sends it. The values stay
with their owners — the Bloks version with BLOKS_VERSION_ID, the
theme with bloksThemeParams, the style sheet the app's own
instagram, and the screen scale with the device, read by the platform
(MobileDisplayScaleWire) — so a profile cannot pair one build's version with another's theme, nor a
build claim a scale the device's user-agent contradicts. Absent, the
reference Android order applies (bloks_version, styles_id, the theme
when the build carries one).
A build fact like the theme: the iOS profile declares the v425-era
shape (theme_params, styles_id, pixel_ratio), which carries no
bloks_version key; the reference device is an iPhone X (scale 3), and a
different generated device renders its own scale. The iOS 451 login's
context is not known, so the v425 value is the fact (conformance/spec/conformance-across-app-versions.md). withDefaultVersionBoundFields adopts
and drops the shape with the other wire-presence facts.
OptionalbloksThe INTERNAL_INFRA_THEME spelling the build sends in the login-stack
action params (the client-data redirect). A build constant beside
bloksThemeParams: the reference 429/448 build 1073357425 sends
THREE_C, and the 448 build 1073357578 and the 451 build send
THREE_NEUTRAL_GRAY. A profile without it sends no field: the build's own
spelling is the only value sent, never a default of another build.
OptionalbloksThe build's active Bloks prism extended palette, once the app has read it:
the x-bloks-prism-extended-palette-gray and -polish-enabled flags. They
are one configuration read, not two independent switches, but each has its
own value per build, so each is declared: both true on the 448
build 1073357578, both 450 builds and both 451
builds; both absent (rendered false) on the 448 build 1073357425; and
older 429-era traffic shows a third combination (gray on, polish off)
that this profile cannot hold — see MobileProcessBloksPrismState. The
neutral control palette sends false for both on every build.
OptionalbloksThe Bloks theme the build reports in bk_context.theme_params on its
Bloks requests. A build constant, like the palette: the 451 build
sends the XMDS theme (three_neutral_gray); the reference 448
build 1073357425 sends none, while the 448 build 1073357578 sends
the same XMDS theme as the 451 build. A profile without it sends the empty
list on an app-root context and omits the key where the build does.
withDefaultVersionBoundFields adopts and drops it like the other
wire-presence facts.
OptionaldirectThe mode the app's Direct inbox snapshot sends (direct_v2/inbox/).
Version-bound like the app version and capabilities: the presented Android
profile sets 2, and a profile that does not set it sends no mode.
OptionaldirectThe num_ai_bots the Direct search surface requests (direct_v2/search_gen_ai_bots/); absent renders 50.
OptionalFACEBOOK_OptionalGRAPHQL_GraphQL client doc ids keyed by friendly name. When an entry matches the
call's friendly name it overrides that call's literal clientDocId.
OptionalGRAPHQL_The size from which the app gzips a GraphQL form: a form whose urlencoded body has at least this many bytes goes out gzipped, a smaller one does not (Instagram Android 451: 500; the app gzips every form of 500 bytes or more and none of 497 or fewer). Undefined keeps the builder's own choice (gzip unless the builder declares otherwise).
OptionalGRAPHQL_When true, GraphQL forms omit the pretty field (Instagram Android 448+).
OptionalGRAPHQL_Value of the GraphQL form server_timestamps field. Instagram Android 448+
sends the literal true; older traffic sent a unix timestamp. Undefined
keeps the legacy timestamp.
OptionallaunchThe launch wire the app build sends, as one fact: '451' for the 451
build's Android launch. It carries the feed/timeline block (the
personalization flag, is_non_feed_surface and the extended
session_level_signals), the appnetsession pair on the two feeds, the
shared launch additions, the inbox tray's graphql_www form, the
save-credentials placement and the full content-filter dictionary fan-out;
a profile without it sends the 448 launch wire (the 448 form, the feeds'
pair opt-out, five dictionaries, the graphql/query tray and the
after-feed prompt). One value, so a mixture cannot be represented.
Version-bound like the app version: the presented Android 451 profile
carries it and withDefaultVersionBoundFields fills it on a same-version
restore. The iOS 451 app sends a different feed form, so an iOS profile
does not carry it: the shared feed brick renders the Android form only.
OptionalmediaThe wire a media like is sent with on this build: the REST
api/v1/media/<id>/like/ or the graphql_www LikeMutation.
A version-bound fact of the presentation, like the app version itself: the
presented Android 451 profile sends the mutation (every 451 like, on the
contextual feed and in the reels viewer), so a live client sends it;
withDefaultVersionBoundFields fills it on a same-version restore, and a
restore of another released version runs on the presented profile's
application altogether. A profile that does not declare it is not evidence
of a wire: the brick dies with
MobileMediaLikeWireNotDeclaredError (a defect, not a typed failure) rather than sending a
request the app was not seen to send. The iOS like is not modelled, so the iOS profile
declares nothing and an iOS like is the same defect. A 448/450-era
profile declares 'rest' — the wire its feed likes carry.
Open: one 450 build sent both wires on one surface, so what selects the
wire inside a build is not known; a REST-like session with its
configuration answer, or a paired run of the two wires, closes it.
OptionalmediaThe shape of the repost note (create_note/v2) this build sends: the
'451' form names the media's carousel child only when it has one, its
carousel_index is the child's index or -1, and it carries no
inventory_source and no ranking_info_token; the '450' form always
carries carousel_media_id, carousel_index (0 when the caller names
none) and ranking_info_token (empty when the caller has none), and
inventory_source (the feed's or its own default).
A version-bound fact of the presentation like mediaRepostWire,
whole: both 451 notes (a profile-posts media and the reels viewer's
contextual feed) carry carousel_index=-1 and none of the three
fields, while the 450 notes carry carousel_media_id and index 0.
withDefaultVersionBoundFields fills it on a same-version restore and drops
a stored value the presented profile does not declare. A profile that
declares neither shape is not evidence: the note dies with
MobileMediaNoteWireNotDeclaredError (a defect, not a typed failure).
OptionalmediaThe way this build reposts a feed media onto the user's profile:
'editor' creates a blank note and sets its text on the note editor's
screen (UpdateMediaNoteRepostText), 'note-with-text' sends the text in
the one create_note/v2 request, with no editor screen.
A version-bound fact of the presentation like mediaLikeWire: the
presented Android 451 profile sends the note with the text in one request
(every 451 repost), and a 448/450-era profile declares 'editor'
(the blank note and the composer's text mutation).
withDefaultVersionBoundFields fills it on a same-version restore. A
profile that does not declare it is not evidence: reposting dies with
MobileMediaRepostWireNotDeclaredError (a defect, not a typed failure).
OptionalreelsThe page_size the build's feed/reels_tray/ request sends: a fact of the
app version, not of the caller (Android 448/451 send 50, iOS 451 25).
A profile that does not name one sends no field rather than an invented
default.
OptionalshoppingThe shopping experiments the app's launch checks, one
IGShoppingExperimentCheckBool each, in this order. Version-bound: a
profile that does not set it sends the one default check
(shops_bau_impact).
OptionalufiThe UFI (user-feed-interface) actions whose requests this build wraps in its
UFI action flow: the like and/or the comment. While one of the listed
actions runs, the app's user-flow logger keeps that action's flow running
(marker 220140399; decompiled: C07rq.A01, type 4, started
flowStartIfNotOngoingForMarker(…, 300 000)), so every REST request built
during it — the action's own and the ones it starts — carries it.
A version-bound fact of the presentation like mediaLikeWire, and a
wire-presence one in both directions: one Android build
sends the marker on the comment's offensive check and the comment itself and
on no like, while a 450 build
sends it on the feed like and on the note of a repost and on
neither the comment nor its check; what selects the action inside a build is not
known, so each build declares the actions it sends. The action
does not reach every surface: the reels like and every request of
the 450 build whose like is the GraphQL mutation carry no such flow,
so the screens that run the flow are the ones that need it
(the feed surfaces' like, the comment sheet's comment).
withDefaultVersionBoundFields fills it on a same-version restore and drops
a stored list the presented profile does not declare, so a restore never
starts a flow its build does not.
OptionalZERO_Zero-rating header values per MobileZeroPhase. This table is the one
wire-presence fact of the legacy zero-rating wire: a profile that carries it
sends x-zero-balance / x-zero-eh, and its zero device ids
(x-zero-a-device-id / -d / -f, gated by the device's attestation key —
see zeroDeviceIdsOf) ride with the same fact. A profile without it
sends neither the pair nor the ids. The 450+ app dropped all of it from its
wire, so the presented profile carries no table; a profile of an older
build declares that build's table itself, while the live options take no
application profile.
The build's
x-ig-is-adaptive-uivalue; absent, the header is not sent. Version-bound: everyi.instagram.comrequest of the 451 builds' wire carries it asfalse, and the 448 and 450 builds carry none. A profile without the member is a pre-451 build.