Upwork 数据 API:职位、提案、Connects 与合同
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。
应用截图
API 端点一览
签发作用域会话令牌
POST
/v1/auth/scoped-tokenosint把移动端会话换成作用域令牌(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-matchopendata驱动找工作页最佳匹配卡片: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-recentopendata加载找工作页“最新”标签(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}/postingopendata填充职位详情页上的客户公开公司卡:国家、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/walletopenfinance返回自由职业者的提案邀请奖励 / 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/proposalsopendata分页返回提案页(进行中/已提交/已归档):每条申请的 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/invitationsopendata分页返回“邀请面试”行(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-jobsopendata返回已保存职位(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/recommendedosint返回排序后的自由职业者卡片(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/roomsosint返回精简会话室列表(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}/storiesosint打开会话后分页返回该会话室的精简消息列表。
认证方式: 登录后签发的 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-countsosint返回各组织的通知计数(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/offersopenfinance分页返回客户已发出要约:要约 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 天交付
- 验收通过后才付款
- 仅在授权范围内作业