---
title: "Create a new source"
method: POST
path: "/v2/sources"
tags: ["Sources"]
---

# Create a new source

`POST /v2/sources`

## Request

- Base URL: `https://api.carecycle.ai`
- URL: `https://api.carecycle.ai/v2/sources`
- Auth: API key in header `x-api-key`

Create a lead source to track where leads and calls come from. You can connect it to a campaign at the same time. Enabled live-call assignments require an existing campaign-owned tracking number; this operation never purchases numbers. Set createPingPostKey to explicitly request a one-time source-scoped vendor key.

## Request body

- PostV2SourcesRequestBody
  - `createPingPostKey` boolean: Explicitly issue a vendor ping-post key for a live-call integration
  - `sourceId` string
  - `name` string
  - `description` string
  - `label` string
  - `type` string
  - `channel` string
  - `status` 'active' | 'inactive' | 'archived'
  - `dealType` 'CPA' | 'CPL', required
  - `pricingModel` 'flat_rate' | 'percentage' | 'dynamic' | 'static' | 'duration', required
  - `payout` string
  - `commissionPerSale` string
  - `leadCost` string
  - `durationThreshold` string
  - `assignment` object, nullable
    - `campaignId` string, uuid, required
    - `sourceType` 'outbound' | 'inbound': Acquisition type: outbound for lead records, inbound for live calls. Independent of campaign direction.
    - `phoneNumberId` integer, nullable
    - `enabled` boolean
    - `metadata` object, nullable
  - `externalRefs` object
  - `metadata` object

## Response `200`

POST /v2/sources Positive response

- PostV2SourcesPositiveResponse
  - `id` string, uuid, required
  - `sourceId` string, required
  - `clientId` string, uuid, required
  - `name` string, nullable, required
  - `description` string, nullable, required
  - `label` string, nullable
  - `type` string, nullable
  - `channel` string, nullable
  - `status` 'active' | 'inactive' | 'archived', required
  - `dealType` 'CPA' | 'CPL', required
  - `pricingModel` 'flat_rate' | 'percentage' | 'dynamic' | 'static' | 'duration', required
  - `payout` string, nullable, required
  - `commissionPerSale` string, nullable, required
  - `leadCost` string, nullable, required
  - `durationThreshold` string, nullable, required
  - `externalRefs` object, nullable
  - `metadata` object, nullable
  - `createdAt` string, date-time, nullable, required: Source creation time. ISO 8601 timestamp
  - `updatedAt` string, date-time, nullable, required: Source last update time. ISO 8601 timestamp
  - `assignments` object[], required
    - `id` string, uuid, required
    - `sourceId` string, uuid, required
    - `campaignId` string, uuid, required
    - `campaignName` string, nullable
    - `direction` 'outbound' | 'inbound', required
    - `enabled` boolean, required
    - `phoneNumberId` integer, nullable, required
    - `phoneNumber` string, nullable
    - `service` 'mobius' | 'softphone' | 'null', nullable
    - `assignedAt` string, date-time, nullable, required: Source assignment time. ISO 8601 timestamp
    - `unassignedAt` string, date-time, nullable, required: Source unassignment time. ISO 8601 timestamp
  - `assignmentCount` integer, required
  - `leadDestinationCampaignId` string, uuid, nullable
  - `leadDestinationCampaignName` string, nullable
  - `pingPostApiKey` string, nullable, required

## Other responses

- `400`: POST /v2/sources Negative response 400
- `401`: POST /v2/sources Negative response 401
- `403`: POST /v2/sources Negative response 403
- `404`: POST /v2/sources Negative response 404
- `409`: POST /v2/sources Negative response 409
- `422`: POST /v2/sources Negative response 422
- `429`: POST /v2/sources Negative response 429
- `500`: POST /v2/sources Negative response 500
- `502`: POST /v2/sources Negative response 502
- `503`: POST /v2/sources Negative response 503

---

[API](https://skmtc.dev/carecycle/apis/carecycle-public-api.md) - [All operations](https://skmtc.dev/carecycle/apis/carecycle-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/carecycle/apis/carecycle-public-api/revisions/db390c743c36?raw)
