InfraNest Custom fields API

The Custom fields API from InfraNest — 3 operation(s) for custom fields.

Operations 6

GET /api/organizations/{organization_id}/custom-fields List custom fields #
POST /api/organizations/{organization_id}/custom-fields Create a custom field #
PATCH /api/organizations/{organization_id}/custom-fields/{customFieldDefinition_id} Update a custom field #
DELETE /api/organizations/{organization_id}/custom-fields/{customFieldDefinition_id} Delete a custom field #
GET /api/organizations/{organization_id}/custom-field-values List custom field values for a record #
PUT /api/organizations/{organization_id}/custom-field-values Set a custom field value #

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/infranest:infranest-custom-fields-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

infranest-custom-fields-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: InfraNest Custom fields API
  description: Domains, DNS, cloud servers, certificates and uptime monitoring in one API, across the registrars, DNS hosts and clouds you already use, such as Cloudflare, Route 53, Hetzner and GoDaddy. Start in a free sandbox with sample data, use scoped tokens, try DNS changes as a dry run first, and retry safely with idempotency keys.
  version: 1.0.0
  x-logo:
    url: https://developers.infranest.io/logo.svg
    altText: InfraNest
  contact:
    name: InfraNest
    url: https://developers.infranest.io
  termsOfService: https://infranest.io/terms
servers:
- url: https://api.infranest.io
security:
- default: []
tags:
- name: Custom Fields
  description: ''
