openapi: 3.2.0 info: description: Accela API for transactional records and related record resources title: Records/Contacts/Custom Tables API version: v4 servers: - url: https://apis.accela.com/ tags: - name: Records/Contacts/Custom Tables paths: /v4/records/{recordId}/contacts/{contactId}/customTables: get: description: 'Gets the custom tables associated with the specified record contact. **API Endpoint**: GET /v4/records/{recordId}/contacts/{contactId}/customTables **Scope**: records **App Type**: Agency **Authorization Type**: Access token **Civic Platform version**: 8.0.3' summary: Get All Custom Tables for Record Contact operationId: v4.get.records.recordId.contacts.contactId.customTables tags: - Records/Contacts/Custom Tables parameters: - $ref: '#/components/parameters/authHeaderParam' - $ref: '#/components/parameters/recordId' - $ref: '#/components/parameters/contactId' - $ref: '#/components/parameters/fields' - $ref: '#/components/parameters/lang' responses: '200': description: 'Successful request. Note: A successful request may return no data matching the filter criteria. A successful request may also return messages related to Event Manager Scripting Engine back-end processing.' content: application/json: schema: $ref: '#/components/schemas/response_tableModelArray' '400': description: Invalid request. '401': description: Authorization failed. '403': description: Forbidden request. '404': description: Requested resource not found. '500': description: Internal server error or bad connection. put: description: 'Updates the custom tables for the specified record contact. The request body is an array of custom tables, each with the custom table id and an array of rows. Use this API to add, update and delete rows from an existing custom table. (Custom tables are defined in Civic Platform.) Note that the modified custom table data only applies to the transactional record contact, not the reference contact. **API Endpoint**: PUT /v4/records/{recordId}/contacts/{contactId}/customTables **Scope**: records **App Type**: Agency **Authorization Type**: Access token **Civic Platform version**: 8.0.3' summary: Update Record Custom Tables operationId: v4.put.records.recordId.contacts.contactId.customTables tags: - Records/Contacts/Custom Tables parameters: - $ref: '#/components/parameters/authHeaderParam' - $ref: '#/components/parameters/recordId' - $ref: '#/components/parameters/contactId' - $ref: '#/components/parameters/fields' - $ref: '#/components/parameters/lang' responses: '200': description: 'Successful request. Note: A successful request may return no data matching the filter criteria. A successful request may also return messages related to Event Manager Scripting Engine back-end processing.' content: application/json: schema: $ref: '#/components/schemas/response_resultModelArray' '400': description: Invalid request. '401': description: Authorization failed. '403': description: Forbidden request. '404': description: Requested resource not found. '500': description: Internal server error or bad connection. requestBody: content: application/json: schema: items: $ref: '#/components/schemas/tableModel' type: array description: The custom table information to be updated. /v4/records/{recordId}/contacts/{contactId}/customTables/meta: get: description: 'Gets the metadata of all custom tables associated with the specified record contact. **API Endpoint**: GET /v4/records/{recordId}/contacts/{contactId}/customTables/meta **Scope**: records **App Type**: Agency **Authorization Type**: Access token **Civic Platform version**: 8.0.3' summary: Get Metadata of All Record Contact Custom Tables operationId: v4.get.records.recordId.contacts.contactId.customTables.meta tags: - Records/Contacts/Custom Tables parameters: - $ref: '#/components/parameters/authHeaderParam' - $ref: '#/components/parameters/recordId' - $ref: '#/components/parameters/contactId' - $ref: '#/components/parameters/fields' - $ref: '#/components/parameters/lang' responses: '200': description: 'Successful request. Note: A successful request may return no data matching the filter criteria. A successful request may also return messages related to Event Manager Scripting Engine back-end processing.' content: application/json: schema: $ref: '#/components/schemas/response_customFormSubgroupModelArray' '400': description: Invalid request. '401': description: Authorization failed. '403': description: Forbidden request. '404': description: Requested resource not found. '500': description: Internal server error or bad connection. /v4/records/{recordId}/contacts/{contactId}/customTables/{tableId}/meta: get: description: 'Gets the metadata of a specified custom table associated with the specified record contact. **API Endpoint**: GET /v4/records/{recordId}/contacts/{contactId}/customTables/{tableId}/meta **Scope**: records **App Type**: Agency **Authorization Type**: Access token **Civic Platform version**: 8.0.3' summary: Get Metadata of a Record Contact Custom Table operationId: v4.get.records.recordId.contacts.contactId.customTables.tableId.meta tags: - Records/Contacts/Custom Tables parameters: - $ref: '#/components/parameters/authHeaderParam' - $ref: '#/components/parameters/recordId' - $ref: '#/components/parameters/contactId' - description: The custom table ID to fetch. in: path name: tableId required: true schema: type: string - $ref: '#/components/parameters/fields' - $ref: '#/components/parameters/lang' responses: '200': description: 'Successful request. Note: A successful request may return no data matching the filter criteria. A successful request may also return messages related to Event Manager Scripting Engine back-end processing.' content: application/json: schema: $ref: '#/components/schemas/response_customFormSubgroupModelArray' '400': description: Invalid request. '401': description: Authorization failed. '403': description: Forbidden request. '404': description: Requested resource not found. '500': description: Internal server error or bad connection. components: schemas: response_resultModelArray: type: object properties: result: items: $ref: '#/components/schemas/resultModel' type: array status: type: integer description: The HTTP return status. aSITableDrill: type: object properties: children: items: $ref: '#/components/schemas/childDrill' type: array isRoot: type: boolean tableModel: type: object properties: id: description: The custom table id. type: string rows: items: $ref: '#/components/schemas/rowModel' description: A table row containing custom fields. type: array resultModel: type: object properties: code: description: The error code, if an error is encountered. type: string id: description: The system id of the object in this operation. format: int64 type: integer isSuccess: description: Indicates whether or not the operation on the object is successful. type: boolean message: description: The error message, if an error is encountered type: string response_tableModelArray: type: object properties: result: items: $ref: '#/components/schemas/tableModel' type: array status: type: integer description: The HTTP return status. response_customFormSubgroupModelArray: type: object properties: result: items: $ref: '#/components/schemas/customFormSubgroupModel' type: array status: type: integer description: The HTTP return status. customAttributeModel: description: 'Contains a custom form consisting of the custom form id and custom field name and value pairs. For example in JSON, "My Custom Field": "My Custom Value". The custom field name and its data type are defined in Civic Platform custom forms or custom tables:
**For a Text field**, the maximum length is 256.
**For a Number field**, any numeric form is allowed, including negative numbers.
**For a Date field**, the format is MM/dd/yyyy.
**For a Time field**, the format is hh:mm.
**For a TextArea field**, the maximum length is 4000 characters, and allows line return characters.
**For a DropdownList field**, the dropdown list values are in the options[] array.
**For a CheckBox field**, the (case-sensitive) valid values are "UNCHECKED" and "CHECKED".
**For a Radio(Y/N) field**, the (case-sensitive) valid values are "Yes" and "No".' type: object properties: id: description: The custom form id. type: string : description: The name of a custom field. type: string : description: The value of a custom field. type: string customFormSubgroupModel: type: object properties: displayOrder: description: The custom form subgroup display order. format: int64 type: integer fields: items: $ref: '#/components/schemas/customFormField' type: array id: description: The custom form subgroup system id assigned by the Civic Platform server. type: string text: description: The custom form subgroup name. type: string rowModel: type: object properties: action: description: The requested operation on the row. enum: - add - update - delete type: string fields: $ref: '#/components/schemas/customAttributeModel' id: description: The row id. type: string customFormField: type: object properties: displayOrder: description: '' format: int64 type: integer drillDown: $ref: '#/components/schemas/aSITableDrill' fieldType: description: The custom field data type. type: string id: description: The custom field system id assigned by the Civic Platform server. type: string isReadonly: description: Indicates whether or not the custom field is read-only. enum: - Y - N type: string isRequired: description: Indicates whether or not the custom field is required. enum: - Y - N type: string maxLength: description: The custom field length format: int64 type: integer options: items: type: object description: A dropdown option value. properties: text: description: The localized display value. type: string value: description: The data value. type: string type: array text: description: The custom field localized text. type: string value: description: The custom field stored value. type: string childDrill: type: object properties: drillId: format: int64 type: integer id: type: string parameters: recordId: description: The ID of the record to fetch. See [Get All Records](./api-records.html#operation/v4.get.records), [Search Records](./api-search.html#operation/v4.post.search.records), or [Get My Records](./api-records.html#operation/v4.get.records.mine). in: path name: recordId required: true schema: type: string contactId: description: The ID of the contact to fetch. See [Get All Contacts](./api-contacts-professionals.html#operation/v4.get.contacts). in: path name: contactId required: true schema: type: integer format: int64 fields: description: Comma-delimited names of fields to be returned in the response. Note - Field names are case-sensitive and only first-level fields are supported. Invalid field names are ignored. in: query name: fields required: false schema: type: string authHeaderParam: description: Construct oAuth2 authentication token in: header name: Authorization required: true schema: type: string lang: description: Language parameter to support I18N. Default language is en_US. in: query name: lang required: false schema: type: string x-api-evangelist-provenance: generated: '2026-09-06' method: searched source: https://developer.accela.com/api/v4/v4-records.json note: Harvested verbatim from the Accela Developer Portal API Reference, which renders these Swagger 2.0 documents via ReDoc (spec-url on developer.accela.com/docs/api_reference/api-*.html). The byte-identical original is kept at openapi/_original/. This copy is the same document serialized to YAML.