Privileged and Confidential This endpoint design has been confidentially shared with you. It is still under development and is subject to change without notice. Please do not share this document or API endpoint details with anyone who is not authorized to have access. For more information read about scopes.
The Get Contract API returns a contract’s terms, state and repayment progress.
Use case
Check whether the borrower has accepted a contract, confirm that an update, termination or adjustment took effect, and track how much of the loan is left to repay.
Supported supplier types
Financiers
Scopes
vehicle_suppliers.financing.contracts
Required permissions
The user that the access token represents needs supplier.contracts.read on the contract’s lender organization. See Access.
Resource
/v1/vehicle-supplier/financing/contracts/:contract_id
HTTP method
GET
Authorization
Client Credentials
Example request
curl -X GET "https://api.uber.com/v1/vehicle-supplier/financing/contracts/<contract_id>" \
-H "Authorization: Bearer <TOKEN>"
Request path parameters
| Name |
Type |
Description |
contract_id |
string |
Contract ID returned by Create Contract. |
Example response
200 OK
{
"contract": {
"contractId": {
"value": "<contract_id>"
},
"type": "CONTRACT_TYPE_B2B",
"stateInfo": {
"state": "CONTRACT_STATE_ACTIVE"
},
"lender": {
"lenderId": {
"value": "<lender_org_id>"
}
},
"borrower": {
"borrowerId": {
"value": "<borrower_org_id>"
}
},
"loanAmount": {
"amountE5": "1500000000",
"currencyCode": "USD"
},
"retentionConfig": {
"cadence": "RETENTION_CADENCE_WEEKLY",
"retentionStrategyType": "RETENTION_STRATEGY_TYPE_STATIC",
"retentionAmount": {
"percentRate": 10,
"maxCadenceCap": {
"amountE5": "50000000",
"currencyCode": "USD"
}
}
},
"metadata": {
"name": "Fleet expansion loan",
"countryIso2": "US",
"interestRate": 8.5,
"acceptanceExpiryAt": {
"value": "1792022400000"
},
"financierName": "Example Capital"
},
"retentionDetails": {
"totalRetained": {
"amountE5": "300000000",
"currencyCode": "USD"
},
"totalAdjusted": {
"amountE5": "20000000",
"currencyCode": "USD"
},
"remainingBalance": {
"amountE5": "1180000000",
"currencyCode": "USD"
},
"lastRetentionAt": {
"value": "1799028000000"
}
},
"startsAt": {
"value": "1793577600000"
},
"endsAt": {
"value": "1825027200000"
},
"createdAt": {
"value": "1790847000000"
},
"updatedAt": {
"value": "1793577604000"
},
"version": 1
}
}
In this example, 3,000.00 USD of the 15,000.00 USD loan has been retained and a 200.00 USD credit recorded, which leaves 11,800.00 USD to repay. stateInfo.reason is missing because active contracts have no state reason.
Response body parameters
| Name |
Type |
Description |
contract |
object |
Contract object |
Contract
| Name |
Type |
Description |
contractId |
object |
UUID object. The contract’s ID. |
type |
enum |
Contract type enum |
stateInfo |
object |
State info object |
lender |
object |
Lender object |
borrower |
object |
Borrower object |
loanAmount |
object |
Amount object. The loan amount set at creation. Adjustments don’t change it. |
retentionConfig |
object |
Retention config object |
metadata |
object |
Contract metadata object |
retentionDetails |
object |
Retention details object. Repayment progress. |
startsAt |
object |
Timestamp object. When retention starts. |
endsAt |
object |
Timestamp object. When the contract ends if the loan isn’t repaid first. |
createdAt |
object |
Timestamp object. When the contract was created. |
updatedAt |
object |
Timestamp object. When the contract last changed. |
version |
int |
Starts at 1 and goes up each time the retention amount is updated. |
State info
| Name |
Type |
Description |
state |
enum |
Contract state enum |
reason |
enum |
State reason enum. Why the contract entered its current state. Only present when the state is CONTRACT_STATE_ACCEPTED, CONTRACT_STATE_TERMINATING or CONTRACT_STATE_TERMINATED. |
Contract state
| Name |
Definition |
CONTRACT_STATE_DRAFT |
Uber is setting up the contract. It moves to CONTRACT_STATE_PENDING_ACCEPTANCE on its own. |
CONTRACT_STATE_PENDING_ACCEPTANCE |
Waiting for the borrower to accept. |
CONTRACT_STATE_ACCEPTED |
Accepted. Retention starts at startsAt. |
CONTRACT_STATE_ACTIVE |
Uber retains part of the borrower’s earnings in each retention period. |
CONTRACT_STATE_TERMINATING |
Termination is in progress and Uber is stopping retention. |
CONTRACT_STATE_TERMINATED |
Final state. Uber no longer retains anything for this contract. |
State reason
| Name |
Definition |
CONTRACT_STATE_REASON_BORROWER_ACCEPTED |
The borrower accepted the contract. |
CONTRACT_STATE_REASON_AUTO_ACCEPTED |
The contract was accepted automatically, without the borrower’s review. |
CONTRACT_STATE_REASON_BORROWER_REJECTED |
The borrower rejected the contract. |
CONTRACT_STATE_REASON_LENDER_TERMINATED |
The lender terminated the contract. |
CONTRACT_STATE_REASON_ACCEPTANCE_WINDOW_EXPIRED |
The borrower didn’t accept the contract before acceptanceExpiryAt. |
CONTRACT_STATE_REASON_CONTRACT_MATURED |
The loan was fully repaid. |
CONTRACT_STATE_REASON_END_DATE_REACHED |
The contract reached endsAt. |
CONTRACT_STATE_REASON_PROVISIONING_FAILED |
Uber couldn’t set up retention because none of the borrower’s organizations is in the contract’s country. |
Contract type
| Name |
Definition |
CONTRACT_TYPE_B2B |
A contract between a lender organization and a borrower organization. |
Lender
| Name |
Type |
Description |
lenderId |
object |
UUID object. Your organization’s ID. |
Borrower
| Name |
Type |
Description |
borrowerId |
object |
UUID object. The ID of the supplier organization repaying the loan. |
Retention config
Retention cadence
| Name |
Definition |
RETENTION_CADENCE_WEEKLY |
Each retention period is a week. |
RETENTION_CADENCE_MONTHLY |
Each retention period is a month. |
Retention strategy type
| Name |
Definition |
RETENTION_STRATEGY_TYPE_STATIC |
The retention amount stays the same for the life of the contract unless you lower it with Update Contract. |
Retention amount
Contains percentRate, maxCadenceCap, or both. Retention explains how they combine.
| Name |
Type |
Description |
percentRate |
number |
Percentage of the borrower’s earnings to retain in each period, for example 10 for 10%. Greater than 0 and at most 100, with up to 2 decimal places. |
maxCadenceCap |
object |
Amount object. The most Uber retains in one period. Greater than 0 and in the loan currency. |
| Name |
Type |
Description |
name |
string |
Your label for the contract. Not blank, and at most 128 characters. |
countryIso2 |
string |
ISO 3166-1 alpha-2 country code, for example US. The loan must be in this country’s currency, and Uber retains only from earnings in this country. |
interestRate |
number |
Optional. Annual interest rate in percent, for your records, for example 8.5. From 0 to 100, with up to 2 decimal places. Uber doesn’t use it to calculate retention. |
acceptanceExpiryAt |
object |
Timestamp object. The borrower has to accept the contract before this time. |
financierName |
string |
Your organization’s name. Uber fills it in on responses and ignores it on requests. |
Retention details
| Name |
Type |
Description |
totalRetained |
object |
Amount object. Total retained from the borrower’s earnings so far. |
totalAdjusted |
object |
Amount object. Total of the adjustments that took effect. Debits and credits both add to this total. |
remainingBalance |
object |
Amount object. What the borrower still owes. |
lastRetentionAt |
object |
Timestamp object. When Uber last retained earnings for this contract. |
Amount
| Name |
Type |
Description |
amountE5 |
long |
Amount multiplied by 100,000. For example, 1500000000 means 15,000.00. Responses return it as a string, and leave it out when the amount is 0. |
currencyCode |
string |
ISO 4217 currency code, for example USD. |
UUID
| Name |
Type |
Description |
value |
string |
The ID in standard UUID format. |
Timestamp
| Name |
Type |
Description |
value |
long |
Unix epoch time in milliseconds. Responses return it as a string. |
Rate limit
10 requests per second for each developer application.
Endpoint-specific errors
| HTTP status |
Code |
Cause |
400 |
invalid-argument |
contract_id isn’t a valid UUID. |
400 |
not-found |
No contract has this ID. |
401 |
permission-denied |
The token’s user doesn’t have supplier.contracts.read on the contract’s lender organization. |
500 |
internal-server-error |
Retry with exponential backoff. |
Notes
retentionDetails is missing until there is repayment data, for example before retention starts. Its fields can also be missing if Uber can’t load them at that moment. Retry later.
loanAmount never changes. Use retentionDetails.remainingBalance for what the borrower owes now.