igpapi — Instagram private API Simulator for Node.js (API reference) 4.14.0
    Preparing search index...

    Variable ChallengeScrapingWarningScreenConst

    ChallengeScrapingWarningScreen: ScreenDefinition<
        "ChallengeScrapingWarning",
        "screen",
        | {
            step: {
                bloks_action: string;
                challenge_context: string;
                cni: string;
                flow_render_type: 3;
                step_data?: { readonly [key: string]: Json };
                step_name: string;
            };
            surface: "navigation";
        }
        | {
            resolved: {
                appId: string;
                challengeType: string;
                dismissAppId?: string;
                serverParams: {
                    INTERNAL__latency_qpl_instance_id: number;
                    INTERNAL__latency_qpl_marker_id: number;
                };
            };
            surface: "redirect";
        },
        | {
            step: {
                bloks_action: string;
                challenge_context: string;
                cni: string;
                flow_render_type: 3;
                step_data?: { readonly [key: string]: Json };
                step_name: string;
            };
            surface: "navigation";
        }
        | {
            resolved: {
                appId: string;
                challengeType: string;
                dismissAppId?: string;
                serverParams: {
                    INTERNAL__latency_qpl_instance_id: number;
                    INTERNAL__latency_qpl_marker_id: number;
                };
            };
            surface: "redirect";
        },
        | {
            step: {
                bloks_action: string;
                challenge_context: string;
                cni: string;
                flow_render_type: 3;
                step_data?: { readonly [key: string]: Json };
                step_name: string;
            };
            surface: "navigation";
        }
        | {
            resolved: {
                appId: string;
                challengeType: string;
                dismissAppId?: string;
                serverParams: {
                    INTERNAL__latency_qpl_instance_id: number;
                    INTERNAL__latency_qpl_marker_id: number;
                };
            };
            surface: "redirect";
        },
        never,
        MobileNavigation,
        ChallengeScrapingWarningActions,
        Record<never, never>,
        never,
        never,
    > = ...

    "We've detected automated behavior on your account": the scraping warning. It reaches the library by two different roads, and the screen is one: Instagram's navigation challenge names the step scraping_warning, and a redirect challenge resolves to the Bloks app com.bloks.www.ig.challenge.scraping_warning. Its input is a sum of exactly those two variants (navigation with the step decoded by ChallengeNavigationAnswerSchema, redirect with the resolved challenge), so a screen can never hold both variants' fields at once.

    Reached only as an interruption of a request (OpenChallenge(error)); it has no back and is no step of a trail.

    Its one action, acknowledge(), takes the road the screen was reached by:

    • a navigation step sends the step's submission unchanged (which already refetches the challenge) and continues into the step the server answers with;
    • a resolved redirect dismisses through the Bloks dismiss app when the answer carries one — the one request the legacy action sent — and continues into the step that answer is; an answer that names no further step is the challenge's end, because dismissing is the person closing the warning. Without a dismiss app it takes the challenge's navigation action, then fetches and continues.

    The challenge's end closes back to the interrupted screen; the action runs only while this screen is on top, and the interrupted action is never retried.

    Ships with screenshots/scraping-warning.webp, the screen as the old navigation class showed it on a test account.

    Unverified against the app. The Android 451 app's behavior on this step is not known: the navigation answer is the challenge module's own sample, and the redirect resolve happened once and could not be reproduced on demand. Seeing the Android app on the scraping warning, through either road, would settle the screen and the dismissal.

    Guide: Challenges