Create interim payment
Creates a new interim payment (partial payment, advance payment, prepayment) in the specified project.
How it works:
- The new payment is added to the project with the provided title, description, and amount
- Sort order is automatically set to the maximum existing sort order plus 1 (appears at the end of the list)
- The payment is initially marked as not billed (isBilled: false)
- Description can be provided as HTML or Markdown and is automatically converted to internal IDoc format
Required fields:
- title: Short label for the payment (e.g., “Prepayment”, “50% Deposit”, “Milestone 1”)
- amount: Payment amount (must be positive, minimum 0.01)
Optional fields:
- description: Detailed notes about the payment (e.g., “Client paid €1,000 upfront”). Can be provided as HTML or Markdown format
What happens after creation:
- The payment becomes available for billing in the invoicing system
- When used in an invoice, it is automatically deducted from the final invoice amount
- The payment can be reordered using the sort endpoint
Validation:
- Amount must be a positive number (minimum 0.01)
- Title cannot be empty
- Project must exist and be accessible
Permissions: Requires Projects.edit permission
POST
/projects/{projectId}/interim-paymentsAuthorization
AuthorizationOAuth2 access token · headerrequiredScopes:
api:writeor
AuthorizationBearer token (JWT) · headerrequiredPath parameters
projectIdstringrequiredRequest body
requiredapplication/jsonamountnumberrequiredPayment amount in the workspace currency. Must be a positive number with a minimum value of 0.01. This amount will be deducted from the final invoice when the payment is billed.
descriptionstringOptional detailed description or notes about the payment. Can be provided as HTML (e.g., "<p>Client paid €1,000 upfront</p>") or Markdown format. The system automatically detects the format and converts it to internal IDoc format for storage. If not provided, the description will be empty.
titlestringrequiredShort label or title for the payment. Examples: "Prepayment", "50% Deposit", "Milestone 1", "Advance Payment Q1". This field is required and cannot be empty.
Responses
201Interim payment created successfully
successbooleanrequiredOperation success flag
400Invalid input data
401Unauthorized - Invalid or missing authentication token
403Forbidden - Insufficient API scopes or permissions
404Project not found
Request
curl -X POST "https://leadtime.app/api/public/projects/string/interim-payments" \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"amount": 10000,
"description": "<p>Payment for Q1 milestone - Client paid €1,000 upfront</p>",
"title": "Advance Payment Q1"
}'const response = await fetch("https://leadtime.app/api/public/projects/string/interim-payments", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({
"amount": 10000,
"description": "<p>Payment for Q1 milestone - Client paid €1,000 upfront</p>",
"title": "Advance Payment Q1"
})
});import requests
response = requests.post(
"https://leadtime.app/api/public/projects/string/interim-payments",
headers={
"Authorization": "Bearer YOUR_ACCESS_TOKEN",
"Content-Type": "application/json"
},
json={
"amount": 10000,
"description": "<p>Payment for Q1 milestone - Client paid €1,000 upfront</p>",
"title": "Advance Payment Q1"
},
)Response
{
"success": true
}Invalid input data
Unauthorized - Invalid or missing authentication token
Forbidden - Insufficient API scopes or permissions
Project not found