| Location | IL |
API Software Engineer (W2 Hybrid)
API Software Engineer (W2 Hybrid)
Contract | Performix | United States
Posted On 06/19/2026
Job Information
Industry
Technology
Work Experience
5+ years
City
Chicago
State/Province
Illinois
Zip/Postal Code
60605
Job Description
The API Software Engineer will design, develop, and maintain backend services and APIs that power platform, enabling customer solutions across food, agriculture, and industrial domains. This role ensures scalable, secure, and reliable API integrations that connect internal systems, external partners, and customer‑facing applications.
Key Responsibilities:
API Development & Integration:
o Build, test, and deploy RESTful and GraphQL APIs for backend services.
o Ensure APIs meet performance, scalability, and security standards.
o Integrate data pipelines with customer solutions and external systems.
Platform Engineering:
o Collaborate with product managers, architects, and engineers to translate business needs into technical solutions.
o Maintain and enhance backend infrastructure supporting data ingestion, transformation, and delivery.
o Apply CI/CD pipelines, automation, and containerization (Docker/Kubernetes).
Quality & Reliability:
o Write and maintain unit/integration tests; apply test‑driven development.
o Troubleshoot and debug complex backend/API issues.
o Monitor API performance and implement improvements.
o Partner with cross‑functional teams (data engineering, product, customer solutions).
o Document API specifications, workflows, and system configurations.
o Provide technical support and guidance to internal stakeholders.
Qualifications:
Technical Skills:
o Proficiency in Java, Node.js, or Python for API development.
o Experience with API management platforms (Apigee, Kong, Layer7, etc.).
o Strong knowledge of cloud platforms (AWS, Azure, or GCP).
o Familiarity with data integration, microservices, and event‑driven architecture.
Soft Skills: Strong communication, problem‑solving, and collaboration abilities.
check(event)" mousedown="lyte-button => check(event)" tag-name="lyte-button"> preventInputClick(event)" keyup="lyte-checkbox => preventInputClick(event)" tag-name="lyte-checkbox">
rowMouseDown(event)" ontouchstart="{{action('rowMouseDown',event)}}">
change(event,this)" class="fileuploadInput {{ltPropClass}}" id="{{ltPropId}}" multiple="{{ltPropMultiple}}" name="{{ltPropName}}" oncancel="{{action('cancel',event,this)}}" type="file"/>
click(event)" data-tabindex="{{ltPropDataTabindex}}" keydown="lyte-fileupload => keydown(event)" ondragenter="{{action('drag',event)}}" ondragover="{{action('drag',event)}}" ondrop="{{action('drop',event)}}" onpaste="{{action('paste',event)}}" style="outline: none;position: relative;" tabindex="{{ltPropTabindex}}">
over(event)" onmouseenter="{{action('mouse')}}" tag-name="lyte-text"> keypress(event,this)" keyup="lyte-search => keyup(event,this)" lt-prop="{{ltPropInput}}" lt-prop-appearance="{{ltPropAppearance}}" lt-prop-aria="{{ltPropAria}}" lt-prop-aria-attributes="{{ltPropAriaAttributes}}" lt-prop-auto-update="{{ltPropAutoUpdate}}" lt-prop-autocomplete="{{ltPropAutocomplete}}" lt-prop-autofocus="{{ltPropAutofocus}}" lt-prop-class="{{ltPropClass}}" lt-prop-close-icon="{{ltPropCloseIcon}}" lt-prop-data-tabindex="{{ltPropDataTabindex}}" lt-prop-direction="{{ltPropDirection}}" lt-prop-disabled="{{ltPropDisabled}}" lt-prop-focus="{{lbind(ltPropFocus)}}" lt-prop-height="{{ltPropHeight}}" lt-prop-id="{{ltPropId}}" lt-prop-input-title="{{ltPropInputTitle}}" lt-prop-maxlength="{{ltPropMaxlength}}" lt-prop-name="{{ltPropName}}" lt-prop-pattern="{{ltPropPattern}}" lt-prop-placeholder="{{ltPropPlaceholder}}" lt-prop-readonly="{{ltPropReadonly}}" lt-prop-style="{{ltPropStyle}}" lt-prop-tab-index="{{ltPropTabIndex}}" lt-prop-type="{{ltPropType}}" lt-prop-update-delay="{{ltPropUpdateDelay}}" lt-prop-value="{{lbind(ltPropValue)}}" lt-prop-width="{{ltPropWidth}}" lt-prop-wrapper-style="{{ltPropWrapperStyle}}" on-blur="{{method('blurEvent')}}" on-focus="{{method('focus')}}" on-value-change="{{method('valuechange')}}" oninput="{{action('input',event)}}"> mousemove(event,this)">
{{topMessage}}
Job Details
',5)}}">
{{topMessage}}
showPrevJob()" href="#" id="chatbot-job-list-prev"> previous showNextJob()" href="#" id="chatbot-job-list-next">next
{{message}}
',0)}}">
Step {{curStepInMandatorySecPrompt}}/{{totalNumOfStepsInMandatorySecPrompt}}
submit()" type="button" value="{{if(ifEquals(curStepInMandatorySecPrompt,totalNumOfStepsInMandatorySecPrompt),'Submit','Next')}}"/>
For privacy and security purposes, please go through the following points and provide consent.
sendPrivacyConsentMessage('Yes, I accept')">Accept sendPrivacyConsentMessage('No, I decline')">Decline