        (sequence (comp
                   (map (fn [dsp] {:dsp dsp :response (http/post (:url dsp) (json-request-option req))}))
                   (map destruct)
-                  (map validate)
+                  (map #(validate (:id req) %))
                   (map #(log-validated test %))
                   (filter succeed?)
                   (map (fn [{dsp :dsp res :response}] {:dsp dsp :response res}))

               (not body) {:status :invalid :reason "no body"}
               (not id) {:status :invalid :invalid "no bid id"}
               (not (instance? String id)) {:status :invalid :reason "id not string" :id id}
               (not bidPrice) {:status :invalid :reason "no bid price"}
               (not (instance? Double bidPrice)) {:status :invalid :reason "bidPrice not double" :bidPrice bidPrice}
               (not advertiserId) {:status :invalid :reason "no advertiser id"}

  (let [{:keys [status body]} @res]
    {:dsp dsp :status status :body body}))

(defn validate [request-id {dsp :dsp status :status body :body}]
  ;; TODO: validate id identity
  (try
   (let [body (and body (json/parse-string body true))
