Contra Public Api API
The Public Api API from Contra — 3 operation(s) for public api.
The Public Api API from Contra — 3 operation(s) for public api.
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