How to create a custom field in a Keap Max account?

The XML-RPC API endpoint for creating a custom field requires a parameter headerID . This is the ID of the custom field header the newly created field should reside under.

However in Keap Max and Pro you don’t have access in the UI to create a custom field header. Does that mean there is no method to create a custom field via the API for Max and Pro?

I can double check on Monday, but I think you can pass 0 in. Also the rest APIs don’t require the header id. It is optional in REST.

1 Like

It doesn’t appear that passing in a 0 for the Id will work.
I tried it with a custom field in ContactAction table and got this:

getMessage()=fXmlRpc\Exception\ResponseException: [InvalidParameter]The group id “0” is an invalid header for ContactAction

After a little experimenting. For Pro/Max you can use XML/RPC to create a custom field tab, custom field group, to add your new field to just as you would for Max Classic. Pro/Max will basically ignore the tab/group. In REST this is done for you automatically by creating a defaults for the tab and group if you omit it. However Pro/Max only supports Contact and Company custom fields. XML/RPC will allow you to create custom fields for Contact Actions (Note, Legacy Appointments, Tasks) for Pro/Max but you can’t use them in the UI.

Thanks Brad

Regarding your comment:
" For Pro/Max you can use XML/RPC to create a custom field tab, custom field group, "

The DataFormTab and DataFormGroup tables are read only, correct? So how is it possible to create custom field tabs and headers with XML/RPC?

This is the error I catch:
“ERROR: 7 - [NoTableAccess]Access denied to table DataFormTab ijr581”

1 Like

Via DataService.add yes it is read only, but you can add them via these DataService methods DataService.getOrAddCustomTab and DataService.getOrAddCustomGroup

I also just realized these are missing from our docs (sigh). I will post a sample payload.

This should create both in one call to add the Group/Header to the default tab.

Request

<methodCall>
  <methodName>DataService.getOrAddCustomGroup</methodName>
  <params>
    <param>
      <value><string>privateKey</string></value>
    </param>
        <param>
      <value><string>Contact</string></value>
    </param>
    <param>
      <value><string>My New Tab</string></value>
    </param>
    <param>
      <value><string>My New Group (Header)</string></value>
    </param>
  </params>
</methodCall>

Response

<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
    <params>
        <param>
            <value>
                <i4>7</i4>
            </value>
        </param>
    </params>
</methodResponse>

Also I highly recommend using REST for this.