Contra Public Api API

The Public Api API from Contra — 3 operation(s) for public api.

OpenAPI Specification

contra-public-api-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  description: API for accessing Contra program and expert data. All endpoints require authentication using an API key.
  title: Contra Public Public Api API
  version: 1.0.0
tags:
- name: Public Api
paths:
  /public-api/programs/{programNid}/filters:
    get:
      parameters:
      - schema:
          type: string
        in: path
        name: programNid
        required: true
      responses:
        '200':
          description: A list of filter definitions for the specified program
          content:
            application/json:
              examples:
                availableFilter:
                  summary: Availability of the expert
                  value:
                    data:
                    - description: Whether the expert is available at this time
                      name: available
                      options:
                      - 'true'
                      - 'false'
                      type: boolean
                languagesFilter:
                  summary: Available languages
                  value:
                    data:
                    - description: Filter experts by spoken languages
                      name: languages
                      options:
                      - English
                      - American Sign Language
                      type: string
                locationsFilter:
                  summary: Available locations
                  value:
                    data:
                    - description: Filter experts by geographic location (with place ID)
                      name: locations
                      options:
                      - San Francisco CA, USA (ChIJIQBpAG2ahYAR_6128GcTUEo)
                      - New York NY, USA (ChIJIQBpAG2ahYAR_6128GcTUEo)
                      - Los Angeles CA, USA (ChIJIQBpAG2ahYAR_6128GcTUEo)
                      - Chicago IL, USA (ChIJIQBpAG2ahYAR_6128GcTUEo)
                      - Austin TX, USA (ChIJIQBpAG2ahYAR_6128GcTUEo)
                      - Seattle WA, USA (ChIJIQBpAG2ahYAR_6128GcTUEo)
                      type: string
                maxRateFilter:
                  summary: Maximum hourly rate filter
                  value:
                    data:
                    - description: Filter experts by maximum hourly rate (USD)
                      maximum: 1000
                      minimum: 0
                      name: maxRate
                      type: number
                minRateFilter:
                  summary: Minimum hourly rate filter
                  value:
                    data:
                    - description: Filter experts by minimum hourly rate (USD)
                      maximum: 1000
                      minimum: 0
                      name: minRate
                      type: number
                sortByFilter:
                  summary: Sort order options
                  value:
                    data:
                    - description: Sort order for results
                      name: sortBy
                      options:
                      - relevance
                      - oldest
                      - newest
                      type: string
              schema:
                $ref: '#/components/schemas/FilterListResponse'
      tags:
      - Public Api
  /public-api/programs/{programNid}:
    get:
      parameters:
      - schema:
          type: string
        in: path
        name: programNid
        required: true
      responses:
        '200':
          description: Program details
          content:
            application/json:
              examples:
                programSummaryExample:
                  summary: Framer program summary
                  value:
                    data:
                      applyUrl: https://www.framer.com/dashboard/templates/?profile=expert
                      expertsCount: 42
                      hireUrl: https://contra.com/framer?showCreateJobModal=true
                      id: abc_123
                      logoUrl: https://media.contra.com/image/upload/r_max,w_200,h_200/framer.png
                      subheader: Build your next project with a Framer expert
                      title: Framer Experts
                      totalHires: 100
                      totalHireValue: 123456.78
                      totalReviews: 250
              schema:
                $ref: '#/components/schemas/ProgramSummaryResponse'
      tags:
      - Public Api
  /public-api/programs/{programNid}/experts:
    get:
      parameters:
      - schema:
          type: string
          enum:
          - 'true'
          - 'false'
        examples:
          'true':
            value: 'true'
          'false':
            value: 'false'
        in: query
        name: available
        description: Filter by availability status
      - schema:
          anyOf:
          - type: string
          - type: array
            items:
              type: string
        examples:
          English:
            value: English
          English,French:
            value: English,French
          Mandarin:
            value: Mandarin
        in: query
        name: languages
        description: 'Filter by languages. Can be a single language or multiple languages separated by commas: ?languages=English,French'
      - schema:
          type: string
        examples:
          '10':
            value: '10'
          '20':
            value: '20'
          '50':
            value: '50'
        in: query
        name: limit
        description: Number of results to return per page
      - schema:
          type: string
        examples:
          San Francisco CA, USA (ChIJIQBpAG2ahYAR_6128GcTUEo):
            value: San Francisco CA, USA (ChIJIQBpAG2ahYAR_6128GcTUEo)
          New York NY, USA (ChIJIQBpAG2ahYAR_6128GcTUEo):
            value: New York NY, USA (ChIJIQBpAG2ahYAR_6128GcTUEo)
        in: query
        name: location
        description: Filter by location (with Google Place ID)
      - schema:
          type: string
        examples:
          '100':
            value: '100'
          '150':
            value: '150'
          '200':
            value: '200'
        in: query
        name: maxRate
        description: Maximum hourly rate in USD
      - schema:
          type: string
        examples:
          '50':
            value: '50'
          '75':
            value: '75'
          '100':
            value: '100'
        in: query
        name: minRate
        description: Minimum hourly rate in USD
      - schema:
          type: string
        examples:
          '0':
            value: '0'
          '10':
            value: '10'
          '20':
            value: '20'
        in: query
        name: offset
        description: Number of results to skip (for pagination)
      - schema:
          type: string
          enum:
          - relevance
          - oldest
          - newest
        examples:
          relevance:
            value: relevance
          oldest:
            value: oldest
          newest:
            value: newest
        in: query
        name: sortBy
        description: Sort order for results
      - schema:
          type: string
        in: path
        name: programNid
        required: true
      responses:
        '200':
          description: List of expert profiles
          content:
            application/json:
              examples:
                pagedExpertsExample:
                  summary: First page of experts
                  value:
                    data:
                    - available: true
                      avatarUrl: https://media.contra.com/image/upload/r_max,w_200,h_200/jane-doe.jpg
                      earningsUSD: 75000.5
                      followersCount: 200
                      hourlyRateUSD: 120
                      id: exp_12345
                      inquiryUrl: https://contra.com/inquiry/janedoe
                      location: San Francisco CA, USA (ChIJIQBpAG2ahYAR_6128GcTUEo)
                      name: Jane Doe
                      oneLiner: Full-stack developer specializing in React and Node.js
                      profileUrl: https://contra.com/janedoe
                      projects:
                      - coverUrl: https://media.contra.com/image/upload/r_max,w_200,h_200/ecommerce-cover.jpg
                        projectUrl: https://contra.com/p/YLZWOR7m-ecommerce-platform
                        title: E-commerce Platform
                      - coverUrl: https://media.contra.com/image/upload/r_max,w_200,h_200/marketing-cover.jpg
                        projectUrl: https://contra.com/p/eMOoOeFO/marketing-website
                        title: Marketing Website
                      projectsCompletedCount: 15
                      reviews:
                      - author:
                          authorFullName: John Doe
                          authorProfileUrl: https://contra.com/janedoe
                          companyName: Acme Inc
                          companyProfileUrl: https://contra.com/acme
                        createdAt: '2021-01-01'
                        id: 123
                        rating: 5
                        review: This is a positive review
                        reviewUrl: https://contra.com/janedoe/reviews/?highlightedReviewId=abc123
                      reviewsCount: 30
                      skillTags:
                      - React
                      - Node.js
                      - TypeScript
                      socialLinks:
                      - label: twitter
                        url: https://twitter.com/janedoe
                      - label: linkedin
                        url: https://linkedin.com/in/janedoe
                    totalCount: 200
              schema:
                $ref: '#/components/schemas/ExpertProfileList'
      tags:
      - Public Api
