[API] Adjust Contract
The Adjust Contract API records a debit or a credit on an active contract for money that changed hands outside Uber.
¶ Use case
Keep the contract’s remaining balance in line with your records. Record a credit when the borrower repays part of the loan to you directly, and a debit when you add a charge, such as a penalty, to what the borrower owes.
¶ Supported supplier types
Financiers
¶ Scopes
vehicle_suppliers.financing.contracts
¶ Required permissions
The user that the access token represents needs supplier.contracts.write on the contract’s lender organization. See Access.
¶ Resource
/v1/vehicle-supplier/financing/contracts/adjust
¶ HTTP method
PATCH
¶ Authorization
¶ Example request
curl -X PATCH "https://api.uber.com/v1/vehicle-supplier/financing/contracts/adjust" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <TOKEN>" \
-d '{
"idempotencyKey": {
"value": "<uuid>"
},
"contractId": {
"value": "<contract_id>"
},
"type": "ADJUSTMENT_TYPE_CREDIT",
"amount": {
"amountE5": 20000000,
"currencyCode": "USD"
},
"reason": "ADJUSTMENT_REASON_OFFLINE_ADJUSTMENT",
"description": "Cash repayment received on 10 December 2026",
"executedAt": {
"value": 1796860800000
}
}'
This example records a 200.00 USD repayment that the borrower made to you directly on 10 December 2026.
¶ Request body parameters
| Name | Type | Required | Description |
|---|---|---|---|
idempotencyKey |
object | Yes | UUID object. A UUID you generate for this adjustment. Send the same value when you retry the request. |
contractId |
object | Yes | UUID object. The contract to adjust. |
type |
enum | Yes | Adjustment type enum |
amount |
object | Yes | Amount object. Greater than 0, in the contract’s currency, and no more than 20% of the contract’s loanAmount. |
reason |
enum | Yes | Adjustment reason enum |
description |
string | No | A note about the adjustment. Plain text, up to 128 characters. Text with HTML, markup or control characters other than tabs and line breaks is rejected. |
executedAt |
object | Yes | Timestamp object. When the payment or charge happened. Can be in the past, but not in the future. |
¶ Adjustment type
| Name | Definition |
|---|---|
ADJUSTMENT_TYPE_DEBIT |
Increases the remaining balance. |
ADJUSTMENT_TYPE_CREDIT |
Decreases the remaining balance. |
¶ Adjustment reason
| Name | Definition |
|---|---|
ADJUSTMENT_REASON_OFFLINE_ADJUSTMENT |
A payment or charge settled outside Uber. |
ADJUSTMENT_REASON_PENALTY |
A penalty charged to the borrower. |
Adjustment rules:
- The contract must be in
CONTRACT_STATE_ACTIVE. - A single adjustment can’t be more than 20% of the contract’s
loanAmount. - A debit can’t raise the remaining balance above
loanAmount. - A contract can have at most 3 adjustments in any 7-day period. The period is measured from when Uber received each request, not from
executedAt. Every request Uber accepts counts, including adjustments that later fail.
¶ Example response
200 OK
{
"adjustmentId": {
"value": "<adjustment_id>"
}
}
¶ Response body parameters
| Name | Type | Description |
|---|---|---|
adjustmentId |
object | UUID object. The adjustment’s ID. A retry with the same idempotencyKey returns the same ID. |
¶ Rate limit
1 request per hour for each developer application.
¶ Endpoint-specific errors
| HTTP status | Code | Cause |
|---|---|---|
400 |
invalid-argument |
A required field is missing or invalid, executedAt is in the future, description is too long or isn’t plain text, the contract isn’t active, amount isn’t in the contract’s currency, or the contract already has 3 adjustments in the last 7 days. |
400 |
invalid-amount |
amount is 0 or less or more than 20% of loanAmount, or a debit would raise the remaining balance above loanAmount. |
400 |
not-found |
No contract has this ID. |
401 |
permission-denied |
See Access. |
500 |
internal-server-error |
Retry with the same idempotencyKey. |
¶ Notes
- Uber applies the adjustment after responding. To confirm it took effect, check
retentionDetails.remainingBalanceandretentionDetails.totalAdjustedin Get Contract. No endpoint returns individual adjustments. - A retry with the same
idempotencyKeynever records the adjustment twice, even if the first attempt failed. If Get Contract shows that an adjustment didn’t take effect, send it again with a newidempotencyKey.