Create a fee
Use this endpoint to create a fee on a project.
A fee represents a financial charge tied to a project — typically a placement fee earned when a candidate is successfully hired.
Splits are required. Every fee must declare how its revenue is distributed across fee earners via splits, and the shares must total exactly 100%.
Placement side effect: when personId refers to a person who is a candidate on the project and has no placement yet, this call also creates a placement, links the fee to it, and emits a placement webhook. If the candidate already has a placement, the fee is linked to the existing one. If the person is not a candidate on the project, the fee is created without a placement. companyContactId and type are only used when a placement is created by this call; type defaults to permanent.
Currency conversion: when currency differs from your agency currency, defaultAmount is computed automatically using the current exchange rate, and the agency currency is snapshotted onto the fee as defaultCurrency.
Defaults: projectFeeStatus defaults to projected; paid also sets paidAt and invoiced also sets invoicedAt. invoiceAccountCode defaults from your agency settings and is not settable on create.
Not supported: contract fees — creating a fee for a candidate with an existing contract placement returns 422.
What you get back: The created fee in the same shape as the fee detail endpoint, so a follow-up GET returns identical fields.
Request body
Example request
{
"projectId": "550e8400-e29b-41d4-a716-446655440000",
"amount": "15000.00",
"currency": "GBP",
"feeDate": "2025-06-15",
"projectFeeStatus": "projected",
"type": "permanent",
"splits": [
{
"feeEarnerId": "550e8400-e29b-41d4-a716-446655440000",
"feeTypeId": "660e8400-e29b-41d4-a716-446655440001",
"share": "60.00"
}
]
}Response
Fee created
Example response
{
"data": {
"feeType": {
"name": "Placement Fee"
},
"feeDate": "2025-06-15",
"amount": "15000.00",
"defaultAmount": "15000.00",
"currency": "GBP",
"defaultCurrency": "GBP",
"projectFeeStatus": "earned",
"splits": [
{
"feeEarner": {
"name": "Jane Smith",
"email": "jane@agency.com"
},
"feeType": {
"name": "Placement Fee"
},
"share": "60.00"
}
]
}
}Changes
Changed in 1 of the 6 revisions of this API.1
- ○
endpoint added
endpoint-added
- ○