importosimporttimefromtypingimportAnyimporthttpxapi_key=os.environ["OPENPROSPECT_API_KEY"]defrequest_with_backoff(url:str)->dict[str,Any]:forattemptinrange(3):response=httpx.get(url,headers={"Authorization":f"Bearer {api_key}"},timeout=30.0,)ifresponse.status_code<400:returnresponse.json()ifresponse.status_codenotin{429,500,502,503,504}:raiseRuntimeError(response.text)time.sleep(2**attempt)raiseRuntimeError("OpenProspect request failed after retries")print(request_with_backoff("https://api.openprospect.io/api/v1/orders"))
asyncfunctionrequestWithBackoff(url){for(letattempt=0;attempt<3;attempt+=1){constresponse=awaitfetch(url,{headers:{Authorization:`Bearer ${process.env.OPENPROSPECT_API_KEY}`},});if(response.ok){returnresponse.json();}if(![429,500,502,503,504].includes(response.status)){thrownewError(awaitresponse.text());}awaitnewPromise((resolve)=>setTimeout(resolve,1000*2**attempt));}thrownewError("OpenProspect request failed after retries");}console.log(awaitrequestWithBackoff("https://api.openprospect.io/api/v1/orders"));
interfaceApiError{code:string;message:string;details?:Record<string,unknown>;}asyncfunctionrequestWithBackoff<T>(url:string):Promise<T>{for(letattempt=0;attempt<3;attempt+=1){constresponse=awaitfetch(url,{headers:{Authorization:`Bearer ${process.env.OPENPROSPECT_API_KEY}`},});if(response.ok){return(awaitresponse.json())asT;}if(![429,500,502,503,504].includes(response.status)){consterror=(awaitresponse.json())asApiError;thrownewError(`${error.code}: ${error.message}`);}awaitnewPromise((resolve)=>setTimeout(resolve,1000*2**attempt));}thrownewError("OpenProspect request failed after retries");}
usingSystem.Net;usingSystem.Net.Http.Headers;varapiKey=Environment.GetEnvironmentVariable("OPENPROSPECT_API_KEY")??thrownewInvalidOperationException("OPENPROSPECT_API_KEY is not set.");usingvarclient=newHttpClient();client.DefaultRequestHeaders.Authorization=newAuthenticationHeaderValue("Bearer",apiKey);for(varattempt=0;attempt<3;attempt++){varresponse=awaitclient.GetAsync("https://api.openprospect.io/api/v1/orders");if(response.IsSuccessStatusCode){Console.WriteLine(awaitresponse.Content.ReadAsStringAsync());break;}if(response.StatusCodeisnotHttpStatusCode.TooManyRequestsand<HttpStatusCode.InternalServerError){thrownewInvalidOperationException(awaitresponse.Content.ReadAsStringAsync());}awaitTask.Delay(TimeSpan.FromSeconds(Math.Pow(2,attempt)));}