Update manual position in potential invoice
What does this do? Updates an existing custom manual position in a potential invoice. You can modify the title and/or price of the position.
When to use:
- To correct the title or price of a manual position
- To adjust pricing before finalizing the invoice
- To update position details after initial creation
How it works:
- Updates the manual position stored in the potential invoice metadata
- Only custom manual positions (type: manual) can be updated
- Project manual positions (from project snapshots) are read-only and cannot be modified
- Both title and price must be provided (even if only one is changing)
Position requirements:
- Position must exist in the potential invoice
- Position must be a custom manual position (not a project position)
- Title and price are required
Invoice ID Format: The invoice ID follows the format: {type}::{projectId}::{dateFrom}::{dateTo}
- Example: SingleProject::0e9d033a-ab41-4212-8637-66c4e3b01fe2::2025-10-01::2025-10-31
Permission requirements: Requires Invoices.manage permission and access to the project.
PATCH
/billing/potential-invoices/{id}/manual-positions/{positionId}Authorization
AuthorizationOAuth2 access token · headerrequiredScopes:
api:writeor
AuthorizationBearer token (JWT) · headerrequiredPath parameters
idstringrequiredPotential invoice ID in format: {type}::{projectId}::{dateFrom}::{dateTo}
positionIdstring<uuid>requiredManual position ID (UUID) to update
Request body
requiredapplication/jsonpricenumberrequiredNet price (before tax) for this manual position in the workspace currency
titlestringrequiredTitle or description of the manual position
Responses
200Manual position updated successfully
successbooleanrequiredOperation success flag
401Unauthorized - Invalid or missing authentication token
403User lacks Invoices.manage permission or project access
404Potential invoice or manual position not found
Request
curl -X PATCH "https://leadtime.app/api/public/billing/potential-invoices/SingleProject%3A%3A0e9d033a-ab41-4212-8637-66c4e3b01fe2%3A%3A2025-10-01%3A%3A2025-10-31/manual-positions/550e8400-e29b-41d4-a716-446655440000" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"price": 150,
"title": "Workshop travel expenses"
}'const response = await fetch("https://leadtime.app/api/public/billing/potential-invoices/SingleProject%3A%3A0e9d033a-ab41-4212-8637-66c4e3b01fe2%3A%3A2025-10-01%3A%3A2025-10-31/manual-positions/550e8400-e29b-41d4-a716-446655440000", {
method: "PATCH",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({
"price": 150,
"title": "Workshop travel expenses"
})
});import requests
response = requests.patch(
"https://leadtime.app/api/public/billing/potential-invoices/SingleProject%3A%3A0e9d033a-ab41-4212-8637-66c4e3b01fe2%3A%3A2025-10-01%3A%3A2025-10-31/manual-positions/550e8400-e29b-41d4-a716-446655440000",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
},
json={
"price": 150,
"title": "Workshop travel expenses"
},
)Response
{
"success": true
}Unauthorized - Invalid or missing authentication token
User lacks Invoices.manage permission or project access
Potential invoice or manual position not found