ProjectsDelete a payment

Delete a payment

Deletes a contract payment (billing-plan instalment) that is not on an invoice.

Removes one instalment from its project's billing plan and re-saves the project. Refused (400) when the contract model does not allow deleting payments, or when the instalment is booked, on a draft invoice, or (unbooked) has auto expenses on a draft invoice. Deleting a task's fixed-price instalment switches that task's payment recognition to the overall payment plan. Answers 200 with null. Requires access to the payment's project (same gate as GET /v1/payment/{paymentID}).

Use it to:

  • Remove an instalment that was created by mistake or is no longer agreed

Not for:

  • Invoiced instalments — credit the invoice in TimeLog first
  • A dry run → POST /v1/payment/{paymentID}/validate-delete-payment

Behaviour:

  • Not idempotent.
  • A second DELETE of the same ID answers 404.
  • Safe to retry only under a condition. Treat a 404 on retry as 'already deleted'. After a 400 from the project save (payment-delete-rule-violation) re-read the payment first.
  • Side effect: Removes the instalment from the project's billing plan and saves the project.
  • Side effect: If the instalment belongs to a task, sets that task's PaymentRecognitionModel to OverallPaymentPlan (the fixed-price task model is dropped).
  • Changes are visible to the next read immediately.

Call first: GET /v1/payment, POST /v1/payment/{paymentID}/validate-delete-payment

See also: PUT /v1/payment/{paymentID}, POST /v1/payment

Not yet documented: behaviour → side effects; examples.

curl -X DELETE "https://app3.timelog.com/your-account/api/v1/payment/123" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_TOKEN"
"null"
DELETE
/v1/payment/{paymentID}
DELETE
Base URLstring

Target server for requests. Edit to use your own host.

Bearer Token
Bearer Tokenstring
Required

OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp). The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user. > Not yet documented: how to obtain a token. > Not yet documented: token lifetime.

OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp). The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user. > Not yet documented: how to obtain a token. > Not yet documented: token lifetime.
path
paymentIDinteger
Required

The payment to delete. Route constraint :int.

Format: int32
Request Preview
Response

Response will appear here after sending the request

Authentication

header
Authorizationstring
Required

Bearer token. OAuth 2.0 bearer token, sent as Authorization: Bearer <token>. JWT and reference tokens are both accepted. The token must carry the required scope (default tlp).

The token's sub claim is the acting user. A token WITHOUT sub (client-credentials) acts as the system service user. If the sub user cannot log in (inactive, locked, deleted), the request is rejected with 401 — it is no longer let through without a user.

Not yet documented: how to obtain a token.

Not yet documented: token lifetime.

Path Parameters

paymentIDinteger
Required

The payment to delete. Route constraint :int.

Responses

Success without content: HTTP 200 with the literal JSON body null. The literal null: the payment was deleted.