Freeagent API: client_contact_name works via web UI but is ignored by estimates api

Hi all,

I’m trying to use the FreeAgent API to create/update draft Quotes/Estimates and override the displayed recipient/contact name using client_contact_name.

The Estimates API documentation says:

> client_contact_name — Will override the default contact name on this estimate.

My understanding is that this should allow the estimate to remain linked to the normal FreeAgent contact, while changing the name displayed on the estimate/quote itself.

The use case is simply that we sometimes need the quote recipient name to include a “C/O” name, without changing the underlying accounting contact.

For example, simplified create payload:

json
{
"estimate": {
"status": "Draft",
"estimate_type": "Quote",
"contact": "``https://api.freeagent.com/v2/contacts/12345678``",
"reference": "API-TEST-001",
"dated_on": "2026-07-05",
"currency": "GBP",
"client_contact_name": "Example C/O Name",
"notes": "API test draft - do not send",
"estimate_items": [
{
"item_type": "Services",
"description": "API test line item",
"quantity": 1,
"price": 1,
"sales_tax_rate": 0
}
]
}
}

The estimate is created successfully as a draft quote. However, the API response includes the normal contact_name, but completely omits client_contact_name.

A follow-up GET request also omits client_contact_name.

I have also tested updating an existing draft estimate via PUT with client_contact_name included in the payload. The API request is accepted, the estimate updates successfully, and updated_at changes. However, the displayed contact name does not change and client_contact_name is still omitted from the response.

The confusing part is that if I open the same draft estimate in the FreeAgent web interface and manually change the contact/recipient name there, the API then does return client_contact_name on a subsequent GET request.

So the behaviour I’m seeing is:

- Creating an estimate via API with client_contact_name:

  • estimate is created successfully
  • no validation error
  • client_contact_name is omitted from the response
  • displayed recipient name remains the default FreeAgent contact name

- Updating an existing estimate via API with client_contact_name:

  • estimate update succeeds
  • updated_at changes
  • no validation error
  • displayed recipient name does not change
  • client_contact_name is omitted from the response, unless it had previously been set manually in the web UI

- Manually changing the recipient/contact name in the FreeAgent web UI:

  • the displayed name changes correctly
  • subsequent API GET requests then include client_contact_name

That makes it look as though client_contact_name exists and is readable through the API, but is not actually writable through the Estimates API.

Has anyone else managed to set client_contact_name on an Estimate/Quote through the API?

If it is not writable via the API, is there another supported way to override the recipient name shown on the quote PDF while keeping the estimate linked to the original FreeAgent contact?

Any confirmation or workaround would be appreciated.

Thanks.