CoderPad Organization API

Information about your organization, its users and its usage. Requires an organization account.

Operations 5

GET /organization Retrieve your organization #
GET /organization/pads List your organization's pads #
GET /organization/questions List your organization's questions #
GET /organization/stats Retrieve pad usage stats #
GET /organization/users List your organization's users #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • 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.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/coderpad:coderpad-organization-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

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 Specification

coderpad-organization-api-openapi.yml Raw ↑
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