Coperniq lineItems API
The lineItems API from Coperniq — 2 operation(s) for lineitems.
The lineItems API from Coperniq — 2 operation(s) for lineitems.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/coperniq-lineitems-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
openapi: 3.2.0
info:
title: Key accounts Line Items API
version: 1.0.0
servers:
- url: https://api.coperniq.io/v1
description: Production server
tags:
- name: lineItems
paths:
/projects/{projectId}/line-items:
get:
operationId: list-project-line-items
summary: List Project Line Items
description: Retrieve all line items for a project
tags:
- lineItems
parameters:
- name: projectId
in: path
description: Project identifier
required: true
schema:
type: integer
- name: x-api-key
in: header
required: true
schema:
type: string
responses:
'200':
description: List of line items
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/LineItem'
'401':
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/ListProjectLineItemsRequestUnauthorizedError'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ListProjectLineItemsRequestNotFoundError'
put:
operationId: replace-project-line-items
summary: Replace Project Line Items
description: 'Replace all line items for a project. Send an object with `lineItems`, `sections`, or both:
- **`lineItems`** `{ lineItems: [...] }` — ungrouped line items.
- **`sections`** `{ sections: [{ name?, lineItems: [...] }] }` — line items grouped into named sections.
- The two may be combined (ungrouped items + named sections).
A `catalogItemId` may appear at most once across the flattened set.
> **Deprecated:** the previous request shape is still accepted for backwards compatibility but is deprecated and will not be supported in a future version.
'
tags:
- lineItems
parameters:
- name: projectId
in: path
description: Project identifier
required: true
schema:
type: integer
- name: x-api-key
in: header
required: true
schema:
type: string
responses:
'200':
description: Updated list of line items
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/LineItem'
'400':
description: Invalid request
content:
application/json:
schema:
$ref: '#/components/schemas/ReplaceProjectLineItemsRequestBadRequestError'
'401':
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/ReplaceProjectLineItemsRequestUnauthorizedError'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ReplaceProjectLineItemsRequestNotFoundError'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectLineItemsPutRequest'
/work-orders/{workOrderId}/line-items:
put:
operationId: replace-work-order-line-items
summary: Replace Work Order Line Items
description: 'Replaces all line items on a work order. Internally updates or creates the underlying quote linked to the task.
Supported **only** for service work orders on an **account** (parent project type `ACCOUNT`). Requests for other work orders receive `400`.
Provide **either** `sections` **or** `lineItems` (not both), using the same shapes as quote line items.
'
tags:
- lineItems
parameters:
- name: workOrderId
in: path
description: Work order identifier
required: true
schema:
type: integer
- name: x-api-key
in: header
required: true
schema:
type: string
responses:
'200':
description: Updated line items (dollar amounts)
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/WorkOrderLineItem'
'400':
description: Invalid request
content:
application/json:
schema:
$ref: '#/components/schemas/ReplaceWorkOrderLineItemsRequestBadRequestError'
'401':
description: Authentication failed
content:
application/json:
schema:
$ref: '#/components/schemas/ReplaceWorkOrderLineItemsRequestUnauthorizedError'
'404':
description: Resource not found
content:
application/json:
schema:
$ref: '#/components/schemas/ReplaceWorkOrderLineItemsRequestNotFoundError'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ReplaceWorkOrderLineItemsRequestInternalServerError'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/WorkOrderLineItemsPutRequest'
components:
schemas:
ListProjectLineItemsRequestUnauthorizedError:
type: object
properties:
message:
type: string
code:
$ref: '#/components/schemas/ProjectsProjectIdLineItemsGetResponsesContentApplicationJsonSchemaCode'
title: ListProjectLineItemsRequestUnauthorizedError
LineItemCatalogItem:
type: object
properties:
id:
type: integer
description: Catalog item identifier
name:
type: string
description: Catalog item name
manufacturer:
type:
- string
- 'null'
description: Manufacturer name
sku:
type:
- string
- 'null'
description: Stock keeping unit
type:
$ref: '#/components/schemas/LineItemCatalogItemType'
description: Item type (e.g., PRODUCT)
description:
type:
- string
- 'null'
description: Item description
required:
- id
- name
- type
title: LineItemCatalogItem
QuoteLineItemCreate:
type: object
properties:
id:
type: integer
description: Existing line item ID (omit for new items)
catalogItemId:
type: integer
description: Catalog item identifier
quantity:
type: integer
description: Quantity
unitCost:
type: number
format: double
description: Cost per unit (dollars, cent precision)
unitPrice:
type: number
format: double
description: Price per unit (dollars, must be positive with cent precision)
description:
type:
- string
- 'null'
description: Line item description
required:
- catalogItemId
- quantity
- unitCost
- unitPrice
title: QuoteLineItemCreate
LineItem:
type: object
properties:
id:
type: integer
description: Line item identifier
quantity:
type: integer
description: Quantity of items
description:
type: string
description: Line item description
unitCost:
type: number
format: double
description: Cost per unit
totalCost:
type: number
format: double
description: Total cost (unitCost * quantity)
totalPrice:
type: number
format: double
description: Total price (unitPrice * quantity)
unitPrice:
type: number
format: double
description: Price per unit
createdAt:
type: string
format: date-time
description: Creation timestamp
sectionName:
type:
- string
- 'null'
description: Section name; null when the item is ungrouped
catalogItem:
$ref: '#/components/schemas/LineItemCatalogItem'
required:
- id
- quantity
- description
- unitCost
- totalCost
- totalPrice
- unitPrice
- createdAt
- catalogItem
title: LineItem
ProjectLineItemsPutRequest:
type: object
properties:
lineItems:
type: array
items:
$ref: '#/components/schemas/ProjectLineItemCreate'
description: Ungrouped line items. May be combined with `sections` (a catalogItemId may appear only once across both).
sections:
type: array
items:
$ref: '#/components/schemas/ProjectLineItemSection'
description: Line items grouped into named sections. May be combined with `lineItems` (ungrouped items).
description: 'Replace all project line items. Provide `lineItems`, `sections`, or both — a `catalogItemId`
may appear at most once across the flattened set.
> **Deprecated:** the previous request shape is still accepted for backwards compatibility but is
> deprecated and will not be supported in a future version.
'
title: ProjectLineItemsPutRequest
ReplaceWorkOrderLineItemsRequestUnauthorizedError:
type: object
properties:
message:
type: string
code:
$ref: '#/components/schemas/WorkOrdersWorkOrderIdLineItemsPutResponsesContentApplicationJsonSchemaCode'
title: ReplaceWorkOrderLineItemsRequestUnauthorizedError
ReplaceProjectLineItemsRequestUnauthorizedError:
type: object
properties:
message:
type: string
code:
$ref: '#/components/schemas/ProjectsProjectIdLineItemsPutResponsesContentApplicationJsonSchemaCode'
title: ReplaceProjectLineItemsRequestUnauthorizedError
LineItemCatalogItemType:
type: string
enum:
- PRODUCT
- SERVICE
description: Item type (e.g., PRODUCT)
title: LineItemCatalogItemType
QuoteSection:
type: object
properties:
id:
type: integer
description: Section identifier
name:
type:
- string
- 'null'
description: Section name (1–500 chars)
lineItems:
type: array
items:
$ref: '#/components/schemas/QuoteLineItemCreate'
description: Line items within this section (at least one required)
required:
- lineItems
title: QuoteSection
ProjectsProjectIdLineItemsPutResponsesContentApplicationJsonSchemaCode:
type: string
enum:
- NOT_FOUND
title: ProjectsProjectIdLineItemsPutResponsesContentApplicationJsonSchemaCode
ReplaceWorkOrderLineItemsRequestNotFoundError:
type: object
properties:
message:
type: string
code:
$ref: '#/components/schemas/WorkOrdersWorkOrderIdLineItemsPutResponsesContentApplicationJsonSchemaCode'
title: ReplaceWorkOrderLineItemsRequestNotFoundError
ProjectsProjectIdLineItemsGetResponsesContentApplicationJsonSchemaCode:
type: string
enum:
- NOT_FOUND
title: ProjectsProjectIdLineItemsGetResponsesContentApplicationJsonSchemaCode
ReplaceWorkOrderLineItemsRequestBadRequestError:
type: object
properties:
message:
type: string
code:
$ref: '#/components/schemas/WorkOrdersWorkOrderIdLineItemsPutResponsesContentApplicationJsonSchemaCode'
field:
type: string
description: Field that caused the validation error (if applicable)
title: ReplaceWorkOrderLineItemsRequestBadRequestError
WorkOrderLineItemCatalogItem:
type: object
properties:
id:
type: integer
name:
type: string
sku:
type:
- string
- 'null'
type:
type:
- string
- 'null'
manufacturer:
type:
- string
- 'null'
title: WorkOrderLineItemCatalogItem
ProjectLineItemSection:
type: object
properties:
id:
type: integer
description: Existing section ID (omit for new sections)
name:
type:
- string
- 'null'
description: Section name (1–500 chars). Omit or pass null for an unnamed section.
lineItems:
type: array
items:
$ref: '#/components/schemas/ProjectLineItemCreate'
description: Line items within this section (at least one required)
required:
- lineItems
description: A named section grouping one or more project line items.
title: ProjectLineItemSection
ReplaceProjectLineItemsRequestBadRequestError:
type: object
properties:
message:
type: string
code:
$ref: '#/components/schemas/ProjectsProjectIdLineItemsPutResponsesContentApplicationJsonSchemaCode'
field:
type: string
description: Field that caused the validation error (if applicable)
title: ReplaceProjectLineItemsRequestBadRequestError
ListProjectLineItemsRequestNotFoundError:
type: object
properties:
message:
type: string
code:
$ref: '#/components/schemas/ProjectsProjectIdLineItemsGetResponsesContentApplicationJsonSchemaCode'
title: ListProjectLineItemsRequestNotFoundError
ProjectLineItemCreate:
type: object
properties:
id:
type: integer
description: Existing line item ID (omit for new items)
catalogItemId:
type: integer
description: Catalog item identifier
quantity:
type: integer
description: Quantity
unitCost:
type: number
format: double
description: Cost per unit
unitPrice:
type: number
format: double
description: Price per unit (may be negative for discount line items)
description:
type:
- string
- 'null'
description: Line item description
required:
- catalogItemId
- quantity
- unitCost
- unitPrice
title: ProjectLineItemCreate
ReplaceWorkOrderLineItemsRequestInternalServerError:
type: object
properties:
message:
type: string
code:
$ref: '#/components/schemas/WorkOrdersWorkOrderIdLineItemsPutResponsesContentApplicationJsonSchemaCode'
title: ReplaceWorkOrderLineItemsRequestInternalServerError
WorkOrderLineItem:
type: object
properties:
id:
type: integer
quantity:
type: integer
description:
type:
- string
- 'null'
unitCost:
type: number
format: double
totalCost:
type:
- number
- 'null'
format: double
unitPrice:
type: number
format: double
totalPrice:
type:
- number
- 'null'
format: double
sectionName:
type:
- string
- 'null'
catalogItem:
oneOf:
- $ref: '#/components/schemas/WorkOrderLineItemCatalogItem'
- type: 'null'
title: WorkOrderLineItem
WorkOrdersWorkOrderIdLineItemsPutResponsesContentApplicationJsonSchemaCode:
type: string
enum:
- INTERNAL_SERVER_ERROR
title: WorkOrdersWorkOrderIdLineItemsPutResponsesContentApplicationJsonSchemaCode
WorkOrderLineItemsPutRequest:
type: object
properties:
sections:
type: array
items:
$ref: '#/components/schemas/QuoteSection'
lineItems:
type: array
items:
$ref: '#/components/schemas/QuoteLineItemCreate'
description: Provide either `sections` or `lineItems` (not both). Same shapes as quote create.
title: WorkOrderLineItemsPutRequest
ReplaceProjectLineItemsRequestNotFoundError:
type: object
properties:
message:
type: string
code:
$ref: '#/components/schemas/ProjectsProjectIdLineItemsPutResponsesContentApplicationJsonSchemaCode'
title: ReplaceProjectLineItemsRequestNotFoundError
securitySchemes:
BasicAuth:
type: http
scheme: basic