---
title: "Update Recap CRM config"
method: PUT
path: "/v1/recap/crm-config"
tags: ["Recap"]
---

# Update Recap CRM config

`PUT /v1/recap/crm-config`

## Request

- Base URL: `https://api.pyai.com`
- URL: `https://api.pyai.com/v1/recap/crm-config`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

Hand-configured Salesforce mapping for design partners. Omit secret fields on update to preserve existing values.

## Request body

- RecapCrmConfigInput
  - `salesforce` RecapSalesforceConfigInput
    - `enabled` boolean
    - `instance_url` string, uri
    - `client_id` string
    - `client_secret` string
    - `refresh_token` string
    - `object` string
    - `record_id_field` string
    - `field_map` object
    - `create_activity` boolean

## Response `200`

Updated CRM config

- RecapCrmConfig
  - `object` string
  - `salesforce` RecapSalesforceConfig
    - `enabled` boolean
    - `instance_url` string, uri
    - `client_id` string: Masked on GET.
    - `client_secret` string: Redacted on GET.
    - `refresh_token` string: Redacted on GET.
    - `object` string
    - `record_id_field` string
    - `field_map` object: Recap logical field → Salesforce API field name.
    - `create_activity` boolean: Create a Task with TL;DR + summary after PATCH.
  - `updated_at` integer: Unix ms.

## Other responses

- `401`: Missing or invalid API key (`code: unauthorized`)
- `402`: Billing gate: org out of prepaid credit, per-key budget hit, or plan quota exhausted (`code: credit_exhausted | key_budget_exceeded | insufficient_quota`). Do not retry; add credit or raise the limit. A brand-new key may see this on its first call until the account is funded.

---

[API](https://skmtc.dev/pyai/apis/pyai-api.md) · [All operations](https://skmtc.dev/pyai/apis/pyai-api/llms.txt) · [OpenAPI document](https://skmtc.dev/pyai/apis/pyai-api/revisions/271a1539185b?raw)