paths:
  /api/organizations/{organization_id}/custom-fields:
    get:
      summary: List custom fields
      operationId: getApiOrganizationsOrganization_idCustomFields
      description: The organization’s custom field definitions in display order. Pass `entity_type` to list only the fields that apply to that kind of record.
      parameters:
      - in: path
        name: organization_id
        required: true
        description: Your organization's ID.
        schema:
          type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              example:
              - id: 1
                organization_id: 1
                entity_types:
                - server
                - domain
                key: cost_centre
                label: Cost centre
                type: select
                options:
                - Platform
                - Marketing
                required: false
                sort: 0
                show_on_detail: true
                show_as_column: true
                created_at: '2026-01-15T12:00:00.000000Z'
                updated_at: '2026-01-15T12:00:00.000000Z'
                deleted_at: null
                purge_after: null
                purge_reminder_sent_at: null
                deleted_by_id: null
                deleted_by_label: null
                deletion_reason: null
              - id: 2
                organization_id: 1
                entity_types:
                - server
                key: owner_team
                label: Owning team
                type: text
                options: null
                required: false
                sort: 1
                show_on_detail: true
                show_as_column: false
                created_at: '2026-01-15T12:00:00.000000Z'
                updated_at: '2026-01-15T12:00:00.000000Z'
                deleted_at: null
                purge_after: null
                purge_reminder_sent_at: null
                deleted_by_id: null
                deleted_by_label: null
                deletion_reason: null
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '429':
          $ref: '#/components/responses/Error429'
      tags:
      - Custom Fields
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              properties:
                entity_type:
                  type: string
                  description: ''
                  example: architecto
      x-infranest-scope: monitoring.read
      x-infranest-token-writable: false
      x-infranest-module: tags
      x-infranest-errors:
      - unauthenticated
      - scope_missing
      - wrong_organization
      - test_token_required
      - test_token_sandbox_only
      - permission_denied
      - not_found
      - rate_limited
    post:
      summary: Create a custom field
      operationId: postApiOrganizationsOrganization_idCustomFields
      description: Defines a custom field with `entity_types`, a unique `key`, a `label` and a `type`; select and multi-select fields also need `options`. Requires a plan that includes custom fields.
      parameters:
      - in: path
        name: organization_id
        required: true
        description: Your organization's ID.
        schema:
          type: integer
      responses:
        '201':
          description: Created
          content:
            application/json:
              example:
                entity_types:
                - server
                key: cost_center
                label: Cost center
                type: text
                options: null
                required: false
                sort: 0
                show_on_detail: true
                show_as_column: false
                organization_id: 1
                updated_at: '2026-01-15T12:00:00.000000Z'
                created_at: '2026-01-15T12:00:00.000000Z'
                id: 4
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '409':
          $ref: '#/components/responses/Error409'
        '422':
          $ref: '#/components/responses/Error422'
        '429':
          $ref: '#/components/responses/Error429'
      tags:
      - Custom Fields
      x-infranest-scope: monitoring.write
      x-infranest-token-writable: true
      x-infranest-module: tags
      requestBody:
        required: true
        content:
          application/json:
            example:
              entity_types:
              - server
              key: cost_center
              label: Cost center
              type: text
      x-infranest-errors:
      - unauthenticated
      - scope_missing
      - wrong_organization
      - test_token_required
      - test_token_sandbox_only
      - permission_denied
      - write_disabled
      - organization_suspended
      - not_found
      - idempotency_in_progress
      - validation_failed
      - idempotency_key_reused
      - rate_limited
  /api/organizations/{organization_id}/custom-fields/{customFieldDefinition_id}:
    patch:
      summary: Update a custom field
      operationId: patchApiOrganizationsOrganization_idCustomFieldsCustomFieldDefinition_id
      description: Replaces the field’s definition; send the full set of fields, as on create. Requires a plan that includes custom fields.
      parameters:
      - in: path
        name: organization_id
        required: true
        description: Your organization's ID.
        schema:
          type: integer
      - in: path
        name: customFieldDefinition_id
        required: true
        description: The customFieldDefinition's ID.
        schema:
          type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              example:
                id: 1
                organization_id: 1
                entity_types:
                - server
                - domain
                key: cost_centre
                label: Responsible team
                type: select
                options:
                - Platform
                - Marketing
                required: false
                sort: 0
                show_on_detail: true
                show_as_column: false
                created_at: '2026-01-15T12:00:00.000000Z'
                updated_at: '2026-01-15T12:00:00.000000Z'
                deleted_at: null
                purge_after: null
                purge_reminder_sent_at: null
                deleted_by_id: null
                deleted_by_label: null
                deletion_reason: null
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '422':
          $ref: '#/components/responses/Error422'
        '429':
          $ref: '#/components/responses/Error429'
      tags:
      - Custom Fields
      x-infranest-scope: monitoring.write
      x-infranest-token-writable: true
      x-infranest-module: tags
      requestBody:
        required: true
        content:
          application/json:
            example:
              entity_types:
              - server
              - domain
              key: cost_centre
              label: Responsible team
              type: select
              options:
              - Platform
              - Marketing
              - Data
              - Internal tools
      x-infranest-errors:
      - unauthenticated
      - scope_missing
      - wrong_organization
      - test_token_required
      - test_token_sandbox_only
      - permission_denied
      - write_disabled
      - organization_suspended
      - not_found
      - validation_failed
      - rate_limited
    delete:
      summary: Delete a custom field
      operationId: deleteApiOrganizationsOrganization_idCustomFieldsCustomFieldDefinition_id
      description: Deletes the field definition together with every value stored for it. Requires a plan that includes custom fields.
      parameters:
      - in: path
        name: organization_id
        required: true
        description: Your organization's ID.
        schema:
          type: integer
      - in: path
        name: customFieldDefinition_id
        required: true
        description: The customFieldDefinition's ID.
        schema:
          type: integer
      responses:
        '204':
          description: No content
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '429':
          $ref: '#/components/responses/Error429'
      tags:
      - Custom Fields
      x-infranest-scope: monitoring.write
      x-infranest-token-writable: true
      x-infranest-module: tags
      x-infranest-errors:
      - unauthenticated
      - scope_missing
      - wrong_organization
      - test_token_required
      - test_token_sandbox_only
      - permission_denied
      - write_disabled
      - organization_suspended
      - not_found
      - rate_limited
  /api/organizations/{organization_id}/custom-field-values:
    get:
      summary: List custom field values for a record
      operationId: getApiOrganizationsOrganization_idCustomFieldValues
      description: The custom field values set on one record. `entity_type` and `entity_id` are required; returns 404 when the record is not in this organization.
      parameters:
      - in: path
        name: organization_id
        required: true
        description: Your organization's ID.
        schema:
          type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              example:
              - id: 1
                custom_field_definition_id: 1
                value: Platform
              - id: 2
                custom_field_definition_id: 2
                value: Web platform
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '429':
          $ref: '#/components/responses/Error429'
      tags:
      - Custom Fields
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                entity_type:
                  type: string
                  description: ''
                  example: architecto
                entity_id:
                  type: integer
                  description: ''
                  example: 16
              required:
              - entity_type
              - entity_id
      x-infranest-scope: monitoring.read
      x-infranest-token-writable: false
      x-infranest-module: tags
      x-infranest-errors:
      - unauthenticated
      - scope_missing
      - wrong_organization
      - test_token_required
      - test_token_sandbox_only
      - permission_denied
      - not_found
      - rate_limited
    put:
      summary: Set a custom field value
      operationId: putApiOrganizationsOrganization_idCustomFieldValues
      description: Sets the `value` of one field (`definition_id`) on one record (`entity_type`, `entity_id`), checked against the field’s type and options. A null value clears it and returns 204. Requires a plan that includes custom fields.
      parameters:
      - in: path
        name: organization_id
        required: true
        description: Your organization's ID.
        schema:
          type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              example:
                id: 1
                custom_field_definition_id: 1
                value: Platform
        '401':
          $ref: '#/components/responses/Error401'
        '403':
          $ref: '#/components/responses/Error403'
        '404':
          $ref: '#/components/responses/Error404'
        '422':
          $ref: '#/components/responses/Error422'
        '429':
          $ref: '#/components/responses/Error429'
      tags:
      - Custom Fields
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                entity_type:
                  type: string
                  description: ''
                  example: architecto
                entity_id:
                  type: integer
                  description: ''
                  example: 16
                definition_id:
                  type: integer
                  description: ''
                  example: 16
                value:
                  type: string
                  description: ''
              required:
              - entity_type
              - entity_id
              - definition_id
            example:
              entity_type: server
              entity_id: 1
              definition_id: 1
              value: Platform
      x-infranest-scope: monitoring.write
      x-infranest-token-writable: true
      x-infranest-module: tags
      x-infranest-errors:
      - unauthenticated
      - scope_missing
      - wrong_organization
      - test_token_required
      - test_token_sandbox_only
      - permission_denied
      - write_disabled
      - organization_suspended
      - not_found
      - validation_failed
      - rate_limited
