Upwork Jobs API

Search and retrieve job postings on the Upwork marketplace.

OpenAPI Specification

upwork-jobs-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Upwork GraphQL Authentication Jobs 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: Jobs
  description: Search and retrieve job postings on the Upwork marketplace.
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:
      - Jobs
      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/jobs/search:
    get:
      operationId: searchJobsREST
      summary: Upwork Search Jobs
      description: Search for job postings on the Upwork marketplace using REST API. Returns paginated list of job listings matching search criteria.
      tags:
      - Jobs
      parameters:
      - name: q
        in: query
        description: Search query string
        schema:
          type: string
        example: python developer
      - name: skills
        in: query
        description: Comma-separated list of required skills
        schema:
          type: string
        example: python,django
      - name: budget
        in: query
        description: Budget range as min-max
        schema:
          type: string
        example: 1000-5000
      - name: paging
        in: query
        description: Pagination as offset;count
        schema:
          type: string
        example: 0;10
      - name: sort
        in: query
        description: Sort order for results
        schema:
          type: string
          enum:
          - recency
          - relevance
          - client_rating
        example: recency
      responses:
        '200':
          description: Paginated list of job postings
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobSearchResponse'
              examples:
                searchJobsREST200Example:
                  summary: Default searchJobsREST 200 response
                  x-microcks-default: true
                  value:
                    total: 1250
                    paging:
                      offset: 0
                      count: 10
                      total: 1250
                    jobs:
                    - id: ~0123456789abcdef
                      title: Python Developer for Data Pipeline
                      status: open
                      budget:
                        amount: 5000
                        currency: USD
                      skills:
                      - Python
                      - Data Engineering
                      createdDateTime: '2025-03-15T14:30:00Z'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /api/v3/jobs/{job_id}:
    get:
      operationId: getJob
      summary: Upwork Get Job Details
      description: Retrieve detailed information for a specific job posting by its ID.
      tags:
      - Jobs
      parameters:
      - name: job_id
        in: path
        required: true
        description: The unique identifier of the job posting
        schema:
          type: string
        example: ~0123456789abcdef
      responses:
        '200':
          description: Job posting details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
              examples:
                getJob200Example:
                  summary: Default getJob 200 response
                  x-microcks-default: true
                  value:
                    id: ~0123456789abcdef
                    title: Python Developer for Data Pipeline
                    description: Looking for an experienced Python developer...
                    status: open
                    budget:
                      amount: 5000
                      currency: USD
        '404':
          description: Job not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/APIError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    Paging:
      type: object
      description: Pagination information
      properties:
        offset:
          type: integer
          description: Current offset
          example: 0
        count:
          type: integer
          description: Number of items returned
          example: 10
        total:
          type: integer
          description: Total number of items available
          example: 1250
    Budget:
      type: object
      description: Budget for a job posting
      properties:
        amount:
          type: number
          description: Budget amount
          example: 5000.0
        currency:
          type: string
          description: Budget currency
          example: USD
    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
    Job:
      type: object
      description: A job posting on the Upwork marketplace
      properties:
        id:
          type: string
          description: Unique identifier for the job
          example: ~0123456789abcdef
        title:
          type: string
          description: Title of the job posting
          example: Python Developer for Data Pipeline
        description:
          type: string
          description: Detailed description of the job requirements
          example: Looking for an experienced Python developer...
        status:
          type: string
          description: Current status of the job posting
          enum:
          - open
          - closed
          - draft
          example: open
        budget:
          $ref: '#/components/schemas/Budget'
        skills:
          type: array
          description: Required skills for the job
          items:
            $ref: '#/components/schemas/Skill'
        createdDateTime:
          type: string
          format: date-time
          description: When the job was posted
          example: '2025-03-15T14:30:00Z'
        client:
          $ref: '#/components/schemas/Client'
        jobType:
          type: string
          description: Type of job (hourly or fixed-price)
          enum:
          - hourly
          - fixed-price
          example: fixed-price
        duration:
          type: string
          description: Expected duration of the project
          example: 1-3 months
        experienceLevel:
          type: string
          description: Required experience level
          enum:
          - entry
          - intermediate
          - expert
          example: intermediate
    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
    JobSearchResponse:
      type: object
      description: Paginated job search results
      properties:
        total:
          type: integer
          description: Total number of matching jobs
          example: 1250
        paging:
          $ref: '#/components/schemas/Paging'
        jobs:
          type: array
          description: List of job postings
          items:
            $ref: '#/components/schemas/Job'
    Client:
      type: object
      description: A client on the Upwork platform
      properties:
        id:
          type: string
          description: Unique identifier for the client
          example: ~def456
        country:
          type: string
          description: Client country code
          example: US
        totalSpent:
          type: number
          description: Total amount spent on Upwork
          example: 50000.0
        rating:
          type: number
          description: Client rating
          example: 4.8
    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'
    Skill:
      type: object
      description: A skill associated with a job or profile
      properties:
        name:
          type: string
          description: Skill name
          example: Python
        uid:
          type: string
          description: Unique identifier for the skill
          example: skill-123
  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