REST v2 Custom Fields vs XML-RPC - Current Status

Hi all,

The table below gives the current status (December 21st 2025) of the REST v2 Custom Fields.

Explanation of the table columns.

  • Response = Custom Fields appear in the response when retrieving one or more records.
  • Query = Ability to Query on the Custom Field (Not currently supported in REST v2).
  • Update = Ability to Add or Update the Custom Field for the Record.
  • Create = Ability to create the Custom Field for the entity via the API.
  • Delete = Ability to delete the Custom Field for the entity via the API.
Item Response Query Update Create Delete
Affiliate Yes No Yes Yes Yes
Appointment No No No No No
Company Yes No Yes Yes No
Contact Yes No Yes Yes No
Note No No No Yes No
Opportunity Yes No Yes Yes No
Order Yes No Yes Yes Yes
Subscription No No No Yes No
Task No No Yes Yes Yes

In comparison to XML-RPC, you can retrieve, query, update and create across all entities without a problem.

This table will be updated when Keap updates the API with future changes.

Hi Pav, all those gaps have been noted, and I’ll keep you updated as they get resolved. As you know, querying isn’t planned in v2 at the moment, but I’ll share any updates as they come!

@OmarAlmonte - I recommend that you add Custom Fields Querying to the Issue Tracker.

In the Contacts / Orders Search you can create a saved search based on the Custom Fields, which in turn can be run via the API.

So what is the difference between running a saved search and doing it via the API? It will be running the same database queries.

@Pav It was decided not to support custom field filtering in v2 due to performance concerns. This is still an open question for future versions, but as of now there are no plans to include it in v2.

@OmarAlmonte - Sorry, but I do not understand your team thinking here.

I can go in and make a Saved Search with a particular Custom Field set. That search can be run via the REST API. The only difference is that you have to manually setup the search.

But your team has partially added other endpoints to add, update and delete custom fields, like for the Orders.

I am sure other developers will come along soon to request this requirement.

Hi @pav,

Custom Fields for Companies now support Create, Update, and Get Model via the API. You can create and update Company custom fields and retrieve their model through REST v2.

Documentation: Keap REST API

@OmarAlmonte We need custom fields on orders. Is there any update on this?

Hi @Rick_Nielsen and @Pav,

Updating, setting, and getting order custom field values is now supported in REST API v2. Here’s the relevant documentation for reference:

All operations to manage order custom fields themselves are now available in v2:

For contacts, the endpoint to create custom fields is also now available:

With that, all custom field operations for both orders and contacts are fully supported in REST API v2.

Thanks for your patience!

Omar

Tagging @Todd_Stoker and @Timothy_Withers for visibility.

Hi @Pav, the LIST affiliate endpoint now returns the custom_fields property, which contains the custom field values configured for each affiliate.

Additionally, the respective POST and PATCH endpoints now support custom fields for setting and updating purposes.

Thank you,
Omar

CC: @Timothy_Withers @Todd_Stoker

@OmarAlmonte Great! One questuon - is it possible to utilize paypal as an option via the API? Lets say our default merchant is stripe or authorize.net. But we want customers to also have the ability to use paypal. Any documentation? Thanks.

@Rick_Nielsen Payments are always processed through the default gateway. If you need to use PayPal, you would have to update the default merchant using this endpoint. Right now, there isn’t an option in V2 to process payments through a gateway other than the default one.

Thanks @OmarAlmonte Is this on the roadmap?

@Rick_Nielsen At the moment, this is not planned to be supported.

@OmarAlmonte Is there any hack to build this via the API now? Don’t see a way to do it - would be nice to have that ability.

No, there isn’t a way to do that via the API right now, but I’ve brought it up internally. If it ends up being implemented, I’ll be sure to share an update.