---
title: "Create revenue lines (v2)"
method: POST
path: "/api/v1/business/revenue-lines/create-v2"
tags: ["business"]
---

# Create revenue lines (v2)

`POST /api/v1/business/revenue-lines/create-v2`

## Request

- Base URL: `https://point11.ai`
- URL: `https://point11.ai/api/v1/business/revenue-lines/create-v2`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://auth.point11.ai/oauth2/authorize`, token URL `https://auth.point11.ai/oauth2/token`)

Add a product (a revenue line: the answer's revenueLine) to a business profile at once, without research: a new profile version carrying the line, with an existing line's audiences (audiencesFromRevenueLineId) and its market assumptions in Tools › Products at company scope. annualSalesUsd joins the company's annual revenue, re-dividing every line's share while the others keep their sales; marketSharePct and aiInfluencePct (default 20) set its AI-influenced sales and market as saved assumptions, so resetting them leaves the unresearched line without economics. Customers come from it once customer generation next prepares the profile, reviewing its audiences first. INVALID_INPUT when the profile has no annual revenue or its most products; STALE_WRITE when it changed meanwhile. Answers the company ledger as business_revenue_tracking_workspaces_get_v2 reads it, without the measured win rate.

## Headers

- `Point11-Organization` string, uuid
- `Idempotency-Key` string, uuid, required

## Request body

- BusinessRevenueLinesCreateV2Request
  - `businessProfileId` string, uuid, required
  - `name` string, required
  - `description` string, required: What the line sells.
  - `audiencesFromRevenueLineId` string, uuid, required: A current product of the profile (its revenue line id) whose audiences the new line takes.
  - `annualSalesUsd` number, required
  - `marketSharePct` number, required: Annual sales as a percentage of the line's serviceable market.
  - `aiInfluencePct` number: Defaults to 20.

## Response `200`

Success.

- BusinessRevenueLinesCreateV2Response
  - `revenueLine` object, required
    - `id` string, required
    - `name` string, required
  - `profile` object, required: The profile's company ledger with the new line, as business_revenue_tracking_workspaces_get_v2 reads it, without the measured win rate.
    - `businessProfileId` string, required
    - `locationKey` string, nullable, required
    - `scopeLabel` string, required
    - `annualSalesBasis` string, required
    - `profileVersionId` string, required
    - `brandName` string, required
    - `normalizedUrl` string, required
    - `generatedAt` string, date-time, required
    - `lines` object[], required
      - `configurationId` string, nullable, required
      - `revision` integer, nullable, required
      - `source` 'research' | 'configuration', required
      - `lineId` string, required
      - `lineName` string, required
      - `lineAvailable` boolean, required
      - `revenueWeightPct` number, required
      - `samYear` integer, nullable, required
      - `annualSalesUsd` number, nullable, required
      - `marketSharePct` number, nullable, required
      - `aiInfluencePct` number, nullable, required
      - `serviceableAvailableMarketUsd` number, nullable, required
      - `aiInfluencedServiceableAvailableMarketUsd` number, nullable, required
      - `aiInfluencedSalesUsd` number, nullable, required: Annual sales × AI influence: the brand's own sales AI assistants influence. Dollars are a share of the AI-influenced market, not of these sales.

## Other responses

- `400`: The input, query, or Idempotency-Key is invalid.
- `401`: The bearer is missing, expired, or not accepted.
- `402`: Billing refused the write: the code names the reason and `details.reason` carries it.
- `403`: The credential lacks the operation's scope or role, or the operation needs a different door.
- `404`: The resource or organization does not exist for this caller.
- `405`: This path takes another HTTP method, named in `Allow`.
- `409`: The request conflicts with current state or with prior use of its Idempotency-Key.
- `413`: The request, or the answer it asks for, is too large; narrow it.
- `429`: The credential's rate budget is spent; retry after `Retry-After` seconds.
- `500`: An unexpected server failure; retry later. Only `request_id` identifies it.
- `503`: A dependency is temporarily unavailable; retry after `Retry-After` seconds.
- `default`: Another status a product answers for its own refusal (for example `415` for an unsupported attachment); branch on `code`.

---

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