components:
  responses:
    Error409:
      description: 'A conflict: the same request is still being handled, or the current state does not allow it. The body is an Error; its `code` says which.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error401:
      description: The token is missing, wrong, expired or revoked. The body is an Error; its `code` says which.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error422:
      description: The request was understood but cannot be done as sent. The body is an Error; its `code` says which.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error404:
      description: Nothing exists at this address, or you cannot see it. The body is an Error; its `code` says which.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error429:
      description: 'Too many requests: wait the seconds in Retry-After. The body is an Error; its `code` says which.'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Error403:
      description: The token or your role may not do this here. The body is an Error; its `code` says which.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      required:
      - code
      - message
      - hint
      - retryable
      properties:
        code:
          type: string
          enum:
          - unauthenticated
          - scope_missing
          - session_only
          - not_token_writable
          - write_disabled
          - wrong_organization
          - token_ip_not_allowed
          - test_token_required
          - test_token_sandbox_only
          - api_token_required
          - sandbox_personal
          - sandbox_needs_organization
          - organization_offline
          - permission_denied
          - forbidden
          - organization_suspended
          - read_only_session
          - sso_required
          - two_factor_setup_required
          - password_reset_required
          - email_verification_required
          - plan_limit
          - not_found
          - method_not_allowed
          - conflict
          - validation_failed
          - unprocessable
          - range_too_large
          - rate_limited
          - idempotency_key_reused
          - idempotency_in_progress
          - provider_refused
          - provider_rate_limited
          - provider_unavailable
          - maintenance
          - server_error
          description: 'What kind of error this is. Stable: codes are added, never renamed or removed.'
        message:
          type: string
          description: A sentence for people. May be reworded.
        hint:
          type: string
          description: What to do about it.
        retryable:
          type: boolean
          description: Whether the same request can succeed later unchanged.
        docs_url:
          type: string
          format: uri
        reference:
          type: string
          description: The request ID; also the X-Request-Id header.
        retry_after:
          type: integer
          description: Seconds to wait before retrying.
        required:
          type: string
          description: The missing token scope (scope_missing).
        required_permission:
          type: string
          description: The missing role permission (permission_denied).
        errors:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
  securitySchemes:
    default:
      type: http
      scheme: bearer
      description: Create a token in the app under My account → Developer. Tokens are managed in the app only, never through the API.
externalDocs:
  description: 'InfraNest: domains, DNS, cloud servers, certificates and uptime monitoring in one place'
  url: https://infranest.io