# Upwork integrations: job postings and freelancers

> Send a message, create an offer and create a milestone in Upwork, and start a workflow when Upwork sends “Offer created”.

**Canonical page:** https://tray.ai/connectors/upwork-integrations/
**Categories:** Human resources
**Connects through:** HTTP Connector

## Overview

Upwork is a freelance talent marketplace where companies post jobs, review proposals, hire freelancers and agencies, and manage contracts, milestones and payments. Tray.ai connects to Upwork through the HTTP Connector, so your workflows can call the Upwork API alongside the rest of your stack. API access comes through Upwork's partner program or API plan, so you need approved credentials first.

## Use cases

### Job postings

Read and create job postings in Upwork from any Tray.ai workflow. The Upwork API covers calls such as post a job and list organization job postings.

- Post a job
- List organization job postings
- View job details

### Freelancers

Read freelancers in Upwork from any Tray.ai workflow. The Upwork API covers calls such as search freelancers and view a freelancer profile.

- Search freelancers
- View a freelancer profile

### Proposals

Read proposals in Upwork from any Tray.ai workflow. The Upwork API covers calls such as list proposals and view a proposal.

- List proposals
- View a proposal

### Messages

Read and create messages in Upwork from any Tray.ai workflow. The Upwork API covers calls such as list rooms and send a message.

- List rooms
- Send a message
- Read messages

### Offers and contracts

Read, create, update, and manage offers and contracts in Upwork from any Tray.ai workflow. The Upwork API covers calls such as create an offer and list client contracts.

- Create an offer
- List client contracts
- Update contract hourly limit

### Milestones

Create and update milestones in Upwork from any Tray.ai workflow. The Upwork API covers calls such as create a milestone and approve a milestone.

- Create a milestone
- Approve a milestone

## Challenges Tray.ai solves

### Keeping Upwork credentials out of logs

A raw API call usually means pasting a key or token into the request, where it ends up in step inputs, logs, and screenshots.

**How Tray.ai helps:** Store Upwork credentials once as a Tray.ai authentication and reference them from the HTTP Connector. Tray.ai masks authentication values in logs, so the secret never shows up in a step's input or output.

### Going from the Upwork API docs to a working call

Translating an example request from API docs into a workflow step means copying the method, URL, headers, and body by hand.

**How Tray.ai helps:** Paste a cURL example from the Upwork API docs into the HTTP Connector and Tray.ai fills in the method, URL, headers, and body for you.

### Handling files and non-JSON responses

Not every API answers in JSON. Some return XML, files, or binary data, or expect a multipart upload.

**How Tray.ai helps:** The HTTP Connector parses JSON and XML responses, returns files you can pass to the next step, and sends multipart form data for uploads.

## Frequently asked questions

### Does Tray.ai connect to Upwork?

Yes. Tray.ai connects to Upwork through the HTTP Connector, which calls the Upwork API directly. Any call the Upwork API documents can run as a step in a Tray.ai workflow. API access comes through Upwork's partner program or API plan, so you need approved credentials first.

### How does Tray.ai authenticate with Upwork?

The Upwork API uses OAuth 2.0. You save it once as a Tray.ai authentication, and the HTTP Connector adds it to every request.

### Can I get a dedicated Upwork connector?

Upwork runs through the HTTP Connector rather than a dedicated connector. If your team wants one, the Tray.ai connector SDK can build a dedicated Upwork connector from the Upwork API.

## Learn more

- Intelligent Integration: https://tray.ai/platform/intelligent-ipaas/
- Merlin Agent Builder: https://tray.ai/platform/merlin-agent-builder/
- Agent Gateway for MCP: https://tray.ai/platform/agent-gateway/
- Book a demo: https://tray.ai/contact/
