The error#
ChallengeRequired is raised when message is challenge_required. If the challenge URL contains /suspended/, the class is AccountSuspended instead.
When the message is the literal challenge_required, _message_for_payload replaces it. Each replacement starts with one of these sentences:
Manual verification required via Instagram auth platform flow.
Manual verification required via Instagram Bloks redirect checkpoint.
Manual verification required via Instagram native challenge flow.
Instagram returned a legacy challenge flow.
Instagram requires additional verification for this account/session.Each one continues with instructions to use the official app or web flow, then retry with the same client settings, device identifiers, and proxy or IP. The legacy sentence also names challenge_code_handler and change_password_handler.
A 404 whose body is the bytes Not Found is logged as Status 404 (masked challenge) and raised as ChallengeRequired as well.
If code input hits EOF:
Challenge code input is unavailable. Provide a challenge_code_handler or disable automatic resolution with with_challenge_flow=False.CaptchaChallengeRequired is separate. Its default message is Captcha challenge required, but no solver configured or available.
What triggers it#
Private API message == "challenge_required", a masked 404, or a handler that tried to read a code from stdin and got EOFError. feedback_required is FeedbackRequired, not this class.
How to confirm#
The class is ChallengeRequired or the message contains Manual verification required or additional verification. AccountSuspended means the challenge URL was /suspended/.
Fixes#
The messages say to finish the checkpoint in the official app or website, then retry with the same saved settings, device ids and IP. For a legacy email, SMS or password step, set challenge_code_handler or change_password_handler. with_challenge_flow=False turns off the automatic attempt. A Bloks redirect is described as manual. Calling the request again before the checkpoint is done repeats the same payload.
SocialScrape#
Instagram profile is GET /v1/instagram/profile. A private account comes back with is_private true. Posts are GET /v1/instagram/profile/posts, and one post is GET /v1/instagram/post.
Failed requests cost 0 credits. New accounts get 100 credits on signup, no card. Codes are on errors.