AutoFi API

AutoFi's public REST API (OpenAPI 3.0.0) for automotive lending and digital retail. Resource-oriented JSON endpoints for requesting a JWT access token with API client credentials, creating and retrieving loan applications, creating Dealmaker deals and credit applications, looking up AutoFi dealers, estimating cash, finance and lease payments, and running prequalification. Production runs at api.autofi.com with a UAT sandbox at api-uat.autofi.com that can simulate lender decisions per lender code.

Documentation

Specifications

Other Resources

OpenAPI Specification

autofi-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: AutoFi API
  description: "\n# Introduction\n Welcome to the AutoFi REST API. Our API has predictable resource-oriented\
    \ URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP\
    \ response codes, authentication, and verbs.\n\n# HTTP Requests\n### Environments\nEnvironment | URL\n\
    ----------------|-------------\nTest Sandbox | https://api-uat.autofi.com\nProduction | https://api.autofi.com\n\
    \n### Request Headers\n\nThe `Content-Type` header for `POST` and `PUT` requests should be set to\
    \ `application/json` unless otherwise noted.\n\nHeader | Value\n----------------|-------------\nContent-Type\
    \ | application/json\n\n### Response Headers\nHeader | Value\n----------------|-------------\nX-RateLimit-Limit\
    \ | Request quota\nX-RateLimit-Reset | UNIX timestamp the request quota will be reset after exceeding\
    \ it\nX-RateLimit-Remaining | Remaining requests in quota\nRetry-After | Time in seconds to retry\
    \ after\nX-Response-Time | The time in milliseconds it took to respond to the request\n\n# HTTP Responses\n\
    AutoFi uses standard HTTP response codes to indicate the success or failure of an API request. \n\n\
    ## Successful requests\nHTTP requests that are successfully processed returns `2xx` status codes.\n\
    \n| Status code | Description |\n| -- | -- |\n| **200 OK** | The request was successfully processed\
    \ and requested content is returned in the response body. |\n| **201 Created** | The request was successfully\
    \ processed and a new resource was created. |\n| **204 No Content** | The request was successfully\
    \ processed and the response body has no content. |\n\n## Failed Requests\nHTTP requests that are\
    \ not successfully processed, due to a client or server error, returns `4xx` or `5xx` status codes\
    \ respectively.\n\n### HTTP 4XX status codes\n| Status code | Description \n| -- | -- |\n| **400 Bad\
    \ Request** | The request cannot be processed. Typically due to a malformed payload.\n| **401 Unauthorized**\
    \ | The request has invalid credentials (token).\n| **403 Forbidden** | The request has insufficient\
    \ privileges.\n| **404 Not Found** | The requested resource could not be found.\n| **405 Method Not\
    \ Allowed** | The API does not allow this method.\n| **415 Unsupported Media Type** | The payload\
    \ format is not supported. [AutoFi request headers](#request-headers).\n| **429 Too Many Requests**\
    \ | There were too many request in a given amount of time.\n\n### Error response definition\nMost\
    \ types of errors have the following structure:\n| field | Description \n| --- | --- \n| code | reference\
    \ to the status code of the response\n| message | defines the error type \n| errors | contains an\
    \ array of objects with the description for an error or multiple errors generated.\n\n### Error Types\n\
    \n`4xx` Errors can be thrown for different reasons. The following section describes common shapes\
    \ for the error objects returned.\n\n#### Validation Errors\nValidation errors return a `400` status\
    \ code indicating a `Bad Request`.\n\n| Parameter type | Description \n| --- | --- \n| string | `dob`,\
    \ `email`, `phone`, etc., have formats and possibly character restrictions which must be observed.\
    \ e.g. `phone` must be a 10 character long string that contains only numbers.\n| number | `apr`, `downPayment`,\
    \ `term`, etc., have range requirements which must be observed. e.g. `apr` must be a number between\
    \ [0...1]. \n| integer | `timeInMonths`, `monthlyPayment`, `year`, etc., have range requirements which\
    \ must be observed.  \n\n\n> #### Example Response `400 Bad Request`\n>  ```json\n> {\n>   \"code\"\
    : 400,\n>   \"message\": \"Validation Error\",\n>   \"errors\": [\n>       {\n>         \"description\"\
    : \"Required field \\\"applicant\\\" was not provided.\"\n>       },\n>       {\n>         \"description\"\
    : \"Field \\\"cosigner.email\\\" is invalid: io.\"\n>       }\n>   ]\n> }\n>  ```\n\n\n#### Authorization\
    \ Errors\nAuthorization errors return a `401` status code indicating a `Unauthorized`.\nMost endpoints\
    \ will return some of the following errors in case of an invalid\n(malformed or expired) or absent\
    \ authorization token, indicating that a new \ntoken must be requested.\n\n> #### Example Response\
    \ `401 `\n>  ```json\n> {\n>     \"error\": \"UnauthorizedError: invalid token\"\n> }\n>  ```\n> \
    \ ```json\n> {\n>     \"error\": \"UnauthorizedError: No authorization token was found\"\n> }\n> \
    \ ```\n>  ```json\n> {\n>     \"error\": \"UnauthorizedError: Format is Authorization: Bearer [token]\"\
    \n> }\n>  ```\n>  ```json\n> {\n>     \"error\": \"UnauthorizedError: jwt malformed\"\n> }\n>  ```\n\
    \n#### Not Found Errors\nNot Found errors return a `404` status code indicating a `Not Found`.\n\n\
    > #### Example Response `404 Not found`\n>  ```json\n> {\n>     \"error\": \"Error: Not Found\"\n\
    > }\n>  ```\n\n#### Rate Limiting\nIf the server is receiving an excessive amount of requests from\
    \ a \nparticular user, it may return errors with a `429` status code \nindicating `Too many requests`.\n\
    \n> #### Example Response `429 Too many requests`\n>  ```json\n> {\n>   \"code\": 429,\n>   \"message\"\
    : \"Account limit exceeded.\",\n> }\n>  ```\n\n\n### HTTP 5XX status codes\n| Http Status | Description\
    \ |\n| -- | -- |\n| **500 Internal Server Error** | An unexpected error occurred, preventing successfully\
    \ processing the request. |\n| **503 Service Unavailable** | An AutoFi service is unavailable, preventing\
    \ successfully processing the request. |   \n\n> See the [Hypertext Transfer Protocol (HTTP)](https://datatracker.ietf.org/doc/html/rfc7231)\
    \ or the [MDN docs](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status) for more details.\n\n\
    ### Error Type\n\n#### 503 Service Unavailable\nService unavailable error is returned when our servers\
    \ is not available to process and return a response.\n\n> #### Example Response `503 service unavailable`\n\
    >  ```json\n> {\n>   \"code\": 503,\n>   \"message\": \"Service Unavailable\",\n>   \"errors\": [\n\
    >       {\n>         \"description\": \"Service Unavailable\"\n>       },\n>   ]\n> }\n>  ```\n"
  version: 1.0.0
  x-logo:
    url: https://app.autofi.com/images/email-autofi-logo.png
    backgroundColor: '#FFFFFF'
    altText: AutoFi
    href: /
