Upwork 图标

Upwork 数据 API:职位、提案、Connects 与合同

Upwork Global Inc. · 招聘求职

Upwork 的 Android 客户端以 OAuth2 AccessToken 登录,再经 /v1/auth/scoped-token 换发作用域会话。找工作卡片来自 /v1/feeds/best-match 与 /v1/feeds/most-recent(ciphertext、hourlyBudget、skills.prefLabel);打开卡片会用 /v1/jobs/{jobId}/posting 填充客户公开公司统计(paymentVerified、totalCharges)。

会员与 Connects 读取 /v1/connects/wallet(pibStatus.availableConnects)。提案分页 /v1/proposals(applicationUID、chargeRate、connectsBid),面试邀请走 /v1/invitations。收件箱会话室是 /v1/inbox/rooms,提醒铃铛是 /v1/alerts/{userId},合同会话从 /v1/contracts/{contractId} 灌入时薪 charge_rate 与 combinedTotalEarnings。文中路径是对数据的示意性建模,并非公开的开发者 API。

Upwork(包名 com.upwork.android.apps.main,版本 2.14.0)是 Upwork Global 面向自由职业者与客户的 Android 客户端,覆盖找工作卡片、提案与面试邀请、Connects / 提案邀请奖励、合同会话、消息与人才搜索。本页按这些界面整理了一套示意性数据接口。登录得到 OAuth2 AccessToken(accessToken、refreshToken、expiresInSecs、tenantId),再经 /v1/auth/scoped-token 换发作用域会话。找工作卡片来自 /v1/feeds/best-match 与 /v1/feeds/most-recent(ciphertext、hourlyBudget、skills.prefLabel);职位详情客户卡走 /v1/jobs/{jobId}/posting(paymentVerified、totalCharges)。Connects 钱包是 /v1/connects/wallet(pibStatus.availableConnects);提案分页 /v1/proposals(applicationUID、chargeRate、connectsBid),邀请走 /v1/invitations。收件箱、提醒与合同分别在 /v1/inbox/rooms、/v1/alerts/{userId} 与 /v1/contracts/{contractId}。调用携带 Bearer AccessToken、X-Upwork-Authentication 与 X-Upwork-API-TenantId。

应用截图

  • Upwork 应用截图 1
  • Upwork 应用截图 2
  • Upwork 应用截图 3
  • Upwork 应用截图 4
  • Upwork 应用截图 5
  • Upwork 应用截图 6

