Create an opportunity

Create an opportunity. Fires your “opportunity created” workflows, exactly like creating one in the app.

POST https://api.centerfy.ai/webhooks/inbound/opportunities

Headers

HeaderRequiredValueDescription
x-api-keyYesyour sub-account API key (cfy_…)Authenticates the request; or use Authorization: Bearer <key>.

Body parameters

NameTypeRequiredDefaultDescription
namestringYes—Opportunity name.
pipeline_idstring (uuid)Yes—Pipeline the opportunity belongs to.
stage_idstring (uuid)No—Stage within that pipeline. Defaults to the pipeline’s first stage.
contact_idstring (uuid) | nullNo—Linked contact; must be in this sub-account.
company_idstring (uuid) | nullNo—Linked company; must be in this sub-account.
monetary_valuenumberNo—Deal value; minimum 0. Defaults to 0.
sourcestring | nullNo—Free-text lead source label.
statusstringNo—One of open, won, lost, abandoned. Defaults to open.
assigned_tostring (uuid) | nullNo—User id of a member of this sub-account.

Request body

{
  "name": "Acme — annual plan",
  "pipeline_id": "7d2e9f10-4b3c-4a1d-9e8f-2a3b4c5d6e7f",
  "contact_id": "3f1c2a9e-7b4d-4c8a-9e2f-1a2b3c4d5e6f",
  "monetary_value": 1200,
  "source": "website"
}

Example

curl -X POST "https://api.centerfy.ai/webhooks/inbound/opportunities" \
  -H "x-api-key: $CENTERFY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "Acme — annual plan",
  "pipeline_id": "7d2e9f10-4b3c-4a1d-9e8f-2a3b4c5d6e7f",
  "contact_id": "3f1c2a9e-7b4d-4c8a-9e2f-1a2b3c4d5e6f",
  "monetary_value": 1200,
  "source": "website"
}'
import { CenterfyClient } from "@centerfy/sdk";

const centerfy = new CenterfyClient({ apiKey: process.env.CENTERFY_API_KEY! });

const result = await centerfy.opportunities.create({
  "name": "Acme — annual plan",
  "pipeline_id": "7d2e9f10-4b3c-4a1d-9e8f-2a3b4c5d6e7f",
  "contact_id": "3f1c2a9e-7b4d-4c8a-9e2f-1a2b3c4d5e6f",
  "monetary_value": 1200,
  "source": "website"
});
console.log(result);
centerfy opportunities create '{"name":"Acme — annual plan","pipeline_id":"7d2e9f10-4b3c-4a1d-9e8f-2a3b4c5d6e7f","contact_id":"3f1c2a9e-7b4d-4c8a-9e2f-1a2b3c4d5e6f","monetary_value":1200,"source":"website"}'

MCP tool: centerfy_opportunities_create (see MCP server)

Response

{
  "status": "success",
  "opportunity": {
    "id": "9e4c5f61-7d8a-4b92-8c3d-4e5f6a7b8c93",
    "name": "Acme — annual plan",
    "contact_id": "3f1c2a9e-7b4d-4c8a-9e2f-1a2b3c4d5e6f",
    "company_id": null,
    "pipeline_id": "7d2e9f10-4b3c-4a1d-9e8f-2a3b4c5d6e7f",
    "stage_id": "0b6f2c1e-3a4d-4e5f-8a9b-1c2d3e4f5a60",
    "monetary_value": 1200,
    "source": "website",
    "status": "open",
    "assigned_to": null,
    "created_at": "2026-10-03T12:00:00.000Z",
    "updated_at": "2026-10-03T12:00:00.000Z"
  }
}

Errors

  • 400 — if stage_id isn’t in the pipeline, the pipeline has no stages, or contact/company/assignee aren’t in this sub-account.
  • 404 — if the pipeline is not in this sub-account.

Notes

Returns 201.

© 2026 Centerfy AI. All rights reserved.