I think your problem is that you have parentheses around the closure arguments but no return type specified, so the compiler can't tell whether it's a single argument closure where the argument is a tuple with two fields, or if it's a two-argument closure (the first argument is Any?, thus the ambiguity).

Try doing this:

authorize("instagram") { object, error in ... }

or

authorize("instagram") { (object, error) -> Void in ... }

Email codedump link for Swift 3 / How to solve: &quot;Ambiguous use of &#39;authorize(_:completion:)&#39;&quot;