Skip to main content
This guide shows you how to create an application using the Applications API. Applications allow you to create new leases, accept move-in payments, and set up contracts.

Prerequisites

Before creating an application, ensure you have:
  • A unit ID for the property.
  • An application configuration ID.
  • Customer information (email at minimum).

Application types

Yorlet supports four application types, each designed for different scenarios:
TypeDescriptionUse case
standardFull application with payments, rent collection, and contractsNew tenancies
renewalRefresh existing tenancies with new termsExtending current leases
active_tenancyCollect rental payments for existing tenanciesMid-tenancy onboarding
let_onlyFull application without rent collection setupLandlord-managed billing

Create a customer

Before creating an application, you need a customer. You can either create a customer using the Customers API or by providing the applicants.customer_data object in the application request.
Create a customer first, then reference their ID in the application.
Create a customer
curl https://api.yorlet.com/v1/customers \
  -H "Authorization: Bearer {{API_KEY}}" \
  -H "Content-Type: application/json" \
  -d '{
        "email": "[email protected]",
        "name": "Jane Doe",
        "phone": "+441234567890"
      }'
Response
{
  "id": "cus_lrhplff1u4ZhIPSU",
  "object": "customer",
  "email": "[email protected]",
  "name": "Jane Doe"
}
Use the customer ID in your application request with applicants.customer.

Building an application request

You can build an application request by adding the required parameters and configuring the optional parameters as needed.

Required parameters

ParameterTypeDescription
application_configurationstringThe identifier of the application configuration to create the application with
typestringApplication type: standard, renewal, active_tenancy, or let_only
unitstringThe unit ID for the property
applicantsarrayArray of applicant objects (min 1, max 10)
subscription_dataobjectRent collection configuration

Configure applicants

The applicants array defines who is applying for the tenancy. Each applicant must have either a customer ID or customer_data object, plus a share_of_rent.
Applicants array
{
  "applicants": [
    {
      "customer": "cus_existing123",
      "share_of_rent": 50,
      "lead_tenant": true,
      "requirements": {
        "deposit": true,
        "guarantor": false,
        "verification_session": true
      }
    },
    {
      "customer_data": {
        "email": "[email protected]",
        "name": "John Smith",
        "legal": {
          "first_name": "John",
          "last_name": "Smith",
          "dob": {
            "day": 15,
            "month": 6,
            "year": 1990
          }
        },
        "address": {
          "line1": "10 High Street",
          "city": "London",
          "postal_code": "SW1A 1AA",
          "country": "GB"
        }
      },
      "share_of_rent": 50,
      "lead_tenant": false,
      "permitted_occupier": false,
      "requirements": {
        "deposit": true,
        "guarantor": false,
        "pre_qualification": true,
        "verification_session": false
      }
    }
  ]
}

Applicant parameters

ParameterTypeRequiredDescription
share_of_rentnumberYesPercentage of rent this applicant pays (0-100, all must total 100)
customerstringConditionalExisting customer ID
customer_dataobjectConditionalNew customer details (required if no customer)
lead_tenantbooleanNoWhether this applicant is the lead tenant
permitted_occupierbooleanNoWhether this person is a permitted occupier (not on the contract)
reference_dataobjectNoReference configuration (see Referencing)
requirementsobjectNoRequirements configuration for the applicant

Customer data parameters

ParameterTypeRequiredDescription
emailstringYesCustomer email address
namestringNoCustomer display name
phonestringNoCustomer phone number
legalobjectNoLegal information (first_name, last_name, dob) for contract generation
addressobjectNoCustomer address (line1, line2, city, state, postal_code, country)
metadataobjectNoKey-value pairs for storing additional information

Requirements parameters

The requirements object controls which steps the applicant must complete.
ParameterTypeDescription
depositbooleanWhether to collect a deposit from the applicant
guarantorbooleanWhether the applicant needs a guarantor
pre_qualificationbooleanWhether the applicant needs to complete pre-qualification
verification_sessionbooleanWhether the applicant needs a verification session

Configure subscription data

