Crowd.dev Project Affiliations API
View and override per-project affiliation data for a member.
View and override per-project affiliation data for a member.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/crowddev-project-affiliations-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: CDP Public Project Affiliations API
version: 1.0.0
license:
name: Apache-2.0
url: https://www.apache.org/licenses/LICENSE-2.0
description: "Public REST API for the Community Data Platform (CDP). Provides transactional endpoints for identity verification, work experience management, project affiliations, and contributor lookup.\n\nTwo authentication methods are supported depending on the endpoint:\n- **OAuth 2.0 Bearer (Auth0)** — used by LFX One for member, organization,\n and affiliation management endpoints.\n\n- **Static API Key** — bearer token with scopes managed in the CDP database.\n"
servers:
- url: https://cm.lfx.dev/api/v1
description: Production
- url: https://lf-staging.crowd.dev/api/v1
description: Staging
security: []
tags:
- name: Project Affiliations
description: View and override per-project affiliation data for a member.
paths:
/members/{memberId}/project-affiliations:
get:
operationId: getMemberProjectAffiliations
summary: List project affiliations
description: 'Retrieve per-project affiliation data for a member, including maintainer roles and resolved affiliations. Affiliations come from project-level overrides when available, otherwise from work experiences.
'
tags:
- Project Affiliations
security:
- OAuth2Bearer:
- read:project-affiliations
parameters:
- $ref: '#/components/parameters/MemberId'
responses:
'200':
description: Project affiliations retrieved successfully.
content:
application/json:
schema:
type: object
required:
- projectAffiliations
properties:
projectAffiliations:
type: array
items:
$ref: '#/components/schemas/ProjectAffiliation'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/MemberNotFound'
/members/{memberId}/project-affiliations/{projectId}:
patch:
operationId: patchMemberProjectAffiliation
summary: Override project affiliations
description: 'Replace all project-level affiliation overrides for a member on a specific project. Pass an empty `affiliations` array to clear overrides (falling back to work experience-based affiliations).
'
tags:
- Project Affiliations
security:
- OAuth2Bearer:
- write:project-affiliations
parameters:
- $ref: '#/components/parameters/MemberId'
- name: projectId
in: path
required: true
description: UUID of the project (segment ID).
schema:
type: string
format: uuid
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- affiliations
properties:
affiliations:
type: array
description: 'Affiliation overrides. Pass an empty array to clear.
'
items:
type: object
required:
- organizationId
- dateStart
properties:
organizationId:
type: string
format: uuid
dateStart:
type: string
format: date-time
description: Start date of the affiliation period.
dateEnd:
type:
- string
- 'null'
format: date-time
description: End date, or null if currently active.
verifiedBy:
type: string
maxLength: 255
description: Required when `affiliations` is non-empty.
example:
affiliations:
- organizationId: 550e8400-e29b-41d4-a716-446655440000
dateStart: '2020-01-01T00:00:00.000Z'
dateEnd: null
verifiedBy: admin@lfx.dev
responses:
'200':
description: Project affiliations updated.
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectAffiliation'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
description: Member or project not found.
content:
application/json:
schema:
$ref: '#/components/schemas/HttpError'
components:
responses:
BadRequest:
description: Invalid request body or query parameters.
content:
application/json:
schema:
$ref: '#/components/schemas/HttpError'
example:
error:
code: BAD_REQUEST
message: Validation failed
MemberNotFound:
description: No member found with the given ID.
content:
application/json:
schema:
$ref: '#/components/schemas/HttpError'
example:
error:
code: NOT_FOUND
message: Member not found
Forbidden:
description: Authentication valid but insufficient scopes.
content:
application/json:
schema:
$ref: '#/components/schemas/HttpError'
example:
error:
code: INSUFFICIENT_SCOPE
message: Insufficient scope for this operation
Unauthorized:
description: Missing or invalid authentication credentials.
content:
application/json:
schema:
$ref: '#/components/schemas/HttpError'
example:
error:
code: UNAUTHORIZED
message: Invalid or missing authentication
schemas:
ProjectRole:
type: object
required:
- id
- role
- startDate
- endDate
- repoUrl
- repoFileUrl
properties:
id:
type: string
format: uuid
role:
type: string
startDate:
type:
- string
- 'null'
format: date-time
endDate:
type:
- string
- 'null'
format: date-time
repoUrl:
type:
- string
- 'null'
repoFileUrl:
type:
- string
- 'null'
ProjectAffiliationEntry:
type: object
required:
- id
- organizationId
- organizationName
- organizationLogo
- verified
- verifiedBy
- startDate
- endDate
- type
properties:
id:
type: string
format: uuid
organizationId:
type: string
format: uuid
organizationName:
type: string
organizationLogo:
type:
- string
- 'null'
verified:
type: boolean
verifiedBy:
type:
- string
- 'null'
startDate:
type:
- string
- 'null'
format: date-time
endDate:
type:
- string
- 'null'
format: date-time
type:
type: string
enum:
- project
- work-history
description: '`project` — manually overridden at the project level. `work-history` — derived from work experiences.
'
source:
type:
- string
- 'null'
description: Present only for `work-history` type affiliations.
HttpError:
type: object
required:
- error
properties:
error:
type: object
required:
- code
- message
properties:
code:
type: string
description: Machine-readable error code.
message:
type: string
description: Human-readable error description.
ProjectAffiliation:
type: object
required:
- id
- projectSlug
- projectName
- projectLogo
- contributionCount
- roles
- affiliations
properties:
id:
type: string
format: uuid
description: Segment (project) ID.
projectSlug:
type: string
projectName:
type: string
projectLogo:
type:
- string
- 'null'
contributionCount:
type: integer
description: Total number of contributions in this project.
roles:
type: array
items:
$ref: '#/components/schemas/ProjectRole'
affiliations:
type: array
items:
$ref: '#/components/schemas/ProjectAffiliationEntry'
parameters:
MemberId:
name: memberId
in: path
required: true
description: UUID of the member.
schema:
type: string
format: uuid
securitySchemes:
OAuth2Bearer:
type: oauth2
description: 'OAuth 2.0 client credentials flow via Auth0. The consuming service obtains a JWT using its client ID and secret, then passes it as `Authorization: Bearer <token>`
'
flows:
clientCredentials:
tokenUrl: https://linuxfoundation.auth0.com/oauth/token
scopes:
read:members: Read member profiles
write:members: Create member profiles
read:member-identities: Read member identities
write:member-identities: Create and verify member identities
read:maintainer-roles: Read maintainer roles
read:work-experiences: Read work experiences
write:work-experiences: Create, update, verify, and delete work experiences
read:project-affiliations: Read project affiliations
write:project-affiliations: Override project affiliations
read:organizations: Look up organizations
write:organizations: Create organizations
StaticApiKey:
type: http
scheme: bearer
description: 'Static API key — pass as `Authorization: Bearer <token>`. Keys are managed in the CDP database with SHA-256 hashing, expiration, and revocation support.
'