360Learning Custom Fields API

The Custom Fields API from 360Learning — 3 operation(s) for custom fields.

Operations 6

POST /api/v2/custom-fields Create a custom field #
GET /api/v2/custom-fields List all custom fields #
DELETE /api/v2/custom-fields/{customFieldId} Delete a custom field #
PATCH /api/v2/custom-fields/{customFieldId} Edit a custom field #
GET /api/v2/custom-fields/{customFieldId}/authorized-values List all authorized values #
PUT /api/v2/custom-fields/{customFieldId}/authorized-values Replace all authorized values #

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/360learning-custom-fields-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 email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

360learning-custom-fields-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Core Custom Fields API
  description: ''
  version: 1.0.0
  contact: {}
servers:
- url: https://app.360learning.com
  description: Production EU
- url: https://app.us.360learning.com
  description: Production US
tags:
- name: Custom Fields
paths:
  /api/v2/custom-fields:
    post:
      description: '> 🔑

        >

        > Required OAuth scope: `customFields:write`.


        Creates a custom field.'
      operationId: v2.customFields.CreateCustomFieldController_createCustomField
      parameters:
      - name: 360-api-version
        in: header
        description: The version of the API.
        required: true
        schema:
          type: string
          enum:
          - v2.0
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InputCustomFieldDTO'
      responses:
        '201':
          description: Returns the created custom field.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomFieldDTO'
        '400':
          description: The server cannot or will not process the request due to something that is perceived to be a client error.
          content:
            application/json:
              schema:
                oneOf:
                - description: The company has reached the maximum number of custom fields for this collection.
                  title: Custom Field Limit Reached
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - customFieldLimitReached
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
                - description: The name of the custom field should not be empty.
                  title: Invalid Name
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - invalidName
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
                - description: The name of the custom field is already taken.
                  title: Name Already Taken
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - nameAlreadyTaken
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
                - description: This target type is not yet enabled for custom fields.
                  title: Custom Fields Target Type Not Enabled
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - customFieldsTargetTypeNotEnabled
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
        '401':
          description: The given access token is either missing, invalid, has expired, or has been revoked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - invalid_token
                required:
                - error
        '403':
          description: The given access token does not have the required OAuth scope to execute the request.
          content:
            application/json:
              schema:
                title: Invalid Scope
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - invalid_scope
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '429':
          description: 'The client has sent too many requests in a short amount of time. '
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - tooManyRequests
                required:
                - error
      security:
      - oauth2: []
      summary: Create a custom field
      tags:
      - Custom Fields
    get:
      description: '> 🔑

        >

        > Required OAuth scope: `customFields:read`.


        > 📖

        >

        > This endpoint is paginated with a page size of 1,000 custom fields. For more information, see the [Pagination guide](doc:pagination).


        Lists all custom fields in your platform.'
      operationId: v2.customFields.GetCustomFieldsController_getCustomFields
      parameters:
      - name: 360-api-version
        in: header
        description: The version of the API.
        required: true
        schema:
          type: string
          enum:
          - v2.0
      - name: name
        required: false
        in: query
        style: deepObject
        explode: true
        description: 'Filter on **name** property with LHS bracket notation.


          Expected value format is a string.'
        schema:
          properties:
            eq:
              type: string
              description: Filter on values equal to the given one
              example: loremIpsum
            ne:
              type: string
              description: Filter on values not equal to the given one
              example: loremIpsum
            in:
              type: array
              description: Filter on values including the given ones
              items:
                type: string
                example: loremIpsum
            nin:
              type: array
              description: Filter on values excluding the given ones
              items:
                type: string
                example: loremIpsum
      - name: targetType
        required: false
        in: query
        style: deepObject
        explode: true
        description: 'Filter on **targetType** property with LHS bracket notation.


          Expected value format is a string (`users`, `contents`).'
        schema:
          properties:
            eq:
              type: string
              description: Filter on values equal to the given one
              example: users
              enum:
              - users
              - contents
            ne:
              type: string
              description: Filter on values not equal to the given one
              example: users
              enum:
              - users
              - contents
            in:
              type: array
              description: Filter on values including the given ones
              items:
                type: string
                example: users
                enum:
                - users
                - contents
            nin:
              type: array
              description: Filter on values excluding the given ones
              items:
                type: string
                example: users
                enum:
                - users
                - contents
      - name: type
        required: false
        in: query
        style: deepObject
        explode: true
        description: 'Filter on **type** property with LHS bracket notation.


          Expected value format is a string (`string`, `date`).'
        schema:
          properties:
            eq:
              type: string
              description: Filter on values equal to the given one
              example: string
              enum:
              - string
              - date
            ne:
              type: string
              description: Filter on values not equal to the given one
              example: string
              enum:
              - string
              - date
            in:
              type: array
              description: Filter on values including the given ones
              items:
                type: string
                example: string
                enum:
                - string
                - date
            nin:
              type: array
              description: Filter on values excluding the given ones
              items:
                type: string
                example: string
                enum:
                - string
                - date
      responses:
        '200':
          description: Returns one page of 1000 custom fields.
          headers:
            Link:
              schema:
                type: string
              description: 'URL (between `<` `>`) to fetch the immediate next page of results. For more information, see our [Pagination guide](doc:pagination).


                ⚠️ Only included if there is another page of results.'
              example: <my/resource/url>; rel="next"
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CustomFieldDTO'
        '401':
          description: The given access token is either missing, invalid, has expired, or has been revoked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - invalid_token
                required:
                - error
        '403':
          description: The given access token does not have the required OAuth scope to execute the request.
          content:
            application/json:
              schema:
                title: Invalid Scope
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - invalid_scope
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '429':
          description: 'The client has sent too many requests in a short amount of time. '
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - tooManyRequests
                required:
                - error
      security:
      - oauth2: []
      summary: List all custom fields
      tags:
      - Custom Fields
  /api/v2/custom-fields/{customFieldId}:
    delete:
      description: '> 🔑

        >

        > Required OAuth scope: `customFields:write`.


        Deletes a specific custom field given its unique ID.'
      operationId: v2.customFields.DeleteCustomFieldController_deleteCustomField
      parameters:
      - name: 360-api-version
        in: header
        description: The version of the API.
        required: true
        schema:
          type: string
          enum:
          - v2.0
      - name: customFieldId
        required: true
        in: path
        description: The unique ID of the custom field.
        schema:
          format: ObjectId
          pattern: ^[a-fA-F0-9]{24}$
          example: 507f1f77bcf86cd799439011
          type: string
      responses:
        '204':
          description: Deletes a specific custom field.
        '401':
          description: The given access token is either missing, invalid, has expired, or has been revoked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - invalid_token
                required:
                - error
        '403':
          description: The given access token does not have the required OAuth scope to execute the request.
          content:
            application/json:
              schema:
                title: Invalid Scope
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - invalid_scope
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '404':
          description: The given `customFieldId` does not correspond to any existing custom field.
          content:
            application/json:
              schema:
                title: Custom Field Not Found
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - customFieldNotFound
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '429':
          description: 'The client has sent too many requests in a short amount of time. '
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - tooManyRequests
                required:
                - error
      security:
      - oauth2: []
      summary: Delete a custom field
      tags:
      - Custom Fields
    patch:
      description: '> 🔑

        >

        > Required OAuth scope: `customFields:write`.


        Edits specific fields of an existing custom field. Fields not included in the request payload remain unchanged.'
      operationId: v2.customFields.UpdateCustomFieldController_updateCustomField
      parameters:
      - name: 360-api-version
        in: header
        description: The version of the API.
        required: true
        schema:
          type: string
          enum:
          - v2.0
      - name: customFieldId
        required: true
        in: path
        description: The unique ID of the custom field.
        schema:
          format: ObjectId
          pattern: ^[a-fA-F0-9]{24}$
          example: 507f1f77bcf86cd799439011
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCustomFieldBody'
      responses:
        '200':
          description: Returns the updated custom field.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomFieldDTO'
        '400':
          description: The server cannot or will not process the request due to something that is perceived to be a client error.
          content:
            application/json:
              schema:
                oneOf:
                - description: The name of the custom field should not be empty.
                  title: Invalid Name
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - invalidName
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
                - description: The name of the custom field is already taken.
                  title: Name Already Taken
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - nameAlreadyTaken
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
        '401':
          description: The given access token is either missing, invalid, has expired, or has been revoked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - invalid_token
                required:
                - error
        '403':
          description: The given access token does not have the required OAuth scope to execute the request.
          content:
            application/json:
              schema:
                title: Invalid Scope
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - invalid_scope
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '404':
          description: The given `customFieldId` does not correspond to any existing custom field.
          content:
            application/json:
              schema:
                title: Custom Field Not Found
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - customFieldNotFound
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '429':
          description: 'The client has sent too many requests in a short amount of time. '
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - tooManyRequests
                required:
                - error
      security:
      - oauth2: []
      summary: Edit a custom field
      tags:
      - Custom Fields
  /api/v2/custom-fields/{customFieldId}/authorized-values:
    get:
      description: '> 🔑

        >

        > Required OAuth scope: `customFields:read`.


        Lists all authorized values for the given custom field.'
      operationId: v2.customFields.GetAuthorizedValuesController_getAuthorizedValues
      parameters:
      - name: 360-api-version
        in: header
        description: The version of the API.
        required: true
        schema:
          type: string
          enum:
          - v2.0
      - name: customFieldId
        required: true
        in: path
        description: The unique ID of the custom field.
        schema:
          format: ObjectId
          pattern: ^[a-fA-F0-9]{24}$
          example: 507f1f77bcf86cd799439011
          type: string
      responses:
        '200':
          description: Returns all authorized values for the given custom field.
          content:
            application/json:
              schema:
                oneOf:
                - type: array
                  title: date type
                  items:
                    type: string
                    format: date
                    example: '2024-06-30'
                  description: The date format is `YYYY-MM-DD` (ISO 8601 in Coordinated Universal Time (UTC)).
                - type: array
                  title: string type
                  items:
                    type: string
                    example: Marketing
        '401':
          description: The given access token is either missing, invalid, has expired, or has been revoked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - invalid_token
                required:
                - error
        '403':
          description: The given access token does not have the required OAuth scope to execute the request.
          content:
            application/json:
              schema:
                title: Invalid Scope
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - invalid_scope
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '404':
          description: The given `customFieldId` does not correspond to any existing custom field.
          content:
            application/json:
              schema:
                title: Custom Field Not Found
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - customFieldNotFound
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '429':
          description: 'The client has sent too many requests in a short amount of time. '
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - tooManyRequests
                required:
                - error
      security:
      - oauth2: []
      summary: List all authorized values
      tags:
      - Custom Fields
    put:
      description: '> 🔑

        >

        > Required OAuth scope: `customFields:write`.


        Replaces all authorized values in the given custom field with the provided ones. Values not included are removed.'
      operationId: v2.customFields.ReplaceAuthorizedValuesController_replaceAuthorizedValues
      parameters:
      - name: 360-api-version
        in: header
        description: The version of the API.
        required: true
        schema:
          type: string
          enum:
          - v2.0
      - name: customFieldId
        required: true
        in: path
        schema:
          format: ObjectId
          pattern: ^[a-fA-F0-9]{24}$
          example: 507f1f77bcf86cd799439011
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReplaceAuthorizedValuesDTO'
      responses:
        '200':
          description: Returns the updated authorized values.
          content:
            application/json:
              schema:
                oneOf:
                - type: array
                  title: date type
                  items:
                    type: string
                    format: date
                    example: '2024-06-30'
                  description: The date format is `YYYY-MM-DD` (ISO 8601 in Coordinated Universal Time (UTC)).
                - type: array
                  title: string type
                  items:
                    type: string
                    example: Marketing
        '400':
          description: The server cannot or will not process the request due to something that is perceived to be a client error.
          content:
            application/json:
              schema:
                oneOf:
                - description: Some existing custom fields values are not listed in the given authorized values.
                  title: Custom Field Values Conflict
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - customFieldValuesConflict
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
                - description: Some given authorized values do not match with the given custom field's type.
                  title: Authorized Values Type Mismatch
                  type: object
                  properties:
                    error:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                          - authorizedValuesTypeMismatch
                        message:
                          type: string
                          example: A human-readable message to help with debugging.
                      required:
                      - code
                      - message
                  required:
                  - error
        '401':
          description: The given access token is either missing, invalid, has expired, or has been revoked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - invalid_token
                required:
                - error
        '403':
          description: The given access token does not have the required OAuth scope to execute the request.
          content:
            application/json:
              schema:
                title: Invalid Scope
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - invalid_scope
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '404':
          description: The given `customFieldId` does not correspond to any existing custom field.
          content:
            application/json:
              schema:
                title: Custom Field Not Found
                type: object
                properties:
                  error:
                    type: object
                    properties:
                      code:
                        type: string
                        enum:
                        - customFieldNotFound
                      message:
                        type: string
                        example: A human-readable message to help with debugging.
                    required:
                    - code
                    - message
                required:
                - error
        '429':
          description: 'The client has sent too many requests in a short amount of time. '
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    enum:
                    - tooManyRequests
                required:
                - error
      security:
      - oauth2: []
      summary: Replace all authorized values
      tags:
      - Custom Fields
components:
  schemas:
    UpdateCustomFieldBody:
      title: Update Custom Field Body
      type: object
      properties:
        name:
          type: string
          description: The name of the custom field.
          example: Department
      required:
      - name
    ReplaceAuthorizedValuesDTO:
      title: Replace Authorized Values
      type: object
      properties:
        authorizedValues:
          oneOf:
          - type: array
            title: date type
            items:
              type: string
              format: date
              example: '2024-06-30'
            description: Use date values if the given custom field has a date type. The expected format is `YYYY-MM-DD` (ISO 8601 in Coordinated Universal Time (UTC)).
          - type: array
            title: string type
            items:
              type: string
              example: Marketing
            description: Use string values if the given custom field has a string type.
          maxItems: 300
          description: The new authorized values for the given custom fields. A custom field can have at most 300 authorized values.
      required:
      - authorizedValues
    CustomFieldDTO:
      title: Custom Field
      type: object
      properties:
        name:
          type: string
          description: The name of the custom field.
          example: Department
        targetType:
          type: string
          enum:
          - users
          - contents
          d

# --- truncated at 32 KB (33 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/360learning/refs/heads/main/openapi/360learning-custom-fields-api-openapi.yml