The subscription_data object defines how rent is collected after the application completes. Only collection_method and interval are required.
Subscription data
{
  "subscription_data": {
    "collection_method": "charge_automatically",
    "interval": "month",
    "interval_count": 1,
    "days_until_due": 14,
    "items": [
      {
        "description": "Monthly Rent",
        "type": "rent",
        "unit": "unit_123",
        "price_data": {
          "amount": 150000,
          "currency": "gbp",
          "tax_percent": 0
        }
      },
      {
        "description": "Parking Space",
        "type": "charge",
        "price_data": {
          "amount": 5000,
          "currency": "gbp",
          "tax_percent": 0
        }
      }
    ],
    "start_date": 1712716800,
    "end_date": 1744252800
  }
}

Subscription parameters

ParameterTypeRequiredDescription
collection_methodstringYescharge_automatically or send_invoice
intervalstringYesBilling frequency: month, week, custom, or upfront
interval_countintegerNoNumber of intervals between billing (e.g., 1 for monthly)
itemsarrayNoLine items for each billing period (min 1, max 10)
start_datetimestampNoWhen billing begins (Unix timestamp)
end_datetimestampNoWhen billing ends (Unix timestamp)
start_date_configobjectNoDate object (day, month, year) as alternative to start_date
end_date_configobjectNoDate object (day, month, year) as alternative to end_date
billing_anchortimestampNoDate to anchor recurring billing (Unix timestamp)
billing_anchor_configobjectNoAnchor config with day_of_month (1-31) as alternative to billing_anchor
days_until_dueintegerNoDays before invoice is due
days_before_collectionintegerNoDays before billing date to create invoice (0-7)
couponstringNoCoupon ID to apply to the subscription
first_invoice_creationstringNoSet to immediately to create the first invoice right away
add_invoice_itemsarrayNoOne-time invoice items added to the first invoice (max 10)
phasesarrayNoSubscription phases for changing items over time
custom_fieldsarrayNoCustom fields on invoices (max 4, each with name and value)

Subscription item parameters

Each item in subscription_data.items requires price_data and type.
ParameterTypeRequiredDescription
typestringYesrent, charge, or product
price_dataobjectYesPricing object with amount, currency, and tax_percent (all required)
descriptionstringNoDisplay description for the line item
unitstringNoUnit ID (required for rent type items)
pricestringNoPrice ID (alternative to price_data)
proration_behaviorstringNocreate_prorations or none
schedulearrayNoSchedule for changing the item amount over time
tax_ratestringNoTax rate ID
transfer_behaviorstringNoautomatic, owner, or none
transfer_destinationstringNoOwner ID for transfer (only when transfer_behavior is owner)
metadataobjectNoKey-value pairs for storing additional information

Add invoice items

Use add_invoice_items to include one-time charges on the first invoice.
Add invoice items
{
  "subscription_data": {
    "collection_method": "charge_automatically",
    "interval": "month",
    "items": [...],
    "add_invoice_items": [
      {
        "amount": 25000,
        "currency": "gbp",
        "description": "Setup fee",
        "type": "charge",
        "tax_percent": 0,
        "transfer_behavior": "automatic"
      }
    ]
  }
}

Subscription phases

Use phases to schedule changes to subscription items at specific dates.
Subscription phases
{
  "subscription_data": {
    "collection_method": "charge_automatically",
    "interval": "month",
    "items": [
      {
        "description": "Monthly Rent",
        "type": "rent",
        "unit": "unit_123",
        "price_data": {
          "amount": 150000,
          "currency": "gbp",
          "tax_percent": 0
        }
      }
    ],
    "phases": [
      {
        "start_date": 1744252800,
        "items": [
          {
            "description": "Monthly Rent (Year 2)",
            "type": "rent",
            "unit": "unit_123",
            "price_data": {
              "amount": 160000,
              "currency": "gbp",
              "tax_percent": 0
            }
          }
        ]
      }
    ]
  }
}

Configure deposits