components:
  schemas:
    ProgramSummary:
      type: object
      nullable: true
      properties:
        applyUrl:
          type: string
          format: uri
          description: URL for experts to apply
        expertsCount:
          type: integer
          description: Number of experts in the program
        hireUrl:
          type: string
          format: uri
          description: URL where clients can hire experts
        id:
          type: string
          description: Expert program identifier
        logoUrl:
          type: string
          format: uri
          description: URL to program logo image
        subheader:
          type: string
          description: Short description or tagline
        title:
          type: string
          description: Program title
        totalHires:
          type: integer
          description: Total number of hires
        totalHireValue:
          type: number
          description: Cumulative value of all hires (USD)
        totalReviews:
          type: integer
          description: Total reviews received by program experts
      required:
      - applyUrl
      - expertsCount
      - hireUrl
      - id
      - logoUrl
      - subheader
      - title
      - totalHires
      - totalHireValue
      - totalReviews
    ExpertProfile:
      type: object
      properties:
        available:
          type: boolean
          description: Availability status
        avatarUrl:
          type: string
          format: uri
          description: URL to avatar image
        averageReviewScore:
          type: number
          description: Average review score
        earningsUSD:
          type: number
          description: Total earnings on Contra (USD)
        emailAddress:
          type: string
          nullable: true
          format: email
          description: Normalized email address (if permitted)
        followersCount:
          type: integer
          description: Followers count
        hourlyRateUSD:
          type: number
          nullable: true
          description: Rate per hour in USD
        id:
          type: string
          description: Expert identifier
        inquiryUrl:
          type: string
          format: uri
          description: Inquiry modal URL
        location:
          type: string
          description: Country or region
        name:
          type: string
          description: Full name
        oneLiner:
          type: string
          description: Short bio tagline
        profileUrl:
          type: string
          format: uri
          description: Contra profile URL
        projects:
          type: array
          items:
            type: object
            properties:
              coverUrl:
                type: string
                format: uri
                description: Cover image URL
              projectUrl:
                type: string
                format: uri
                description: Project page URL
              title:
                type: string
                description: Project title
            required:
            - coverUrl
            - projectUrl
            - title
          description: Project samples
        projectsCompletedCount:
          type: integer
          description: Completed projects count
        reviews:
          type: array
          items:
            $ref: '#/components/schemas/Review'
          description: Reviews
        reviewsCount:
          type: integer
          description: Total reviews
        skillTags:
          type: array
          items:
            type: string
          description: Skills or technologies
        socialLinks:
          type: array
          items:
            type: object
            properties:
              label:
                type: string
                nullable: true
                description: Social platform
              url:
                type: string
                format: uri
                description: Social URL
            required:
            - label
            - url
          description: Map of social platform to URL
      required:
      - available
      - avatarUrl
      - averageReviewScore
      - earningsUSD
      - emailAddress
      - followersCount
      - hourlyRateUSD
      - id
      - inquiryUrl
      - location
      - name
      - oneLiner
      - profileUrl
      - projects
      - projectsCompletedCount
      - reviews
      - reviewsCount
      - skillTags
      - socialLinks
    Review:
      type: object
      properties:
        author:
          type: object
          properties:
            authorFullName:
              type: string
              description: Author name
            authorProfileUrl:
              type: string
              format: uri
              description: Author profile URL
            companyName:
              type: string
              nullable: true
              description: Author company name
            companyProfileUrl:
              type: string
              nullable: true
              format: uri
              description: Author company profile URL
          required:
          - authorFullName
          - authorProfileUrl
          - companyName
          - companyProfileUrl
        createdAt:
          type: string
          description: Review creation date
        rating:
          type: number
          description: Review rating
        review:
          type: string
          nullable: true
          description: Review text
        reviewUrl:
          type: string
          format: uri
          description: Review URL
      required:
      - author
      - createdAt
      - rating
      - review
      - reviewUrl
    FilterListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Filter'
      required:
      - data
    ExpertProfileList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/ExpertProfile'
          description: Array of expert profiles
        totalCount:
          type: integer
          description: Total number of expert profiles
      required:
      - data
      - totalCount
    ProgramSummaryResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/ProgramSummary'
      required:
      - data
    Filter:
      type: object
      properties:
        description:
          type: string
          description: Human-readable description of the filter
        maximum:
          type: number
          description: Maximum allowable value (for range filters)
        minimum:
          type: number
          description: Minimum allowable value (for range filters)
        name:
          type: string
          description: Field name to filter by
        options:
          type: array
          items:
            type: string
          description: Allowed values (for enum filters)
        type:
          type: string
          enum:
          - string
          - number
          - boolean
          description: Data type of the filter
      required:
      - description
      - name
      - type
      examples:
      - description: Filter experts by location
        name: location
        options:
        - San Francisco CA, USA (ChIJIQBpAG2ahYAR_6128GcTUEo)
        - New York NY, USA (ChIJIQBpAG2ahYAR_6128GcTUEo)
        type: string
      - description: Filter experts by spoken languages
        name: languages
        options:
        - English
        - Spanish
        - French
        type: string
      - description: Filter experts by availability
        name: available
        options:
        - 'true'
        - 'false'
        type: boolean
      - description: Sort order options
        name: sortBy
        options:
        - relevance
        - oldest
        - newest
        type: string
      - description: Minimum hourly rate in USD
        maximum: 1000
        minimum: 0
        name: minRate
        type: number
      - description: Maximum hourly rate in USD
        maximum: 1000
        minimum: 0
        name: maxRate
        type: number
      - description: Number of results per page
        maximum: 100
        minimum: 1
        name: limit
        type: number
      - description: Number of results to skip
        minimum: 0
        name: offset
        type: number