API 端点一览

  • 签发作用域会话令牌

    POST /v1/auth/scoped-token osint

    把移动端会话换成作用域令牌(accessToken、refreshToken、expiresInSecs、tenantId),供动态、提案与会话室调用使用。

    认证方式: 已登录 AccessToken 加会话 cookie。缺少作用域会话换发时,纯移动端 Bearer 会被拒绝。

    • accessToken
    • refreshToken
    • expiresInSecs
    • tenantId
    • grant_type
    • scope

    依据应用界面重构的示意示例,并非实时抓包。

    POST /v1/auth/scoped-token HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    Content-Type: application/json
    
    {
      "grant_type": "client_credentials",
      "scope": "workspace"
    }
    {
      "accessToken": "eyJhbGciOiJSUzI1NiJ9...",
      "refreshToken": "rt_7c2e91ab",
      "expiresInSecs": 3600,
      "tenantId": "1513535512629587969"
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据登录后、找工作页灌入前的握手重建
    • 令牌字段与后续各屏复用的会话一致
  • 最佳匹配职位推荐动态

    POST /v1/feeds/best-match opendata

    驱动找工作页最佳匹配卡片:uid、ciphertext、title、hourlyBudget 上下限、skills.prefLabel、connectPrice,以及客户的 totalSpent / paymentVerificationStatus。

    认证方式: 登录后签发的 OAuth2 Bearer AccessToken;另附 X-Upwork-Authentication 与 X-Upwork-API-TenantId。数据调用还需要一次作用域会话换发——缺少该作用域时纯移动端 Bearer 会被拒绝。

    • results
    • uid
    • title
    • ciphertext
    • description
    • type
    • recno
    • hourlyBudget
    • min
    • max
    • skills
    • prefLabel
    • connectPrice
    • client
    • totalHires
    • totalSpent
    • paymentVerificationStatus
    • publishedOn
    • paging
    • total
    • count

    依据应用界面重构的示意示例,并非实时抓包。

    POST /v1/feeds/best-match HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    Content-Type: application/json
    
    {
      "limit": 10,
      "offset": 0
    }
    {
      "results": [
        {
          "uid": "1784869486235123712",
          "title": "Staff Product Manager",
          "ciphertext": "~015c7cd346853e24fd",
          "description": "Own the freelancer home feed.",
          "type": "HOURLY",
          "recno": 4123456789,
          "connectPrice": 16,
          "hourlyBudget": {
            "type": "RANGE",
            "min": 60,
            "max": 90
          },
          "skills": [
            {
              "id": "1017484851352698921",
              "prefLabel": "Product Management"
            }
          ],
          "client": {
            "totalHires": 12,
            "totalSpent": 71401.96,
            "paymentVerificationStatus": "VERIFIED"
          },
          "publishedOn": "2026-09-20T12:00:00.000Z"
        }
      ],
      "paging": {
        "total": 248,
        "count": 10
      }
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据找工作页最佳匹配卡片重建
    • 每张卡上的预算区间、技能标签与客户花费/已验证徽章
  • 最新职位推荐动态

    POST /v1/feeds/most-recent opendata

    加载找工作页“最新”标签(id、ciphertext、publishedDateTime、title、type、recno、hourlyBudget),供关闭最佳匹配排序时使用。

    认证方式: 登录后签发的 OAuth2 Bearer AccessToken;另附 X-Upwork-Authentication 与 X-Upwork-API-TenantId。数据调用还需要一次作用域会话换发——缺少该作用域时纯移动端 Bearer 会被拒绝。

    • results
    • id
    • uid
    • ciphertext
    • publishedOn
    • title
    • type
    • recno
    • hourlyBudget
    • attrs
    • skills
    • prefLabel
    • paging

    依据应用界面重构的示意示例,并非实时抓包。

    POST /v1/feeds/most-recent HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    Content-Type: application/json
    
    {
      "limit": 10
    }
    {
      "results": [
        {
          "id": "1784869486235123712",
          "uid": "1784869486235123712",
          "ciphertext": "~015c7cd346853e24fd",
          "publishedOn": "2026-09-21T08:15:00.000Z",
          "title": "Android contractor for wallet SDK",
          "type": "FIXED",
          "recno": 4123456790,
          "hourlyBudget": {
            "type": "RANGE",
            "min": 45,
            "max": 70
          },
          "attrs": [
            {
              "id": "1017484851352698921",
              "prefLabel": "Android"
            }
          ]
        }
      ],
      "paging": {
        "total": 248,
        "count": 10
      }
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据找工作页最新标签重建
    • 按发布时间排序卡片上的发布时间与预算区间
  • 填充市场职位详情

    GET /v1/jobs/{jobId}/posting opendata

    填充职位详情页上的客户公开公司卡:国家、paymentVerified、totalContracts、totalJobsWithHires 与 totalCharges。

    认证方式: 登录后签发的 OAuth2 Bearer AccessToken;另附 X-Upwork-Authentication 与 X-Upwork-API-TenantId。数据调用还需要一次作用域会话换发——缺少该作用域时纯移动端 Bearer 会被拒绝。

    • id
    • clientCompanyPublic
    • country
    • twoLetterAbbreviation
    • timezone
    • memberSinceDateTime
    • paymentVerification
    • paymentVerified
    • workHistoryStats
    • totalContracts
    • totalJobsWithHires
    • totalCharges
    • currency
    • displayValue

    依据应用界面重构的示意示例,并非实时抓包。

    GET /v1/jobs/1802671287393773389/posting HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    {
      "id": "1802671287393773389",
      "clientCompanyPublic": {
        "id": "1009763084",
        "country": {
          "id": "922824128549781504",
          "name": "United States",
          "twoLetterAbbreviation": "US"
        },
        "timezone": "America/Los_Angeles",
        "memberSinceDateTime": "2022-08-18T00:00:00.000Z",
        "paymentVerification": {
          "paymentVerified": true
        },
        "workHistoryStats": {
          "totalContracts": 12,
          "totalJobsWithHires": 9,
          "totalCharges": {
            "currency": "USD",
            "displayValue": "71401.96"
          }
        }
      }
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据职位详情页客户卡片重建
    • 卡片上的付款已验证徽章与花费/雇佣统计
  • 读取 Connects / 邀请奖励余额

    GET /v1/connects/wallet openfinance

    返回自由职业者的提案邀请奖励 / Connects 钱包(pibStatus.availableConnects、currentPrice、maxPrice、consumedConnectFraction),供会员与 Connects 页使用。

    认证方式: 登录后签发的 OAuth2 Bearer AccessToken;另附 X-Upwork-Authentication 与 X-Upwork-API-TenantId。数据调用还需要一次作用域会话换发——缺少该作用域时纯移动端 Bearer 会被拒绝。

    • pibStatus
    • personId
    • active
    • currentPrice
    • maxPrice
    • consumedConnectFraction
    • availableConnects
    • connectsBalance
    • connectsBalanceFree
    • connectsBalancePaid
    • visibilityLevel

    依据应用界面重构的示意示例,并非实时抓包。

    GET /v1/connects/wallet HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    {
      "pibStatus": {
        "personId": "1513535512629587968",
        "active": true,
        "currentPrice": 8,
        "maxPrice": 37,
        "consumedConnectFraction": 0.01,
        "availableConnects": 163
      },
      "user": {
        "freelancerProfile": {
          "userPreferences": {
            "visibilityLevel": 1
          }
        }
      }
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据会员与 Connects 页钱包磁贴重建
    • 磁贴上的 availableConnects 与每次出价 currentPrice
  • 按类型列出提案

    POST /v1/proposals opendata

    分页返回提案页(进行中/已提交/已归档):每条申请的 applicationUID、openingUID、chargeRate、connectsBid、coverLetter 与 occupationTitle。

    认证方式: 登录后签发的 OAuth2 Bearer AccessToken;另附 X-Upwork-Authentication 与 X-Upwork-API-TenantId。数据调用还需要一次作用域会话换发——缺少该作用域时纯移动端 Bearer 会被拒绝。

    • paging
    • total
    • offset
    • applications
    • applicationUID
    • vendorUID
    • openingUID
    • title
    • status
    • coverLetter
    • terms
    • chargeRate
    • amount
    • currency
    • connectsBid
    • duration
    • occupationTitle

    依据应用界面重构的示意示例,并非实时抓包。

    POST /v1/proposals HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    Content-Type: application/json
    
    {
      "type": "ACTIVE",
      "limit": 10
    }
    {
      "paging": {
        "total": 42,
        "offset": "eyJBY3RpdmUiOiIxMCJ9",
        "count": 10
      },
      "applications": [
        {
          "applicationUID": "1784936978461474817",
          "vendorUID": "1513535512629587968",
          "openingUID": "1784869486235123712",
          "title": "Lead Paradigm Representative",
          "status": 7,
          "coverLetter": "I can start this week.",
          "terms": {
            "chargeRate": {
              "amount": "85",
              "currency": "USD"
            },
            "connectsBid": 17,
            "duration": 0
          },
          "occupationTitle": "Product Management"
        }
      ]
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据提案页进行中 / 已提交 / 已归档切换重建
    • 每行的报价、消耗 Connects 与求职信预览
  • 列出面试邀请

    POST /v1/invitations opendata

    分页返回“邀请面试”行(uid、jobPostingUid、status、invitationLetter、contractorUid、clientUid),供邀请页使用。

    认证方式: 登录后签发的 OAuth2 Bearer AccessToken;另附 X-Upwork-Authentication 与 X-Upwork-API-TenantId。数据调用还需要一次作用域会话换发——缺少该作用域时纯移动端 Bearer 会被拒绝。

    • totalCount
    • count
    • invitations
    • uid
    • jobPostingUid
    • title
    • status
    • statusId
    • invitationLetter
    • contractorUid
    • clientUid
    • ctime

    依据应用界面重构的示意示例,并非实时抓包。

    POST /v1/invitations HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    Content-Type: application/json
    
    {
      "status": "PENDING",
      "pagination": {
        "offset": 0,
        "count": 10
      }
    }
    {
      "totalCount": 826,
      "count": 10,
      "invitations": [
        {
          "uid": "1784872122316197888",
          "jobPostingUid": "1784872118568779776",
          "title": "Legacy Division Technician",
          "status": "Pending",
          "statusId": 0,
          "invitationLetter": "We would like to interview you this week.",
          "contractorUid": "1441159363691524096",
          "clientUid": "1783553054015062016",
          "ctime": "2026-04-29T09:07:29.000Z"
        }
      ]
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据邀请页列表行重建
    • 每行的邀请信预览与待处理状态标签
  • 列出已保存职位

    GET /v1/saved-jobs opendata

    返回已保存职位(followed、jobRid)以及职位标题、hourlyBudgetMin/Max 与客户的 paymentVerified / totalCharges 卡片。

    认证方式: 登录后签发的 OAuth2 Bearer AccessToken;另附 X-Upwork-Authentication 与 X-Upwork-API-TenantId。数据调用还需要一次作用域会话换发——缺少该作用域时纯移动端 Bearer 会被拒绝。

    • personSavedJobs
    • followed
    • jobRid
    • job
    • id
    • content
    • title
    • description
    • contractTerms
    • hourlyContractTerms
    • hourlyBudgetType
    • hourlyBudgetMin
    • hourlyBudgetMax
    • clientCompanyPublic
    • paymentVerified
    • workHistoryStats
    • totalCharges
    • rawValue

    依据应用界面重构的示意示例,并非实时抓包。

    GET /v1/saved-jobs?limit=20&offset=0&followed=true HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    {
      "personSavedJobs": [
        {
          "followed": true,
          "jobRid": "4123456789",
          "job": {
            "id": "1784869486235123712",
            "content": {
              "title": "Staff Product Manager",
              "description": "Own the freelancer home feed."
            },
            "contractTerms": {
              "hourlyContractTerms": {
                "hourlyBudgetType": "RANGE",
                "hourlyBudgetMin": 60,
                "hourlyBudgetMax": 90
              }
            },
            "clientCompanyPublic": {
              "paymentVerification": {
                "paymentVerified": true
              },
              "workHistoryStats": {
                "totalCharges": {
                  "rawValue": 71401.96,
                  "currency": "USD",
                  "displayValue": "71401.96"
                },
                "totalContracts": 12
              }
            }
          }
        }
      ]
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据已保存职位列表重建
    • 每行的关注开关、预算区间与已验证客户徽章
  • 推荐自由职业者(人才搜索)

    GET /v1/talent/recommended osint

    返回排序后的自由职业者卡片(id、ciphertext、hourlyRateAmount、occupationTitle、portraitUrl),供客户人才搜索 / 推荐人才条使用。

    认证方式: 登录后签发的 OAuth2 Bearer AccessToken;另附 X-Upwork-Authentication 与 X-Upwork-API-TenantId。数据调用还需要一次作用域会话换发——缺少该作用域时纯移动端 Bearer 会被拒绝。

    • freelancers
    • id
    • name
    • photoUrl
    • profileUrl
    • ciphertext
    • hourlyRateAmount
    • occupationTitle
    • portraitUrl

    依据应用界面重构的示意示例,并非实时抓包。

    GET /v1/talent/recommended?openingId=1784869486235123712&limit=10 HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    {
      "freelancers": [
        {
          "id": "1939570823820670781",
          "name": "Ruthie L.",
          "photoUrl": "https://cdn.example.com/portraits/c1example",
          "profileUrl": "/freelancers/~01a4efc20a2cd41f48",
          "ciphertext": "~01a4efc20a2cd41f48",
          "hourlyRateAmount": 75,
          "occupationTitle": "Product Manager",
          "portraitUrl": "https://cdn.example.com/portraits/c1example"
        }
      ]
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据职位页推荐人才条重建
    • 每张卡上的时薪、职业头衔与头像
  • 列出消息会话室(精简)

    GET /v1/inbox/rooms osint

    返回精简会话室列表(id、unreadStoriesCount、unreadMessageCount),在拉取完整会话前填充消息页。

    认证方式: 登录后签发的 OAuth2 Bearer AccessToken;另附 X-Upwork-Authentication 与 X-Upwork-API-TenantId。数据调用还需要一次作用域会话换发——缺少该作用域时纯移动端 Bearer 会被拒绝。

    • rooms
    • id
    • roomId
    • title
    • unreadStoriesCount
    • unreadMessageCount
    • unreadStories
    • userId

    依据应用界面重构的示意示例,并非实时抓包。

    GET /v1/inbox/rooms?userId=1513535512629587968 HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    {
      "rooms": [
        {
          "id": "room_5a82d4931d5f5aea3817fd0a14fcbbba",
          "roomId": "room_5a82d4931d5f5aea3817fd0a14fcbbba",
          "title": "Staff Product Manager",
          "unreadStoriesCount": 2,
          "unreadMessageCount": 2,
          "unreadStories": true,
          "userId": "1513535512629587968"
        }
      ]
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据消息页会话列表重建
    • 每行会话的未读角标
  • 列出会话室消息(精简)

    GET /v1/inbox/rooms/{roomId}/stories osint

    打开会话后分页返回该会话室的精简消息列表。

    认证方式: 登录后签发的 OAuth2 Bearer AccessToken;另附 X-Upwork-Authentication 与 X-Upwork-API-TenantId。数据调用还需要一次作用域会话换发——缺少该作用域时纯移动端 Bearer 会被拒绝。

    • stories
    • storyId
    • roomId
    • unreadStoriesCount

    依据应用界面重构的示意示例,并非实时抓包。

    GET /v1/inbox/rooms/room_5a82d4931d5f5aea3817fd0a14fcbbba/stories HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    {
      "stories": [
        {
          "storyId": "story_9f3a1c",
          "roomId": "room_5a82d4931d5f5aea3817fd0a14fcbbba",
          "unreadStoriesCount": 1
        }
      ]
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据点击会话后进入的消息线程重建
  • 列出用户通知

    GET /v1/alerts/{userId} osint

    分页返回提醒铃铛:职位动态、邀请与会话事件的 notificationId、未读标志与 title。

    认证方式: 登录后签发的 OAuth2 Bearer AccessToken;另附 X-Upwork-Authentication 与 X-Upwork-API-TenantId。数据调用还需要一次作用域会话换发——缺少该作用域时纯移动端 Bearer 会被拒绝。

    • notifications
    • notificationId
    • unread
    • notification_unread
    • title
    • userId

    依据应用界面重构的示意示例,并非实时抓包。

    GET /v1/alerts/1513535512629587968 HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    {
      "notifications": [
        {
          "notificationId": "n_9f3a1c",
          "unread": true,
          "notification_unread": true,
          "title": "Invitation to interview",
          "userId": "1513535512629587968"
        }
      ]
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据提醒铃铛下拉列表重建
    • 每条提醒的未读标志与标题
  • 读取组织通知计数

    GET /v1/alerts/org-counts osint

    返回各组织的通知计数(organizations[].counters),驱动提醒与消息角标。

    认证方式: 登录后签发的 OAuth2 Bearer AccessToken;另附 X-Upwork-Authentication 与 X-Upwork-API-TenantId。数据调用还需要一次作用域会话换发——缺少该作用域时纯移动端 Bearer 会被拒绝。

    • organizations
    • id
    • orgUid
    • counters
    • count

    依据应用界面重构的示意示例,并非实时抓包。

    GET /v1/alerts/org-counts HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    {
      "organizations": [
        {
          "id": "1513535512629587969",
          "orgUid": "1513535512629587969",
          "counters": [
            {
              "id": "messages",
              "count": 2
            }
          ]
        }
      ]
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据组织切换器上提醒与消息角标重建
  • 读取合同详情

    GET /v1/contracts/{contractId} openfinance

    加载合同会话:uid、referenceContractRid、时薪 charge_rate 与 weekly_limit,以及报表 / 收入历史使用的 combinedTotalEarnings。

    认证方式: 登录后签发的 OAuth2 Bearer AccessToken;另附 X-Upwork-Authentication 与 X-Upwork-API-TenantId。数据调用还需要一次作用域会话换发——缺少该作用域时纯移动端 Bearer 会被拒绝。

    • uid
    • referenceContractRid
    • state
    • clientOrgUid
    • clientTeamUid
    • freelancerUid
    • offerDetails
    • title
    • hourly
    • charge_rate
    • weekly_limit
    • start_date
    • fixedPrice
    • combinedTotalEarnings
    • currency
    • displayValue

    依据应用界面重构的示意示例,并非实时抓包。

    GET /v1/contracts/1669484061874712576 HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    {
      "uid": "1669484061874712576",
      "referenceContractRid": "20799532",
      "state": 1,
      "clientOrgUid": "1638232740248182785",
      "clientTeamUid": "1638232740248182785",
      "freelancerUid": "1663144681572958208",
      "offerDetails": {
        "title": "Staff Product Manager",
        "description": "Hourly product contract",
        "hourly": {
          "charge_rate": "85",
          "weekly_limit": "40",
          "start_date": "2026-09-17T00:00:00.000Z"
        },
        "fixedPrice": null
      },
      "combinedTotalEarnings": {
        "currency": "USD",
        "displayValue": "12840.00"
      }
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据合同会话标题栏与收入条重建
    • 该屏上的时薪、每周上限与累计收入
  • 列出客户合同要约

    POST /v1/hires/offers openfinance

    分页返回客户已发出要约:要约 id、title、state、type、contract.rid 与 freelancer.location.countryName,供雇佣 / 要约页使用。

    认证方式: 登录后签发的 OAuth2 Bearer AccessToken;另附 X-Upwork-Authentication 与 X-Upwork-API-TenantId。数据调用还需要一次作用域会话换发——缺少该作用域时纯移动端 Bearer 会被拒绝。

    • totalCount
    • edges
    • node
    • id
    • startDateTime
    • endDateTime
    • title
    • state
    • type
    • contract
    • rid
    • agency
    • name
    • freelancer
    • location
    • countryName

    依据应用界面重构的示意示例,并非实时抓包。

    POST /v1/hires/offers HTTP/1.1
    Authorization: Bearer <accessToken>
    X-Upwork-Authentication: <accessToken>
    X-Upwork-API-TenantId: <tenantId>
    Content-Type: application/json
    
    {
      "pagination": {
        "offset": 0,
        "count": 10
      }
    }
    {
      "totalCount": 3,
      "edges": [
        {
          "node": {
            "id": "101694088",
            "startDateTime": "2026-09-17T00:00:00.000Z",
            "endDateTime": null,
            "title": "Staff Product Manager",
            "state": "ACCEPTED",
            "type": "HOURLY",
            "contract": {
              "rid": "20799532"
            },
            "agency": {
              "name": "Northwind Studio"
            },
            "freelancer": {
              "location": {
                "countryName": "United States"
              }
            }
          }
        }
      ]
    }

    依据应用界面推导;端点细节为示意说明,并非实际抓包。

    • 依据客户雇佣 / 要约列表重建
    • 每行的要约状态、类型与合同编号

数据类别

  • job postings
  • proposals
  • interview invitations
  • Connects balance
  • contracts
  • client company stats
  • message rooms
  • notifications
  • freelancer profiles

数据使用场景与案例

  • 从职位与提案字段构建自由职业人才 CRM

    招聘 CRM 可轮询 POST /v1/proposals 与 POST /v1/invitations,获取 applicationUID、openingUID、chargeRate、connectsBid 与邀请状态,再关联 GET /v1/jobs/{jobId}/posting(paymentVerified、totalCharges、country),让招聘方看出哪些客户真正有花费。

  • Connects 钱包与出价成本跟踪

    自由职业者财务机器人可读取 GET /v1/connects/wallet 的 pibStatus(availableConnects、currentPrice、maxPrice、consumedConnectFraction)以及每份已提交提案的 connectsBid,在会员与 Connects 页续费前预估每周 Connects 消耗。

  • 合同费率与收入对账

    机构账本可拉取 GET /v1/contracts/{contractId} 的时薪 charge_rate、weekly_limit 与 combinedTotalEarnings,以 uid / referenceContractRid 为键,再与客户雇佣页 POST /v1/hires/offers 交叉核对。

  • 客户侧推荐人才短名单

    招聘台可调用 GET /v1/talent/recommended 获取 ciphertext、hourlyRateAmount、occupationTitle 与 portraitUrl,若已有会话则在 GET /v1/inbox/rooms 打开对应精简会话室。

常见问题

Upwork Android 应用如何鉴权数据调用?

登录得到 OAuth2 AccessToken(accessToken、refreshToken、expiresInSecs、tenantId)。后续请求发送 Authorization: Bearer,以及 X-Upwork-Authentication 与 X-Upwork-API-TenantId。动态、提案与会话室还需要 POST /v1/auth/scoped-token 换发的作用域令牌——缺少该作用域时纯移动端 Bearer 会被拒绝。

找工作卡片由哪些数据驱动?

POST /v1/feeds/best-match 与 POST /v1/feeds/most-recent 返回 uid、ciphertext、title、hourlyBudget 与 skills.prefLabel。打开卡片会用 GET /v1/jobs/{jobId}/posting 填充客户公开公司卡上的 paymentVerified 与 workHistoryStats.totalCharges。

Connects / 邀请奖励余额在哪里?

会员与 Connects 页读取 GET /v1/connects/wallet:pibStatus.availableConnects、currentPrice、maxPrice 与 consumedConnectFraction。已提交提案还带 terms.connectsBid。

除了职位,能否读取合同与消息会话室?

可以。GET /v1/contracts/{contractId} 返回 uid、时薪 charge_rate、weekly_limit 与 combinedTotalEarnings。GET /v1/inbox/rooms 列出含 unreadStoriesCount 的会话室,GET /v1/alerts/{userId} 分页提醒铃铛。

相关主题

  • Upwork 数据 api
  • Upwork 职位动态
  • Upwork 最佳匹配
  • Upwork Connects 钱包
  • Upwork 提案列表
  • Upwork 面试邀请
  • Upwork 合同收入
  • Upwork 收件箱
  • Upwork 人才搜索
  • Upwork AccessToken

需要集成这个 App 的数据 API?

我们可为任意指定 App 交付定制集成——源码交付 USD 500 起,或托管 API 按调用计费。告诉我们您需要的数据即可。

  • 每个项目均签 NDA 与 SOW
  • 3–7 天交付
  • 验收通过后才付款
  • 仅在授权范围内作业

获取报价