Set up security deposit collection using the deposit_amount parameter.
Deposit configuration
{
  "deposit_amount": 75000
}
ParameterTypeDescription
deposit_amountintegerDeposit amount in smallest currency unit (1-99999900)
Use the applicant-level requirements.deposit parameter to control which applicants are required to pay a deposit.

Configure contracts

Control contract generation and signing with the contract_template and contract_options parameters.
Contract configuration
{
  "contract_template": "ct_abc123",
  "contract_options": {
    "automatic_counter_signature": true,
    "owner_signature_required": false,
    "send_applicant_email": true,
    "send_owner_completion_email": false,
    "legal_entity": "le_abc123"
  }
}
The contract_template parameter is required when the application type is standard, renewal, or let_only.

Contract parameters

ParameterTypeDescription
contract_templatestringContract template ID
contract_options.automatic_counter_signaturebooleanAuto-sign contract on landlord’s behalf
contract_options.owner_signature_requiredbooleanRequire property owner to sign
contract_options.send_applicant_emailbooleanEmail contract to applicants
contract_options.send_owner_completion_emailbooleanSend contract to owner on completion
contract_options.legal_entitystringLegal entity ID for the contract

Configure application payments

Collect payments during the application process.

Holding fee

Holding fee
{
  "holding_fee_amount": 35000
}
The holding fee is collected early in the application to secure the tenancy. Amount must be between 1 and 99,999,900 (in smallest currency unit).

Advance rent

Advance rent
{
  "advance_rent_amount": 150000
}
Collect rent in advance as part of the application. Amount must be between 1 and 99,999,900 (in smallest currency unit).

Partial payments

Configure partial upfront payments that create credit grants for future rent:
Partial payment
{
  "partial_payment": {
    "amount": 300000,
    "description": "First two months rent"
  }
}
Both amount and description are required when using partial payments.
Partial payments require exactly one applicant with share_of_rent of 100%.

Configure dates

Using timestamps

Provide dates as Unix timestamps in UTC:
Date timestamps
{
  "start_date": 1712716800,
  "end_date": 1744252800,
  "move_in_date": 1712716800,
  "move_out_date": 1744252800
}

Using date configuration objects

Alternatively, use date configuration objects for automatic calculation:
Date configuration
{
  "start_date_config": {
    "day": 1,
    "month": 4,
    "year": 2025
  },
  "end_date_config": {
    "day": 31,
    "month": 3,
    "year": 2026
  }
}
When using end_date_config, Yorlet automatically sets the time to 23:59:59 to include the full day.

Date parameters

ParameterTypeDescription
start_datetimestampTenancy start date
end_datetimestampTenancy end date (null for periodic tenancy)
start_date_configobjectDate object (day, month, year) as alternative to start_date
end_date_configobjectDate object (day, month, year) as alternative to end_date
move_in_datetimestampActual move-in date (useful for short lets)
move_out_datetimestampActual move-out date (useful for short lets)

Referencing

Enable tenant referencing during the application process.
Automatic referencing
{
  "applicants": [
    {
      "customer_data": {
        "email": "[email protected]"
      },
      "share_of_rent": 100,
      "reference_data": {
        "automatic_reference": {
          "enabled": true,
          "provider": "canopy"
        }
      }
    }
  ]
}

Reference providers

ProviderDescription
advance_rentAdvance Rent referencing
canopyCanopy referencing
homeletHomeLet referencing
let_allianceLet Alliance referencing

Additional options

Accept on create

For active_tenancy applications, set accept to true to immediately accept the application when created.
Accept on create
{
  "type": "active_tenancy",
  "accept": true
}

End behavior

Control what happens when the tenancy reaches its end date:
End behavior
{
  "end_behavior": "roll"
}
ValueDescription
completeMark tenancy as complete (requires an end date)
rollConvert to periodic tenancy

Create subscriptions

Control whether subscriptions are created for the application. Defaults to true.
Skip subscription creation
{
  "create_subscriptions": false
}

Owner options

Configure owner-specific settings:
Owner options
{
  "owner_options": {
    "apply_unit_fees": true
  }
}

Update unit rent

