openapi: 3.0.1 info: title: "Ecosyste.ms: Repos" description: "An open API service providing repository metadata for many open source software ecosystems." contact: name: Ecosyste.ms email: support@ecosyste.ms url: https://ecosyste.ms version: 1.0.0 license: name: CC-BY-SA-4.0 url: https://creativecommons.org/licenses/by-sa/4.0/ externalDocs: description: GitHub Repository url: https://github.com/ecosyste-ms/repos servers: - url: https://repos.ecosyste.ms/api/v1 paths: /topics: get: summary: "Get topics" operationId: "topics" parameters: - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer responses: 200: description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Topic' /topics/{topic}: get: summary: "Get topic" operationId: "topic" parameters: - name: topic in: path description: "The topic to get" required: true schema: type: string - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer - name: created_after in: query description: filter by created_at after given time required: false schema: type: string format: date-time - name: updated_after in: query description: filter by updated_at after given time required: false schema: type: string format: date-time - name: fork in: query description: filter by fork required: false schema: type: boolean - name: archived in: query description: filter by archived required: false schema: type: boolean - name: sort in: query description: field to order results by required: false schema: type: string - name: order in: query description: direction to order results by required: false schema: type: string responses: 200: description: OK content: application/json: schema: $ref: '#/components/schemas/TopicWithRepositories' /repositories/lookup: get: summary: "Lookup repository metadata by url or purl" operationId: "repositoriesLookup" parameters: - name: url in: query description: "The URL of the repository to lookup" required: false schema: type: string - name: purl in: query description: "Package URL (PURL) of the repository to lookup. Supported types: github, gitlab, gitea, bitbucket, forgejo, sourcehut" required: false schema: type: string example: "pkg:github/ecosyste-ms/repos" responses: 200: description: OK content: application/json: schema: $ref: '#/components/schemas/Repository' /usage: get: summary: "Get package usage ecosystems" operationId: "usage" responses: 200: description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Ecosystem' /usage/{ecosystem}: get: summary: "Get package usage for an ecosystem" operationId: "usageEcosystem" parameters: - name: ecosystem in: path description: "The ecosystem to get usage for" required: true schema: type: string - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer responses: 200: description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/PackageUsage' /usage/{ecosystem}/{package}: get: summary: "Get package usage for a package" operationId: "usagePackage" parameters: - name: ecosystem in: path description: "The ecosystem to get usage for" required: true schema: type: string - name: package in: path description: "The package to get usage for" required: true schema: type: string responses: 200: description: OK content: application/json: schema: $ref: '#/components/schemas/PackageUsage' /usage/{ecosystem}/{package}/dependencies: get: summary: "Get dependencies for a package" operationId: "usagePackageDependencies" parameters: - name: ecosystem in: path description: "The ecosystem to get usage for" required: true schema: type: string - name: package in: path description: "The package to get usage for" required: true schema: type: string - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer - name: after in: query description: filter to dependencies with id greater than given value (for keyset pagination) required: false schema: type: integer responses: 200: description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/DependencyWithRepository' /usage/{ecosystem}/{package}/dependent_repositories: get: summary: "Get dependent repositories for a package" operationId: "usagePackageDependentRepositories" parameters: - name: ecosystem in: path description: "The ecosystem to get usage for" required: true schema: type: string - name: package in: path description: "The package to get usage for" required: true schema: type: string - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer - name: sort in: query description: field to order results by required: false schema: type: string - name: order in: query description: direction to order results by required: false schema: type: string - name: after_id in: query description: filter to repositories with id greater than given value (for keyset pagination) required: false schema: type: integer - name: fork in: query description: filter by fork required: false schema: type: boolean - name: archived in: query description: filter by archived required: false schema: type: boolean - name: starred in: query description: filter to only starred repositories required: false schema: type: boolean - name: min_stars in: query description: filter to repositories with at least this many stars required: false schema: type: integer responses: 200: description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Repository' /hosts: get: summary: list hosts operationId: getHosts parameters: - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer responses: 200: description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Host' /hosts/{hostName}: get: summary: get a host by name operationId: getHost parameters: - in: path name: hostName schema: type: string required: true description: name of host - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer responses: 200: description: OK content: application/json: schema: $ref: '#/components/schemas/Host' /hosts/{hostName}/owners: get: summary: get a list of owners from a host operationId: getHostOwners parameters: - in: path name: hostName schema: type: string required: true description: name of host - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer - name: created_after in: query description: filter by created_at after given time required: false schema: type: string format: date-time - name: updated_after in: query description: filter by updated_at after given time required: false schema: type: string format: date-time - name: sort in: query description: field to order results by required: false schema: type: string - name: order in: query description: direction to order results by required: false schema: type: string - name: kind in: query description: filter by owner kind required: false schema: type: string enum: [user, organization] - name: has_sponsors_listing in: query description: filter to owners with a sponsors listing required: false schema: type: boolean responses: 200: description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Owner' /hosts/{HostName}/owners/lookup: get: summary: lookup owner by name or email operationId: lookupHostOwner parameters: - in: path name: HostName schema: type: string required: true description: name of host - name: name in: query description: name of owner required: false schema: type: string - name: email in: query description: email of owner required: false schema: type: string responses: 200: description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Owner' /hosts/{hostName}/owners/{ownerLogin}: get: summary: get a owner by login operationId: getHostOwner parameters: - in: path name: hostName schema: type: string required: true description: name of host - in: path name: ownerLogin schema: type: string required: true description: login of owner responses: 200: description: OK content: application/json: schema: $ref: '#/components/schemas/Owner' /hosts/{hostName}/owners/{ownerLogin}/repositories: get: summary: get a list of repositories from a owner operationId: getHostOwnerRepositories parameters: - in: path name: hostName schema: type: string required: true description: name of host - in: path name: ownerLogin schema: type: string required: true description: login of owner - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer - name: created_after in: query description: filter by created_at after given time required: false schema: type: string format: date-time - name: updated_after in: query description: filter by updated_at after given time required: false schema: type: string format: date-time - name: fork in: query description: filter by fork required: false schema: type: boolean - name: archived in: query description: filter by archived required: false schema: type: boolean - name: sort in: query description: field to order results by required: false schema: type: string - name: order in: query description: direction to order results by required: false schema: type: string responses: 200: description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Repository' /hosts/{hostName}/repositories: get: summary: get a list of repositories from a host operationId: getHostRepositories parameters: - in: path name: hostName schema: type: string required: true description: name of host - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer - name: created_after in: query description: filter by created_at after given time required: false schema: type: string format: date-time - name: updated_after in: query description: filter by updated_at after given time required: false schema: type: string format: date-time - name: fork in: query description: filter by fork required: false schema: type: boolean - name: archived in: query description: filter by archived required: false schema: type: boolean - name: sort in: query description: field to order results by required: false schema: type: string - name: order in: query description: direction to order results by required: false schema: type: string responses: 200: description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Repository' /hosts/{hostName}/repository_names: get: summary: get a list of repository names from a host operationId: getHostRepositoryNames parameters: - in: path name: hostName schema: type: string required: true description: name of host - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer - name: created_after in: query description: filter by created_at after given time required: false schema: type: string format: date-time - name: updated_after in: query description: filter by updated_at after given time required: false schema: type: string format: date-time - name: fork in: query description: filter by fork required: false schema: type: boolean - name: archived in: query description: filter by archived required: false schema: type: boolean - name: sort in: query description: field to order results by required: false schema: type: string - name: order in: query description: direction to order results by required: false schema: type: string responses: 200: description: OK content: application/json: schema: type: array items: type: string /hosts/{hostName}/owners/names: get: summary: get a list of owner names from a host operationId: getHostOwnerNames parameters: - in: path name: hostName schema: type: string required: true description: name of host - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer - name: kind in: query description: filter by owner kind required: false schema: type: string enum: [user, organization] responses: 200: description: OK content: application/json: schema: type: array items: type: string /hosts/{hostName}/owners/sponsors_logins: get: summary: get a list of owner logins with sponsors listings from a host operationId: getHostOwnerSponsorsLogins parameters: - in: path name: hostName schema: type: string required: true description: name of host responses: 200: description: OK content: application/json: schema: type: array items: type: string /hosts/{hostName}/repositories/{repositoryName}: get: summary: get a repository by name operationId: getHostRepository parameters: - in: path name: hostName schema: type: string required: true description: name of host - in: path name: repositoryName schema: type: string required: true description: name of repository responses: 200: description: OK content: application/json: schema: $ref: '#/components/schemas/Repository' /hosts/{hostName}/repositories/{repositoryName}/manifests: get: summary: get a list of manifests for a repository operationId: getHostRepositoryManifests parameters: - in: path name: hostName schema: type: string required: true description: name of host - in: path name: repositoryName schema: type: string required: true description: name of repository - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer responses: 200: description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Manifest' /hosts/{hostName}/repositories/{repositoryName}/tags: get: summary: get a list of tags for a repository operationId: getHostRepositoryTags parameters: - in: path name: hostName schema: type: string required: true description: name of host - in: path name: repositoryName schema: type: string required: true description: name of repository - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer - name: sort in: query description: field to order results by required: false schema: type: string - name: order in: query description: direction to order results by required: false schema: type: string responses: 200: description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Tag' /hosts/{hostName}/repositories/{repositoryName}/tags/{tag}: get: summary: get a tag for a repository operationId: getHostRepositoryTag parameters: - in: path name: hostName schema: type: string required: true description: name of host - in: path name: repositoryName schema: type: string required: true description: name of repository - in: path name: tag schema: type: string required: true description: name of tag responses: 200: description: OK content: application/json: schema: $ref: '#/components/schemas/Tag' /hosts/{hostName}/repositories/{repositoryName}/tags/{tag}/manifests: get: summary: get dependency manifests for a tag operationId: getHostRepositoryTagManifests parameters: - in: path name: hostName schema: type: string required: true description: name of host - in: path name: repositoryName schema: type: string required: true description: name of repository - in: path name: tag schema: type: string required: true description: name of tag responses: 200: description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Manifest' /hosts/{hostName}/repositories/{repositoryName}/releases: get: summary: get a list of releases for a repository operationId: getHostRepositoryReleases parameters: - in: path name: hostName schema: type: string required: true description: name of host - in: path name: repositoryName schema: type: string required: true description: name of repository - name: page in: query description: pagination page number required: false schema: type: integer - name: per_page in: query description: Number of records to return required: false schema: type: integer - name: sort in: query description: field to order results by required: false schema: type: string - name: order in: query description: direction to order results by required: false schema: type: string responses: 200: description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/Tag' /hosts/{hostName}/repositories/{repositoryName}/sbom: get: summary: get a software bill of materials (SBOM) for a repository operationId: getHostRepositorySbom parameters: - in: path name: hostName schema: type: string required: true description: name of host - in: path name: repositoryName schema: type: string required: true description: name of repository responses: 200: description: OK content: application/json: schema: type: object /hosts/{hostName}/repositories/{repositoryName}/releases/{release}: get: summary: get a release for a repository operationId: getHostRepositoryRelease parameters: - in: path name: hostName schema: type: string required: true description: name of host - in: path name: repositoryName schema: type: string required: true description: name of repository - in: path name: release schema: type: string required: true description: tag_name of release responses: 200: description: OK content: application/json: schema: $ref: '#/components/schemas/Release' components: schemas: Host: type: object properties: name: type: string url: type: string kind: type: string repositories_count: type: integer owners_count: type: integer icon_url: type: string host_url: type: string repositoris_url: type: string repository_names_url: type: string owners_url: type: string version: type: string created_at: type: string format: date-time updated_at: type: string format: date-time status: type: string enum: [online, timeout, connection_failed, http_error, ssl_error, error] description: Current status of the host status_checked_at: type: string format: date-time description: Timestamp when status was last checked response_time: type: integer description: Response time in milliseconds (null if host is offline) nullable: true last_error: type: string description: Last error message encountered nullable: true robots_txt_status: type: string enum: [success, not_found, error_404, error_500, error_timeout] description: Status of robots.txt fetch robots_txt_updated_at: type: string format: date-time description: Timestamp when robots.txt was last fetched nullable: true robots_txt_url: type: string description: URL to the host's robots.txt file online: type: boolean description: Whether the host is currently online can_crawl_api: type: boolean description: Whether API crawling is allowed by robots.txt Repository: type: object properties: id: type: integer uuid: type: string full_name: type: string owner: type: string description: type: string archived: type: boolean fork: type: boolean pushed_at: type: string format: date-time size: type: integer stargazers_count: type: integer open_issues_count: type: integer forks_count: type: integer subscribers_count: type: integer default_branch: type: string last_synced_at: type: string format: date-time etag: type: string topics: type: array items: type: string latest_commit_sha: type: string homepage: type: string language: type: string has_issues: type: boolean has_wiki: type: boolean has_pages: type: boolean mirror_url: type: string source_name: type: string license: type: string status: type: string scm: type: string pull_requests_enabled: type: boolean icon_url: type: string metadata: type: object created_at: type: string format: date-time updated_at: type: string format: date-time dependencies_parsed_at: type: string format: date-time dependency_job_id: type: string html_url: type: string previous_names: type: array items: type: string tags_count: type: integer template: type: boolean template_full_name: type: string latest_tag_name: type: string latest_tag_published_at: type: string format: date-time repository_url: type: string tags_url: type: string releases_url: type: string manifests_url: type: string owner_url: type: string download_url: type: string purl: type: string commit_stats: type: object scorecard: type: object nullable: true $ref: '#/components/schemas/Scorecard' host: type: object $ref: '#/components/schemas/Host' Manifest: type: object properties: ecosystem: type: string filepath: type: string sha: type: string kind: type: string created_at: type: string format: date-time updated_at: type: string format: date-time repository_link: type: string dependencies: type: array items: $ref: '#/components/schemas/Dependency' Dependency: type: object properties: id: type: integer package_name: type: string ecosystem: type: string requirements: type: string kind: type: string direct: type: boolean optional: type: boolean DependencyWithRepository: type: object properties: id: type: integer package_name: type: string ecosystem: type: string requirements: type: string kind: type: string direct: type: boolean optional: type: boolean repository: type: object $ref: '#/components/schemas/Repository' manifest: type: object $ref: '#/components/schemas/Manifest' Tag: type: object properties: name: type: string sha: type: string kind: type: string published_at: type: string format: date-time download_url: type: string html_url: type: string dependencies_parsed_at: type: string format: date-time dependency_job_id: type: string purl: type: string tag_url: type: string manifests_url: type: string Ecosystem: type: object properties: name: type: string packages_count: type: integer ecosystem_url: type: string PackageUsage: type: object properties: ecosystem: type: string name: type: string dependents_count: type: integer package_usage_url: type: string dependencies_url: type: string Owner: type: object properties: name: type: string uuid: type: string kind: type: string email: type: string login: type: string company: type: string location: type: string description: type: string twitter: type: string website: type: string metadata: type: object icon_url: type: string created_at: type: string format: date-time updated_at: type: string format: date-time repositories_count: type: integer last_synced_at: type: string format: date-time owner_url: type: string repositories_url: type: string html_url: type: string funding_links: type: array items: type: string total_stars: type: integer followers: type: integer following: type: integer Topic: type: object properties: name: type: string repositories_count: type: integer topic_url: type: string TopicWithRepositories: type: object properties: name: type: string repositories_count: type: integer topic_url: type: string related_topics: type: array items: $ref: '#/components/schemas/Topic' repositories: type: array items: $ref: '#/components/schemas/Repository' Release: type: object properties: name: type: string uuid: type: string tag_name: type: string target_commitish: type: string body: type: string draft: type: boolean prerelease: type: boolean published_at: type: string format: date-time created_at: type: string format: date-time author: type: string assets: type: array items: type: object last_synced_at: type: string format: date-time tag_url: type: string html_url: type: string Scorecard: type: object properties: id: type: integer data: type: object description: Raw scorecard data from the API last_synced_at: type: string format: date-time nullable: true repository_id: type: integer created_at: type: string format: date-time updated_at: type: string format: date-time