Eshway Custom Fields API
The Custom Fields API from Eshway — 6 operation(s) for custom fields.
The Custom Fields API from Eshway — 6 operation(s) for custom fields.
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/eshway-com:eshway-com-custom-fields-api"
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.
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: Fast Custom Fields API
version: 0.1.0
tags:
- name: Custom Fields
paths:
/v1/projects/{project_id}/custom-fields:
get:
tags:
- Custom Fields
summary: List Custom Fields
operationId: list_custom_fields_v1_projects__project_id__custom_fields_get
security:
- OAuth2PasswordBearer: []
parameters:
- name: project_id
in: path
required: true
schema:
type: integer
title: Project Id
- name: include_archived
in: query
required: false
schema:
type: boolean
default: false
title: Include Archived
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/CustomFieldDefinitionResponse'
title: Response List Custom Fields V1 Projects Project Id Custom Fields Get
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
post:
tags:
- Custom Fields
summary: Create Custom Field
operationId: create_custom_field_v1_projects__project_id__custom_fields_post
security:
- OAuth2PasswordBearer: []
parameters:
- name: project_id
in: path
required: true
schema:
type: integer
title: Project Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CustomFieldDefinitionCreate'
responses:
'201':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/CustomFieldDefinitionResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/projects/{project_id}/custom-fields/{definition_id}:
get:
tags:
- Custom Fields
summary: Get Custom Field
operationId: get_custom_field_v1_projects__project_id__custom_fields__definition_id__get
security:
- OAuth2PasswordBearer: []
parameters:
- name: project_id
in: path
required: true
schema:
type: integer
title: Project Id
- name: definition_id
in: path
required: true
schema:
type: integer
title: Definition Id
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/CustomFieldDefinitionResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
patch:
tags:
- Custom Fields
summary: Update Custom Field
operationId: update_custom_field_v1_projects__project_id__custom_fields__definition_id__patch
security:
- OAuth2PasswordBearer: []
parameters:
- name: project_id
in: path
required: true
schema:
type: integer
title: Project Id
- name: definition_id
in: path
required: true
schema:
type: integer
title: Definition Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CustomFieldDefinitionUpdate'
responses:
'200':
description: Successful Response
content:
application/json:
schema:
$ref: '#/components/schemas/CustomFieldDefinitionResponse'
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
delete:
tags:
- Custom Fields
summary: Archive Custom Field
operationId: archive_custom_field_v1_projects__project_id__custom_fields__definition_id__delete
security:
- OAuth2PasswordBearer: []
parameters:
- name: project_id
in: path
required: true
schema:
type: integer
title: Project Id
- name: definition_id
in: path
required: true
schema:
type: integer
title: Definition Id
responses:
'204':
description: Successful Response
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/projects/{project_id}/custom-fields/conditional-links:
post:
tags:
- Custom Fields
summary: Save Conditional Links
description: 'Interactively link EXISTING dropdown fields into a dependent cascade
(the no-CSV counterpart of dependency-import). Only writes/clears
``validation_rules.conditional_options`` on the child fields — existing
option values are never renamed. Admin-gated, idempotent.'
operationId: save_conditional_links_v1_projects__project_id__custom_fields_conditional_links_post
security:
- OAuth2PasswordBearer: []
parameters:
- name: project_id
in: path
required: true
schema:
type: integer
title: Project Id
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ConditionalLinksRequest'
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/projects/{project_id}/custom-fields/{field_key}/source-tasks:
get:
tags:
- Custom Fields
summary: Search Lookup Source Tasks
description: 'Search the linked SOURCE project''s tasks for a cross-project lookup field''s
per-row picker. The source project was already sanctioned by the admin who
configured the link, so this is gated on the TARGET project — but because the
picker WRITES a link, it requires target WRITE permission (a read-only viewer
must not enumerate source-project tasks), not mere access.'
operationId: search_lookup_source_tasks_v1_projects__project_id__custom_fields__field_key__source_tasks_get
security:
- OAuth2PasswordBearer: []
parameters:
- name: project_id
in: path
required: true
schema:
type: integer
title: Project Id
- name: field_key
in: path
required: true
schema:
type: string
title: Field Key
- name: search
in: query
required: false
schema:
type: string
maxLength: 200
default: ''
title: Search
- name: limit
in: query
required: false
schema:
type: integer
maximum: 50
minimum: 1
default: 20
title: Limit
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/projects/{project_id}/custom-fields/dependency-import/preview:
post:
tags:
- Custom Fields
summary: Preview Dependency File
description: 'Read an uploaded CSV/XLSX and return its detected column headers and row
count so the admin can *pick* which columns form the dependency chain instead
of typing column names (typo-proof). Read-only — no DB writes. Admin-gated.'
operationId: preview_dependency_file_v1_projects__project_id__custom_fields_dependency_import_preview_post
security:
- OAuth2PasswordBearer: []
parameters:
- name: project_id
in: path
required: true
schema:
type: integer
title: Project Id
requestBody:
required: true
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/Body_preview_dependency_file_v1_projects__project_id__custom_fields_dependency_import_preview_post'
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
/v1/projects/{project_id}/custom-fields/dependency-import:
post:
tags:
- Custom Fields
summary: Import Dependency Mapping
description: 'Import a tabular mapping (CSV/XLSX) into N linked dependent-dropdown custom
fields. Idempotent (full recompile). Admin-gated.
``levels`` is an optional JSON array describing the chain
(``[{column, field_key, label}, ...]``, any depth >= 2); when omitted it
defaults to the client_name -> client_location -> use_case chain. The chain
shape is fully caller-defined — not specific to any client.'
operationId: import_dependency_mapping_v1_projects__project_id__custom_fields_dependency_import_post
security:
- OAuth2PasswordBearer: []
parameters:
- name: project_id
in: path
required: true
schema:
type: integer
title: Project Id
requestBody:
required: true
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/Body_import_dependency_mapping_v1_projects__project_id__custom_fields_dependency_import_post'
responses:
'200':
description: Successful Response
content:
application/json:
schema: {}
'422':
description: Validation Error
content:
application/json:
schema:
$ref: '#/components/schemas/HTTPValidationError'
components:
schemas:
Body_import_dependency_mapping_v1_projects__project_id__custom_fields_dependency_import_post:
properties:
file:
type: string
format: binary
title: File
levels:
anyOf:
- type: string
- type: 'null'
title: Levels
type: object
required:
- file
title: Body_import_dependency_mapping_v1_projects__project_id__custom_fields_dependency_import_post
Body_preview_dependency_file_v1_projects__project_id__custom_fields_dependency_import_preview_post:
properties:
file:
type: string
format: binary
title: File
type: object
required:
- file
title: Body_preview_dependency_file_v1_projects__project_id__custom_fields_dependency_import_preview_post
FieldOption:
properties:
label:
type: string
title: Label
value:
type: string
title: Value
type: object
required:
- label
- value
title: FieldOption
FieldType:
type: string
enum:
- text
- textarea
- number
- date
- select
- multi_select
- checkbox
- url
- email
- lookup
title: FieldType
ConditionalLinkItem:
properties:
field_key:
type: string
maxLength: 64
minLength: 1
title: Field Key
depends_on:
anyOf:
- type: string
maxLength: 64
- type: 'null'
title: Depends On
value_map:
anyOf:
- additionalProperties:
items:
type: string
type: array
type: object
- type: 'null'
title: Value Map
type: object
required:
- field_key
title: ConditionalLinkItem
description: 'One parent→child link for the interactive conditional-dropdown builder.
``depends_on=None`` unlinks the field. ``value_map`` maps EXISTING parent
option values to the EXISTING child option values allowed under them.'
HTTPValidationError:
properties:
detail:
items:
$ref: '#/components/schemas/ValidationError'
type: array
title: Detail
type: object
title: HTTPValidationError
CustomFieldDefinitionResponse:
properties:
id:
type: integer
title: Id
project_id:
type: integer
title: Project Id
field_key:
type: string
title: Field Key
label:
type: string
title: Label
field_type:
type: string
title: Field Type
options:
anyOf:
- items:
$ref: '#/components/schemas/FieldOption'
type: array
- type: 'null'
title: Options
validation_rules:
anyOf:
- type: object
- type: 'null'
title: Validation Rules
sort_order:
type: integer
title: Sort Order
default: 0
is_archived:
type: boolean
title: Is Archived
default: false
source:
type: string
title: Source
default: manual
created_at:
type: string
format: date-time
title: Created At
updated_at:
type: string
format: date-time
title: Updated At
type: object
required:
- id
- project_id
- field_key
- label
- field_type
- created_at
- updated_at
title: CustomFieldDefinitionResponse
CustomFieldDefinitionCreate:
properties:
field_key:
type: string
maxLength: 64
minLength: 1
title: Field Key
label:
type: string
maxLength: 255
minLength: 1
title: Label
field_type:
$ref: '#/components/schemas/FieldType'
options:
anyOf:
- items:
$ref: '#/components/schemas/FieldOption'
type: array
- type: 'null'
title: Options
validation_rules:
anyOf:
- type: object
- type: 'null'
title: Validation Rules
sort_order:
type: integer
title: Sort Order
default: 0
type: object
required:
- field_key
- label
- field_type
title: CustomFieldDefinitionCreate
ConditionalLinksRequest:
properties:
links:
items:
$ref: '#/components/schemas/ConditionalLinkItem'
type: array
maxItems: 20
minItems: 1
title: Links
type: object
required:
- links
title: ConditionalLinksRequest
CustomFieldDefinitionUpdate:
properties:
label:
anyOf:
- type: string
maxLength: 255
minLength: 1
- type: 'null'
title: Label
field_type:
anyOf:
- $ref: '#/components/schemas/FieldType'
- type: 'null'
options:
anyOf:
- items:
$ref: '#/components/schemas/FieldOption'
type: array
- type: 'null'
title: Options
validation_rules:
anyOf:
- type: object
- type: 'null'
title: Validation Rules
sort_order:
anyOf:
- type: integer
- type: 'null'
title: Sort Order
is_archived:
anyOf:
- type: boolean
- type: 'null'
title: Is Archived
type: object
title: CustomFieldDefinitionUpdate
ValidationError:
properties:
loc:
items:
anyOf:
- type: string
- type: integer
type: array
title: Location
msg:
type: string
title: Message
type:
type: string
title: Error Type
type: object
required:
- loc
- msg
- type
title: ValidationError
securitySchemes:
OAuth2PasswordBearer:
type: oauth2
flows:
password:
scopes: {}
tokenUrl: token