Set update_unit_rent to true to update the unit’s rent amount with the pricing used in the application:
Update unit rent
{
  "update_unit_rent": true
}

Metadata

Attach custom data to the application:
Metadata
{
  "metadata": {
    "internal_ref": "APP-2025-001",
    "source": "website"
  }
}

Create an application

Here’s a comprehensive example with commonly used parameters:
Complete application example
curl https://api.yorlet.com/v1/applications \
  -H "Authorization: Bearer {{API_KEY}}" \
  -H "Content-Type: application/json" \
  -d '{
        "application_configuration": "appconfig_abc123",
        "type": "standard",
        "unit": "unit_123",
        "applicants": [
          {
            "customer_data": {
              "email": "[email protected]",
              "name": "Jane Doe",
              "phone": "+441234567890",
              "legal": {
                "first_name": "Jane",
                "last_name": "Doe",
                "dob": {
                  "day": 15,
                  "month": 6,
                  "year": 1990
                }
              }
            },
            "share_of_rent": 100,
            "lead_tenant": true,
            "reference_data": {
              "automatic_reference": {
                "enabled": true,
                "provider": "canopy"
              }
            },
            "requirements": {
              "deposit": true,
              "guarantor": false,
              "verification_session": true
            }
          }
        ],
        "start_date": 1712716800,
        "end_date": 1744252800,
        "subscription_data": {
          "collection_method": "charge_automatically",
          "interval": "month",
          "interval_count": 1,
          "items": [
            {
              "description": "Monthly Rent",
              "type": "rent",
              "unit": "unit_123",
              "price_data": {
                "amount": 150000,
                "currency": "gbp",
                "tax_percent": 0
              }
            }
          ]
        },
        "holding_fee_amount": 35000,
        "deposit_amount": 75000,
        "contract_template": "ct_abc123",
        "contract_options": {
          "automatic_counter_signature": true,
          "send_applicant_email": true
        },
        "end_behavior": "roll",
        "send_email": true,
        "metadata": {
          "source": "api_integration"
        }
      }'
A successful request returns the application object:
Example response
{
  "id": "app_lrhplff1u4ZhIPSU",
  "object": "application",
  "status": "pending",
  "type": "standard",
  "unit": "unit_123",
  "application_configuration": "appconfig_abc123",
  "deposit_amount": 75000,
  "holding_fee_amount": 35000,
  "subscription_data": {
    "collection_method": "charge_automatically",
    "interval": "month",
    "interval_count": 1,
    "items": [...]
  }
}

Next steps

After creating an application:
  1. Send to applicant - If send_email is true, applicants receive the application portal link automatically.
  2. Monitor progress - Use webhooks to track application events.
  3. Complete the application - The application completes based on the steps defined in the application configuration.
  4. Retrieve subscriptions - Listen for subscription.created events to get the subscription IDs.

Retrieve the subscription

After the application completes, a subscription is created asynchronously using the subscription_data object. To retrieve the subscription ID, listen for the subscription.created webhook event.
subscription.created event
{
  "id": "evt_abc123",
  "object": "event",
  "type": "subscription.created",
  "data": {
    "object": {
      "id": "sub_lrhplff1u4ZhIPSU",
      "object": "subscription",
      "application": "app_lrhplff1u4ZhIPSU",
      "customer": "cus_abc123",
      "status": "scheduled",
      // ... other fields on the subscription object
    }
  }
}
The event payload includes:
FieldDescription
data.object.idThe subscription ID
data.object.applicationThe application ID that created this subscription
data.object.customerThe customer ID associated with the subscription
Use the application and customer fields to tie the subscription back to your original application request.
For applications with multiple applicants, a separate subscription is created for each applicant based on their share_of_rent. You will receive a subscription.created event for each subscription.

(Optional) Create a payment method session

In some instances, the application will automatically complete without the applicant needing to visit the application portal. For example, if the application type is set to active_tenancy, the application will automatically complete when created. If you want to collect a payment method from the applicant, you can create a Payment Method Session and associate it with the subscription you retrieved in the subscription.created event.