servers:
- url: https://api.autofi.com
  description: Production server
- url: https://api-uat.autofi.com
  description: Sandbox server
paths:
  /auth/token:
    post:
      security: []
      summary: Request an access token (JWT)
      description: |
        Authenticate with your account's API client credentials to retrieve an access token.

        The access token is required to authorize API requests.
      tags:
      - Authorization
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccessToken'
            example:
              clientId: avWXpEjNfB7QgjH9hs3rokgZVQgUiiG6
              clientSecret: LWFE=QRv4uqcM/Vx*c>HnPQXMj3BWzpMpvgeg[URM>9YT/rZVYKT9tPbuRdvQiAf
      responses:
        '200':
          description: JWT
          content:
            application/json:
              schema:
                type: object
                properties:
                  access_token:
                    type: string
                    description: JSON Web Token format
                  expires_in:
                    type: integer
                    description: number of `seconds` after token issuance the token expires in
                    example: 86400
                  token_type:
                    type: string
                    example: Bearer
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthorizationError'
  /v1/loan-application:
    post:
      security:
      - bearerAuth:
        - create:loanapplications
      summary: |
        Create a new loan application
      description: |
        You can provide a callback URL through the `callbackURL` property. See the callbacks section below for more information.
      tags:
      - Loan Applications
      callbacks:
        createLoanAppCallback:
          '{$request.body#/callbackUrl}':
            post:
              summary: Loan Application callback
              description: "AutoFi REST APIs use callbacks for event notifications, such as lender decisions\
                \ when applying for credit. \nCallbacks are outbound API calls that notify you when an\
                \ event has occurred.  Note: Callbacks do not \nhave a re-try function.\n\n### How to\
                \ use\n\nOn the AutoFi Create Loan Application you can provide the `callbackUrl` property\
                \ with a URL value.  AutoFi will send \nevent notifications to that URL.\n\n### Messages\n\
                \nA JSON notification will be triggered when a new event takes place. For example, an\
                \ event will trigger a notification\nwhen a loan application has been approved or declined\
                \ by a lender. The callback response body contains the same \ninformation as returned\
                \ by the [GET Loan Application](#tag/Loan-Applications/paths/~1v1~1loan-application~1{loanApplicationId}/get)\
                \ \nendpoint.\n\n### Event triggers\n\nEnum: `\"ACCEPTED\"` `\"APPROVED\"` `\"BEGAN_APPLICATION\"\
                ` `\"DECLINED\"`  `\"ERROR\"` `\"FI_COMPLETED\"` `\"PENDING\"` `\"SUBMITTED\"`\n"
              responses:
                '200':
                  description: Callback response body
                  content:
                    application/json:
                      schema:
                        allOf:
                        - $ref: '#/components/schemas/LoanApplicationData'
                        properties:
                          timestamp:
                            type: string
                            format: date-time
                            example: '2022-03-09T16:26:18.284Z'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - applicant
              - callbackUrl
              - dealer
              - offerPreferences
              - vehicle
              properties:
                applicant:
                  allOf:
                  - $ref: '#/components/schemas/DecisioningApplicantInput'
                  properties:
                    email:
                      $ref: '#/components/schemas/EmailInput'
                callbackUrl:
                  type: string
                  example: https://my-domain.com/customers/1/updateCreditApp
                  format: uri
                  minLength: 1
                  description: A valid URL to receive responses when there is a change in state.
                cosigner:
                  allOf:
                  - $ref: '#/components/schemas/DecisioningCoApplicantInput'
                  properties:
                    email:
                      $ref: '#/components/schemas/EmailInput'
                dealer:
                  allOf:
                  - $ref: '#/components/schemas/LoanApplicationDealerInput'
                  properties:
                    code:
                      description: Identification assigned to dealer by AutoFi.
                      type: string
                      pattern: ^[A-Z0-9]{4}$
                      minLength: 4
                      maxLength: 4
                      example: 76KR
                fees:
                  $ref: '#/components/schemas/FinanceFees'
                offerPreferences:
                  allOf:
                  - $ref: '#/components/schemas/DecisioningOfferPreferences'
                  properties:
                    apr:
                      type: number
                      format: float
                      description: Annual percentage rate in decimals e.g. if the apr is 2% this should
                        be 0.02
                    isSubvented:
                      type: boolean
                      description: Indicates that the rate in this offer contains a subvented or special
                        rate. This influences rules relating to markup and rebate compatibility. This
                        only affects the offer if there is an `apr` specified.
                    downPayment:
                      default: 0
                products:
                  type: array
                  items:
                    allOf:
                    - $ref: '#/components/schemas/ProductInput'
                    properties:
                      referenceId:
                        $ref: '#/components/schemas/referenceId'
                rebates:
                  type: array
                  items:
                    $ref: '#/components/schemas/RebateInput'
                referenceId:
                  $ref: '#/components/schemas/schemas-referenceId'
                simulate:
                  $ref: '#/components/schemas/SimulateInput'
                tax:
                  $ref: '#/components/schemas/schemas-tax'
                taxRate:
                  type: number
                  example: 0.07
                  format: float
                  minimum: 0
                  maximum: 1
                  exclusiveMinimum: true
                  exclusiveMaximum: true
                  description: Required if `requestedOfferType` is `LEASE`. Must not be greater than 1.
                    Used to calculate a number of tax values related to a lease.
                tradeIn:
                  allOf:
                  - $ref: '#/components/schemas/LoanApplicationTradeInInput'
                  properties:
                    payoff:
                      type: number
                      format: float
                      minimum: 0
                      maximum: 999999
                      example: 3500.75
                      description: The payoff amount the customer needs to pay to satisfy the terms of
                        their vehicle loan.
                vehicle:
                  allOf:
                  - $ref: '#/components/schemas/DecisioningVehicleInput'
                  properties:
                    bookoutValue:
                      type: number
                      format: float
                      example: 39895.27
                      description: Bookout value to override bookout calculation if `age` is `USED` or
                        `CPO`.
                    modelCode:
                      description: The code for the model provided by the manufacturer. This field is
                        optional but strongly recommended for new vehicles and lease applications since
                        it greatly improves deal accuracy, e.g. determining the correct rebates.
                      type: string
                      example: P8T
                    trim:
                      description: Vehicle trim. This field is optional but strongly recommended for lease
                        applications since it greatly improves deal accuracy, e.g. determining the correct
                        rebates.
                      type: string
                      example: GT
      responses:
        '200':
          description: Loan Application data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoanApplicationResponse'
        '400':
          $ref: '#/components/responses/CreateLoanApplication'
  /v1/loan-application/{loanApplicationId}:
    get:
      security:
      - bearerAuth:
        - read:loanapplications
      summary: Loan application details
      tags:
      - Loan Applications
      parameters:
      - $ref: '#/components/parameters/LoanApplicationIdParam'
      responses:
        '200':
          description: Loan Application data
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LoanApplicationData'
  /v1/loan-application/{loanApplicationId}/externalResources:
    get:
      security:
      - bearerAuth:
        - read:loanapplications
      summary: External resources (experimental)
      description: |
        Collection of resources in external systems that are associated with the loan application. External resources are updated with information about the deal during the loan application process. After the external system has been updated, external resources are available in the response, grouped by the external system type and then by the provider of each system. Currently Dealer Management Systems (DMS) are the only available external system type and the only provider is for the CDK DMS. <strong>This endpoint is still `experimental` and can change in the future.</strong>
      tags:
      - Loan Applications
      parameters:
      - $ref: '#/components/parameters/LoanApplicationIdParam'
      responses:
        '200':
          $ref: '#/components/responses/ExternalResourcesResponse'
  /v1/dealer/lookup:
    post:
      security:
      - bearerAuth:
        - lookup:dealers
      summary: Lookup AutoFi dealers
      tags:
      - Dealers
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - brand
              - oemSalesCodes
              properties:
                brand:
                  allOf:
                  - $ref: '#/components/schemas/brand'
                oemSalesCodes:
                  type: array
                  description: External dealer code assigned by the OEM.
                  items:
                    allOf:
                    - $ref: '#/components/schemas/oemSalesCode'
      responses:
        '200':
          description: Dealer lookup successfully executed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DealerLookup'
        '400':
          $ref: '#/components/responses/DealerLookup400'
  /v1/dealmaker:
    post:
      security:
      - bearerAuth:
        - create:dealmaker
      summary: Create Dealmaker
      description: "<p style=\"display: flex; flex-direction: column\"><img \nsrc=\"http://badges.github.io/stability-badges/dist/experimental.svg\"\
        \ alt=\"Experimental\" \nstyle=\"width: 100%; max-width: 150px\" />\nCreate a new Dealmaker loan\
        \ application.\n</p>"
      tags:
      - Dealmaker
      requestBody:
        $ref: '#/components/requestBodies/CreateDealmakerBody'
      responses:
        '201':
          $ref: '#/components/responses/CreateDealmakerResponse'
        '400':
          $ref: '#/components/responses/CreateDealmaker400Response'
        '409':
          $ref: '#/components/responses/CreateDealmaker409Response'
  /v1/dealmaker/credit-application:
    post:
      security:
      - bearerAuth:
        - create:dealmakercredit
      summary: Create Credit App
      description: "<p style=\"display: flex; flex-direction: column\"><img \nsrc=\"http://badges.github.io/stability-badges/dist/experimental.svg\"\
        \ alt=\"Experimental\" \nstyle=\"width: 100%; max-width: 150px\" />\nCreate a new Dealmaker loan\
        \ application that starts at the credit application. Use this endpoint when the\nconsumer has\
        \ already selected a vehicle and is ready to apply for credit.\n<em>NOTE: Only retail finance\
        \ is currently supported. This is experimental and can change in the future.</em>\n</p>"
      tags:
      - Dealmaker
      callbacks:
        createLoanAppCallback:
          '{$request.body#/callbackUrl}':
            post:
              summary: Loan Application callback
              description: "Dealmaker loan applications utilize the same callbacks sent by the Create\
                \ Loan Application endpoint.\n\nAutoFi REST APIs use callbacks for event notifications,\
                \ such as lender decisions when applying for credit. \nCallbacks are outbound API calls\
                \ that notify you when an event has occurred.  Note: Callbacks do not \nhave a re-try\
                \ function.\n\n### How to use\n\nOn the AutoFi Create Loan Application you can provide\
                \ the `callbackUrl` property with a URL value.  AutoFi will send \nevent notifications\
                \ to that URL.\n\n### Messages\n\nA JSON notification will be triggered when a new event\
                \ takes place. For example, an event will trigger a notification\nwhen a loan application\
                \ has been approved or declined by a lender. The callback response body contains the same\
                \ \ninformation as returned by the [GET Loan Application](#tag/Loan-Applications/paths/~1v1~1loan-application~1{loanApplicationId}/get)\
                \ \nendpoint.\n\n### Event triggers\n\nEnum: `\"ACCEPTED\"` `\"APPROVED\"` `\"BEGAN_APPLICATION\"\
                ` `\"DECLINED\"`  `\"ERROR\"` `\"FI_COMPLETED\"` `\"PENDING\"` `\"SUBMITTED\"`\n"
              responses:
                '200':
                  description: Callback response body
                  content:
                    application/json:
                      schema:
                        allOf:
                        - $ref: '#/components/schemas/LoanApplicationData'
                        properties:
                          timestamp:
                            type: string
                            format: date-time
                            example: '2022-03-09T16:26:18.284Z'
      requestBody:
        $ref: '#/components/requestBodies/CreateDealmakerCreditAppBody'
      responses:
        '201':
          $ref: '#/components/responses/CreateDealmakerCreditAppResponse'
        '400':
          $ref: '#/components/responses/CreateDealmakerCreditApp400Response'
        '409':
          $ref: '#/components/responses/CreateDealmakerCreditApp409Response'
  /v1/estimate/cash:
    post:
      security:
      - bearerAuth:
        - create:estimate
      summary: Cash
      description: |
        Use this endpoint to calculate estimated payments for a `cash` car deal.
      tags:
      - Calculate Payment
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CashEstimateBody'
      responses:
        '200':
          description: Payments successfully calculated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CashEstimateResponse'
        '400':
          $ref: '#/components/responses/CashEstimate400'
  /v1/estimate/finance:
    post:
      security:
      - bearerAuth:
        - create:estimate
      summary: Finance
      description: |
        Use this endpoint to calculate estimated payments for a `finance` car deal.
      tags:
      - Calculate Payment
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FinanceEstimateBody'
      responses:
        '200':
          description: Payments successfully calculated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FinanceEstimateResponse'
        '400':
          $ref: '#/components/responses/FinanceEstimate400'
  /v1/estimate/lease:
    post:
      security:
      - bearerAuth:
        - create:estimate
      summary: Lease
      description: |
        Use this endpoint to calculate estimated payments for a `lease` car deal.
      tags:
      - Calculate Payment
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LeaseEstimateBody'
      responses:
        '200':
          description: Payments successfully calculated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LeaseEstimateResponse'
        '400':
          $ref: '#/components/responses/LeaseEstimate400'
  /v1/prequalification:
    post:
      security:
      - bearerAuth:
        - create:prequalification
      summary: Prequalification
      description: "Prequalification can be utilized to help identify how much the user can afford. \n\
        This endpoint provides the maximum monthly payment, maximum loan amount, and a credit score range.\n"
      tags:
      - Prequalification
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - applicant
              properties:
                applicant:
                  type: object
                  required:
                  - name
                  - address
                  - phone
                  - email
                  - employmentIncome
                  properties:
                    name:
                      $ref: '#/components/schemas/ApplicantFullNameInput'
                    address:
                      required:
                      - street
                      - city
                      - state
                      - zip
                      type: object
                      properties:
                        street:
                          example: 1234 Main St
                          type: string
                        street2:
                          example: Apt B
                          type: string
                        city:
                          example: Madison
                          type: string
                        state:
                          example: WI
                          type: string
                        zip:
                          example: '53714'
                          type: string
                    phone:
                      type: string
                      example: '5554443333'
                      maxLength: 10
                      minLength: 10
                      pattern: ^[2-9][0-9]{9}$
                    email:
                      $ref: '#/components/schemas/EmailInput'
                    employmentIncome:
                      type: number
                      format: float
                      minimum: 0
                      example: 10000
                      description: Gross monthly income from employment.
      responses:
        '200':
          description: Prequalification successfully calculated.
          content:
            application/json:
              schema:
                type: object
                required:
                - prequalification
                properties:
                  prequalification:
                    type: object
                    properties:
                      maxLoanAmount:
                        description: The maximum loan that the applicant can afford.
                        type: number
                        format: float
                      maxMonthlyPayment:
                        description: The maximum monthly payment that the applicant can afford.
                        type: number
                        format: float
                      ficoRange:
                        description: Deprecated in favor of appropriately named `creditScoreRange` field.
                        deprecated: true
                        type: object
                        properties:
                          top:
                            type: integer
                          bottom:
                            type: integer
                      creditScoreRange:
                        type: object
                        properties:
                          top:
                            type: integer
                          bottom:
                            type: integer
        '400':
          $ref: '#/components/responses/BadRequestPrequal'
        '404':
          $ref: '#/components/responses/NotFoundPrequal'
        '503':
          $ref: '#/components/responses/ServiceUnavailablePrequal'
security:
- bearerAuth: []
components:
  parameters:
    LoanApplicationIdParam:
      in: path
      name: loanApplicationId
      schema:
        type: string
        minLength: 24
        maxLength: 24
        example: 6148d994e93d8a0018be1234
      required: true
      description: The `loanApplicationId` in the response when the loan application was created.
  securitySchemes:
    bearerAuth:
      description: |
        Get access to data while protecting your account credentials.
      type: http
      scheme: bearer
      bearerFormat: Bearer {token}
  schemas:
    AccessToken:
      type: object
      required:
      - clientId
      - clientSecret
      properties:
        clientId:
          type: string
        clientSecret:
          type: string
    Dealer:
      description: |
        Describes the dealer the vehicle to be financed is associated with
      type: object
      required:
      - name
      - referenceId
      - address
      - phone
      - routeOneId
      - setfDealerNumber
      properties:
        name:
          type: string
          example: AutoFi Dealership One
        referenceId:
          type: string
          description: Unique identifier for `dealer` in your system. Required for creating/updating a
            dealer.
          example: A00001
        address:
          type: object
          required:
          - street
          - city
          - state
          - zip
          properties:
            street:
              type: string
              example: 440 De Haro Street
            street2:
              type: string
              example: '200'
            city:
              type: string
              example: San Francisco
            state:
              type: string
              description: Two character code for state (US) or province (Canada).
              example: CA
            zip:
              type: string
              description: 5 digit zip (US) / 6 character postal code (Canada).
              example: '94107'
            country:
              type: string
              enum:
              - CA
              - US
              default: US
        logoUrl:
          type: string
          format: uri
          description: A valid url to display the dealer's logo.
          example: https://hostname/file_name
        phone:
          type: string
          description: A valid 10 digit phone number.
          example: '5555555555'
        routeOneId:
          type: string
          description: Route One ID for dealer.
          example: R1XYZ
        setfDealerNumber:
          type: string
          description: SETF's identification number for the dealer. To be used when submitting the application.
          example: <SETF dealer number>
        fees:
          type: array
          items:
            type: object
            required:
            - code
            - amount
            - category
            properties:
              code:
                type: string
                enum:
                - holdfee
                - taxfee
                - other
                - tax
                - fee
                - titlereg
                - docfee
                - dealerfee
                - acqfee
                - tirefee
                - saleprice
              category:
                type: string
                description: Name of the fee.
              amount:
                type: number
                format: float
              offerType:
                type: string
                enum:
                - FINANCE
                - LEASE
                - BOTH
                default: FINANCE
              specialPlacement:
                description: Only used for lease fees. Defaults to NONE
                type: string
                enum:
                - NONE
                - GROSSCAP
                - DUEATSIGNING
                default: NONE
              feeType:
                type: string
                default: FLAT
                enum:
                - FLAT
                - PCT
        markup:
          type: array
          items:
            type: object
            required:
            - method
   

# --- truncated at 32 KB (199 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/autofi/refs/heads/main/openapi/autofi-api-openapi.yml