CoderPad Organization API
Information about your organization, its users and its usage. Requires an organization account.
Information about your organization, its users and its usage. Requires an organization account.
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/coderpad:coderpad-organization-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: CoderPad Interview Organization API
version: 1.0.0
description: 'The CoderPad Interview API lets you create and manage interview pads and questions programmatically, for example to integrate CoderPad with your interview scheduling platform or to retrieve the content of an interview once it has ended.
It is a REST API that returns JSON.
# Authentication
Every request is authenticated with your API key, which you can find on your settings page. Send it in the `Authorization` header, either as a bearer token or in the `Token` format:
```
curl -H ''Authorization: Bearer YOUR_API_KEY'' https://app.coderpad.io/api/pads
curl -H ''Authorization: Token token="YOUR_API_KEY"'' https://app.coderpad.io/api/pads
```
# Responses and errors
Every response is a JSON object. Successful responses have an HTTP 2xx status and include `"status": "OK"`. Unsuccessful responses have an appropriate HTTP status and include `"status": "ERROR"` and a human-readable `message`:
```json
{ "status": "ERROR", "message": "Invalid API key" }
```
| HTTP status | Meaning |
| --- | --- |
| 200 | The request succeeded. |
| 400 | The request is invalid, for example because it specifies a language that does not exist. |
| 401 | The API key is not tied to a valid account, or you cannot access this resource. |
| 403 | You do not have permission to perform this action. |
| 404 | The resource does not exist or is not visible to you. |
| 429 | Too many requests, or your pad quota is exhausted. |
# Request bodies
Requests can be sent as JSON or as form data. Write endpoints expect their fields wrapped in an object named after the resource (`{"pad": {"title": "..."}}`, `question[title]=...`), but also accept them at the top level (`{"title": "..."}`, `title=...`).
# Pagination
List endpoints return at most 50 items per request, along with a `total` count. Follow the `next_page` and `prev_page` URLs, when present, to fetch the other pages.
# Languages
Wherever a request or response has a `language` field, its value is a CoderPad language key such as `python3`, `javascript`, `typescript`, `java`, `ruby`, `go`, `csharp`, `cpp` or `postgresql`. Where noted, project template slugs (multi-file environments such as `react` or `multifile_python`) are also accepted.'
contact:
name: CoderPad Support
url: https://coderpad.io/support/
servers:
- url: https://app.coderpad.io/api
security:
- apiKey: []
tags:
- name: Organization
description: Information about your organization, its users and its usage. Requires an organization account.
paths:
/organization:
get:
tags:
- Organization
operationId: getOrganization
summary: Retrieve your organization
description: Returns your organization, its child organizations, teams and users.
responses:
'200':
description: The organization.
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/OrganizationNotFound'
/organization/pads:
get:
tags:
- Organization
operationId: listOrganizationPads
summary: List your organization's pads
description: Lists the pads of every user in your organization. Only available to organization owners, unless your organization enables pad index access for everyone.
parameters:
- $ref: '#/components/parameters/Sort'
- $ref: '#/components/parameters/Page'
responses:
'200':
description: A page of pads.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/PaginatedResponse'
- type: object
required:
- pads
properties:
pads:
type: array
items:
$ref: '#/components/schemas/Pad'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/OrganizationNotFound'
/organization/questions:
get:
tags:
- Organization
operationId: listOrganizationQuestions
summary: List your organization's questions
description: Lists the published questions of your organization that are visible to you.
parameters:
- $ref: '#/components/parameters/Sort'
- $ref: '#/components/parameters/Page'
- name: pad_type
in: query
description: Only return questions usable in this type of pad (questions usable in any pad are always included).
schema:
type: string
enum:
- live
- take_home
- name: language
in: query
description: Only return questions in this language or project template.
schema:
type: string
responses:
'200':
description: A page of questions.
content:
application/json:
schema:
$ref: '#/components/schemas/QuestionList'
'400':
$ref: '#/components/responses/QuestionsDisabled'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/OrganizationNotFound'
/organization/stats:
get:
tags:
- Organization
operationId: getOrganizationStats
summary: Retrieve pad usage stats
description: Returns the number of pads created by each user of your organization over a period of time. Defaults to the last 7 days.
parameters:
- name: start_time
in: query
description: Start of the period. Required when `end_time` is set.
schema:
type: string
format: date-time
example: '2026-09-01T00:00:00Z'
- name: end_time
in: query
description: End of the period. Required when `start_time` is set.
schema:
type: string
format: date-time
example: '2026-09-30T00:00:00Z'
responses:
'200':
description: The usage stats.
content:
application/json:
schema:
$ref: '#/components/schemas/OrganizationStatsResponse'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/OrganizationNotFound'
/organization/users:
get:
tags:
- Organization
operationId: listOrganizationUsers
summary: List your organization's users
parameters:
- name: email
in: query
description: Only return the user with this email address.
schema:
type: string
format: email
responses:
'200':
description: The users.
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/Ok'
- type: object
required:
- users
properties:
users:
type: array
items:
type: object
properties:
email:
type: string
format: email
name:
type:
- string
- 'null'
teams:
type: array
items:
$ref: '#/components/schemas/Team'
'401':
$ref: '#/components/responses/Unauthorized'
'404':
$ref: '#/components/responses/OrganizationNotFound'
components:
responses:
QuestionsDisabled:
description: The question bank is disabled for your organization.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
OrganizationNotFound:
description: Your account does not belong to an organization.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
status: ERROR
message: Organization not Found
BadRequest:
description: The request is malformed.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
status: ERROR
message: 'Bad request: invalid language'
Unauthorized:
description: The API key is invalid, or you cannot access this resource.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
example:
status: ERROR
message: Invalid API key
parameters:
Page:
name: page
in: query
description: One-based page number.
schema:
type: integer
minimum: 1
default: 1
Sort:
name: sort
in: query
description: '`created_at` or `updated_at`, optionally followed by `,asc` or `,desc` (descending by default). For example, `updated_at,asc` sorts from least to most recently updated.
'
schema:
type: string
default: created_at,desc
enum:
- created_at
- created_at,asc
- created_at,desc
- updated_at
- updated_at,asc
- updated_at,desc
schemas:
FileContent:
type: object
required:
- path
properties:
path:
type: string
example: src/App.jsx
contents:
type: string
hidden:
type: boolean
description: Hide the file from the candidate.
PadInterviewerNotification:
type: object
properties:
id:
type: integer
title:
type:
- string
- 'null'
message:
type:
- string
- 'null'
priority:
type:
- string
- 'null'
request_id:
type:
- string
- 'null'
useful:
type:
- boolean
- 'null'
description: The interviewer's feedback on the notification, if any.
auto_dismissed:
type:
- boolean
- 'null'
created_at:
$ref: '#/components/schemas/Timestamp'
updated_at:
$ref: '#/components/schemas/Timestamp'
dismissed_at:
type:
- string
- 'null'
format: date-time
Ok:
type: object
required:
- status
properties:
status:
type: string
enum:
- OK
OrganizationResponse:
allOf:
- $ref: '#/components/schemas/Ok'
- type: object
properties:
id:
type: integer
organization_name:
type: string
child_organizations:
type: array
items:
type: object
properties:
id:
type: integer
organization_name:
type: string
user_count:
type: integer
users:
type: array
items:
type: object
properties:
email:
type: string
format: email
name:
type:
- string
- 'null'
teams:
type: array
description: IDs of the teams the user belongs to.
items:
type: string
format: uuid
organization_default_language:
type:
- string
- 'null'
single_sign_on_supported:
type: boolean
single_sign_in_url:
type: string
description: The organization's single sign-on domain. Only present when single sign-on is enabled.
example: acme.coderpad.io
teams:
type: array
items:
$ref: '#/components/schemas/Team'
QuestionList:
allOf:
- $ref: '#/components/schemas/PaginatedResponse'
- type: object
required:
- questions
properties:
questions:
type: array
items:
$ref: '#/components/schemas/Question'
Question:
type: object
properties:
id:
type: integer
title:
type: string
owner_email:
type:
- string
- 'null'
format: email
language:
type:
- string
- 'null'
description: The question language, or the project template slug for project template questions, as accepted on creation. `null` for questions with variants.
description:
type:
- string
- 'null'
description: Description of the question, only shown to interviewers.
candidate_instructions:
type: array
description: Instructions shown to the candidate.
items:
$ref: '#/components/schemas/CandidateInstruction'
contents:
type:
- string
- 'null'
description: Starter code of single-file questions.
shared:
type: boolean
description: Whether the question is shared with your organization.
used:
type: integer
description: Number of pads the question was used in.
take_home:
type: boolean
test_cases_enabled:
type: boolean
solution:
type:
- string
- 'null'
pad_type:
$ref: '#/components/schemas/QuestionPadType'
is_draft:
type: boolean
ai_assist_custom_system_prompt:
type: string
description: Custom AI Assist system prompt. Only present when set.
author_name:
type:
- string
- 'null'
organization_name:
type:
- string
- 'null'
custom_database:
type: object
description: The custom database attached to the question, if any.
properties:
id:
type: integer
language:
type: string
title:
type: string
description:
type:
- string
- 'null'
schema:
type:
- string
- 'null'
schema_json:
description: The database schema, as JSON.
custom_files:
type: array
items:
type: object
properties:
id:
type: string
format: uuid
title:
type: string
description:
type:
- string
- 'null'
filename:
type: string
filesize:
type: string
description: Human-readable file size.
example: 6.11 KB
question_variants:
type: array
description: Summary of the question's variants. See `GET /questions/{question_id}/variants` for their code.
items:
type: object
properties:
id:
type: integer
language:
type:
- string
- 'null'
project_template_id:
type:
- integer
- 'null'
project_template_slug:
type:
- string
- 'null'
display:
type: string
public_take_home_setting_id:
type:
- integer
- 'null'
description: Only present when `test_cases_enabled` is `true`.
contents_for_test_cases:
type: string
description: Starter code generated from the test cases. Only present when `test_cases_enabled` is `true`.
test_cases:
type: array
description: Only present when `test_cases_enabled` is `true`.
items:
type: object
properties:
id:
type: integer
return_value:
description: The expected return value of the test case.
visible:
type: boolean
arguments:
type: array
items: {}
file_contents:
type: array
description: 'Files of HTML and project template questions. For a project template question, each template file the question removed is listed with `"deleted": true`, and the list is empty when the question opens with the unmodified template files.
'
items:
allOf:
- $ref: '#/components/schemas/FileContent'
- type: object
properties:
deleted:
type: boolean
created_at:
$ref: '#/components/schemas/Timestamp'
updated_at:
$ref: '#/components/schemas/Timestamp'
PaginatedResponse:
allOf:
- $ref: '#/components/schemas/Ok'
- type: object
required:
- total
properties:
next_page:
type: string
format: uri
description: URL of the next page. Absent on the last page.
prev_page:
type: string
format: uri
description: URL of the previous page. Absent on the first page.
total:
type: integer
description: Total number of items across all pages.
Team:
type: object
required:
- id
- name
properties:
id:
type: string
format: uuid
name:
type: string
QuestionPadType:
type: string
description: The type of pads a question can be used in.
enum:
- any
- live
- take_home
Error:
type: object
required:
- status
- message
properties:
status:
type: string
enum:
- ERROR
message:
type: string
description: A human-readable description of the error.
CandidateInstruction:
type: object
required:
- instructions
properties:
instructions:
type: string
description: The instructions, in Markdown.
name:
type: string
description: Name of this step, for multi-step instructions.
default_visible:
type: boolean
description: Whether the candidate sees this step when the pad opens. The first step is always visible.
Pad:
type: object
properties:
id:
type: string
description: The pad ID, as shown in the pad URL.
example: AFQ2K9A3
title:
type: string
example: Backend interview
state:
type: string
description: '`pending`: not started yet. `started`: a participant has joined. `ended`: the interview has ended. `opened_take_home` and `submitted_take_home`: take-home progress. `deleted`: the pad was deleted.
'
enum:
- pending
- started
- ended
- deleted
- opened_take_home
- submitted_take_home
owner_email:
type:
- string
- 'null'
format: email
language:
type:
- string
- 'null'
description: The pad language. `null` for pads with multiple environments; see `pad_environment_ids`.
private:
type: boolean
description: Whether the waiting room is enabled, so that guests must be admitted before joining the pad.
execution_enabled:
type: boolean
restrict_interviewer_access:
type: boolean
description: Whether only the owner and `allowed_interviewer_emails` can access the pad as interviewers.
contents:
type:
- string
- 'null'
description: The code of single-environment pads. `null` for pads with environments; use `GET /pad_environments/{id}`.
participants:
type: array
description: Names of the people who joined the pad.
items:
type: string
events:
type: string
format: uri
description: URL of the pad's events (`GET /pads/{id}/events`).
notes:
type:
- string
- 'null'
description: Private interviewer notes, in Markdown. Only returned to the pad owner.
created_at:
$ref: '#/components/schemas/Timestamp'
updated_at:
$ref: '#/components/schemas/Timestamp'
ended_at:
type:
- string
- 'null'
format: date-time
url:
type: string
format: uri
description: URL of the pad.
playback:
type: string
format: uri
description: URL of the pad playback.
history:
type: string
format: uri
description: URL of the raw edit history of single-environment pads.
drawing:
type:
- string
- 'null'
format: uri
description: Temporary URL (valid 5 minutes) of the drawing made in the pad, if any.
type:
type: string
enum:
- live
- take_home
- drawing
- no_code
question_ids:
type: array
description: IDs of the question bank questions added to the pad.
items:
type: integer
pad_environment_ids:
type: array
items:
type: integer
active_environment_id:
type:
- integer
- 'null'
allowed_interviewer_emails:
type: array
description: Interviewers allowed on the pad when `restrict_interviewer_access` is enabled.
items:
type: string
format: email
team:
type:
- object
- 'null'
allOf:
- $ref: '#/components/schemas/Team'
pad_interviewer_notifications:
type: array
description: Notifications shown to interviewers during the interview.
items:
$ref: '#/components/schemas/PadInterviewerNotification'
Timestamp:
type: string
format: date-time
example: '2026-09-30T14:02:11Z'
OrganizationStatsResponse:
allOf:
- $ref: '#/components/schemas/Ok'
- type: object
properties:
start_time:
$ref: '#/components/schemas/Timestamp'
end_time:
$ref: '#/components/schemas/Timestamp'
pads_created:
type: integer
description: Number of pads created by the organization during the period.
users:
type: array
items:
type: object
properties:
email:
type: string
format: email
name:
type:
- string
- 'null'
pads_created:
type: integer
securitySchemes:
apiKey:
type: http
scheme: bearer
description: 'Your API key, from [your settings page](https://app.coderpad.io/settings). The `Authorization: Token token="YOUR_API_KEY"` format is also accepted.
'
x-provenance:
method: searched
source: https://developers.coderpad.io/reference
harvested: '2026-10-27'
tool: harvest-readme-openapi.py
note: Assembled verbatim from the OpenAPI definition ReadMe embeds in each operation page of the provider's developer portal; paths and components merged by API title, nothing authored.
assembled_from:
- https://developers.coderpad.io/reference/createpad.md
- https://developers.coderpad.io/reference/createquestion-1.md
- https://developers.coderpad.io/reference/createquestionvariant.md
- https://developers.coderpad.io/reference/deletequestion.md
- https://developers.coderpad.io/reference/deletequestionvariant.md
- https://developers.coderpad.io/reference/getorganization.md
- https://developers.coderpad.io/reference/getorganizationstats.md
- https://developers.coderpad.io/reference/getpad.md
- https://developers.coderpad.io/reference/getpadenvironment.md
- https://developers.coderpad.io/reference/getquestion.md
- https://developers.coderpad.io/reference/getquestionvariant.md
- https://developers.coderpad.io/reference/getquota.md
- https://developers.coderpad.io/reference/getuser.md
- https://developers.coderpad.io/reference/listorganizationpads.md
- https://developers.coderpad.io/reference/listorganizationquestions.md
- https://developers.coderpad.io/reference/listorganizationusers.md
- https://developers.coderpad.io/reference/listpadevents.md
- https://developers.coderpad.io/reference/listpads.md
- https://developers.coderpad.io/reference/listquestions.md
- https://developers.coderpad.io/reference/listquestionvariants.md
- https://developers.coderpad.io/reference/updatepad.md
- https://developers.coderpad.io/reference/updatequestion-1.md
- https://developers.coderpad.io/reference/updatequestionvariant.md
merge:
pages: 23
deduped: 211
conflicts_kept_first: 0