Upwork Profiles API

Query freelancer and client user profiles, skills, and ratings.

OpenAPI Specification

upwork-profiles-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Upwork GraphQL Authentication Profiles API
  description: The primary Upwork API surface, providing GraphQL queries and mutations for job search, profile access, contract management, and messaging. The API is accessed at a single GraphQL endpoint using POST requests with JSON bodies containing queries and variables. Authentication uses OAuth 2.0 authorization code flow with Bearer tokens. GraphQL subscriptions are supported for real-time webhook event notifications.
  version: 1.0.0
  contact:
    name: Upwork Developer Support
    url: https://support.upwork.com/hc/en-us/sections/17976982721555-Upwork-API
  termsOfService: https://www.upwork.com/legal
  x-generated-from: documentation
servers:
- url: https://api.upwork.com
  description: Upwork Production API
security:
- oauth2AuthCode: []
tags:
- name: Profiles
  description: Query freelancer and client user profiles, skills, and ratings.
paths:
  /graphql:
    post:
      operationId: executeGraphQL
      summary: Upwork Execute GraphQL Query or Mutation
      description: Execute a GraphQL query, mutation, or subscription against the Upwork API. All GraphQL operations are sent as POST requests to this endpoint with a JSON body containing the query, optional variables, and optional operation name. Returns JSON with data and optional errors fields.
      tags:
      - Profiles
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GraphQLRequest'
            examples:
              searchJobs:
                summary: Search for jobs using marketplaceJobPostingsSearch
                value:
                  query: "query SearchJobs($searchExpression: String, $paging: PagingInput) {\n  marketplaceJobPostingsSearch(searchExpression: $searchExpression, paging: $paging) {\n    total\n    results {\n      id\n      title\n      description\n      skills { name }\n      budget { amount currency }\n      createdDateTime\n      client { id country }\n    }\n  }\n}\n"
                  variables:
                    searchExpression: python developer
                    paging:
                      offset: 0
                      count: 10
      responses:
        '200':
          description: GraphQL response with data or errors
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GraphQLResponse'
              examples:
                jobSearchResponse:
                  summary: Job search results
                  x-microcks-default: true
                  value:
                    data:
                      marketplaceJobPostingsSearch:
                        total: 1250
                        results:
                        - id: ~0123456789abcdef
                          title: Python Developer for Data Pipeline
                          description: Looking for an experienced Python developer...
                          skills:
                          - name: Python
                          - name: Data Engineering
                          budget:
                            amount: 5000
                            currency: USD
                          createdDateTime: '2025-03-15T14:30:00Z'
        '401':
          description: Unauthorized - invalid or missing OAuth2 token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
        '429':
          description: Rate limit exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /api/v3/profiles/v2/search/providers:
    get:
      operationId: searchFreelancers
      summary: Upwork Search Freelancers
      description: Search for freelancers on the Upwork marketplace by skills, availability, rating, and other criteria.
      tags:
      - Profiles
      parameters:
      - name: q
        in: query
        description: Search query string
        schema:
          type: string
        example: python machine learning
      - name: paging
        in: query
        description: Pagination as offset;count
        schema:
          type: string
        example: 0;10
      responses:
        '200':
          description: List of freelancer profiles
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FreelancerSearchResponse'
              examples:
                searchFreelancers200Example:
                  summary: Default searchFreelancers 200 response
                  x-microcks-default: true
                  value:
                    total: 350
                    providers:
                    - id: ~abc123
                      name: Jane Smith
                      title: Senior Python Developer
                      rate: 75.0
                      currency: USD
                      rating: 4.95
                      skills:
                      - Python
                      - Machine Learning
                      - Data Science
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /api/v3/profiles/v2/users/{user_id}:
    get:
      operationId: getFreelancerProfile
      summary: Upwork Get Freelancer Profile
      description: Retrieve the public profile for a specific freelancer or user.
      tags:
      - Profiles
      parameters:
      - name: user_id
        in: path
        required: true
        description: The unique identifier or username of the user
        schema:
          type: string
        example: ~abc123
      responses:
        '200':
          description: Freelancer profile
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FreelancerProfile'
              examples:
                getFreelancerProfile200Example:
                  summary: Default getFreelancerProfile 200 response
                  x-microcks-default: true
                  value:
                    id: ~abc123
                    name: Jane Smith
                    title: Senior Python Developer
                    rate: 75.0
                    rating: 4.95
                    jobsCompleted: 48
        '404':
          description: User not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    GraphQLRequest:
      type: object
      description: A GraphQL request body containing the operation to execute
      required:
      - query
      properties:
        query:
          type: string
          description: The GraphQL query or mutation string
          example: 'query { marketplaceJobPostingsSearch(searchExpression: "python") { total } }'
        variables:
          type: object
          description: Variables for the GraphQL operation
          additionalProperties: true
        operationName:
          type: string
          description: Name of the operation to execute (for documents with multiple operations)
          example: SearchJobs
    APIError:
      type: object
      description: API error response
      properties:
        error:
          type: string
          description: Error code
          example: unauthorized
        message:
          type: string
          description: Human-readable error message
          example: Authentication failed. Please check your credentials.
        code:
          type: integer
          description: HTTP status code
          example: 401
    GraphQLError:
      type: object
      description: A GraphQL error
      properties:
        message:
          type: string
          description: Human-readable error message
          example: Unauthorized access
        locations:
          type: array
          description: Source locations of the error
          items:
            type: object
            properties:
              line:
                type: integer
                example: 2
              column:
                type: integer
                example: 5
        path:
          type: array
          description: Path to the field that caused the error
          items:
            type: string
    FreelancerProfile:
      type: object
      description: A freelancer profile on Upwork
      properties:
        id:
          type: string
          description: Unique identifier for the freelancer
          example: ~abc123
        name:
          type: string
          description: Full name of the freelancer
          example: Jane Smith
        title:
          type: string
          description: Professional title or headline
          example: Senior Python Developer
        description:
          type: string
          description: Profile overview/bio
          example: Experienced Python developer with 8 years...
        rate:
          type: number
          description: Hourly rate
          example: 75.0
        currency:
          type: string
          description: Rate currency
          example: USD
        rating:
          type: number
          description: Average client rating (0-5)
          example: 4.95
        jobsCompleted:
          type: integer
          description: Total number of completed jobs
          example: 48
        skills:
          type: array
          description: Skills listed on the profile
          items:
            type: string
          example:
          - Python
          - Machine Learning
          - Data Science
        country:
          type: string
          description: Country of the freelancer
          example: US
        availability:
          type: string
          description: Current availability status
          enum:
          - full-time
          - part-time
          - not-available
          example: full-time
    FreelancerSearchResponse:
      type: object
      description: Paginated freelancer search results
      properties:
        total:
          type: integer
          description: Total number of matching freelancers
          example: 350
        providers:
          type: array
          description: List of freelancer profiles
          items:
            $ref: '#/components/schemas/FreelancerProfile'
    GraphQLResponse:
      type: object
      description: A GraphQL response containing data or errors
      properties:
        data:
          type: object
          description: The response data for the operation
          additionalProperties: true
        errors:
          type: array
          description: List of GraphQL errors if the operation failed
          items:
            $ref: '#/components/schemas/GraphQLError'
  securitySchemes:
    oauth2AuthCode:
      type: oauth2
      description: OAuth 2.0 authorization code flow for Upwork API access. Obtain an authorization code by redirecting users to the Upwork OAuth consent page, then exchange for access and refresh tokens.
      flows:
        authorizationCode:
          authorizationUrl: https://www.upwork.com/ab/account-security/oauth2/authorize
          tokenUrl: https://www.upwork.com/api/v3/oauth2/token
          scopes:
            openid: Access to user identity information
            email: Access to user email
            profile: Access to user profile data
            jobs:read: Read job postings
            contracts:read: Read contract data
            messages:read: Read messages
            messages:write: Send messages
            profiles:read: Read freelancer profiles
            reports:read: Read financial reports
externalDocs:
  description: Upwork GraphQL API Documentation
  url: https://www.upwork.com/developer/documentation/graphql/api/docs/index.html