{"openapi":"3.0.0","info":{"version":"v0","title":"Database API","description":"\n  # API Overview\n\n  The API utilizes a [RESTful](https://en.wikipedia.org/wiki/Representational_state_transfer) architecture, allowing you to query and manage data from the AppFolio ecosystem. All API requests and responses are formatted in `application/json`, and HTTP Basic Auth or OAuth Client Credentials is used to verify a user's identity. The base URL for all API requests is `https://api.appfolio.com/api/v0/{endpoint}`.\n\n  To kick start your API usage, we recommend diving into our *Getting Started* section(s), depending on your selected authentication flow. Depending on your selected authentication flow, this section takes you through a standard API use case. Review the *API Best Practices* section to optimize your API usage and ensure seamless integration into your application.\n\n  # Authentication\n\n    We support two authentication methods for accessing the API:\n\n  1. OAuth 2.0 Client Credentials\n  2. HTTP Basic Authentication (Legacy)\n\n  # OAuth 2.0 Client Credentials - BETA\n\n  **BETA - This feature may have limitations or unexpected behavior as we continue to improve it based on customer feedback.**\n\n  OAuth 2.0 Client Credentials is a token-based authentication system that obtains credentials, validates them to generate an access token, and then uses that token for subsequent API requests.\n\n  Our OAuth implementation introduced additional per-attribute and per-database scopes. With OAuth you'll benefit from:\n\n  - Ability to generate multiple credentials\n  - Scoped granular access per credential, restricting the endpoints and attributes accessible by a credential\n  - Enhanced security through temporary access tokens that expire after 5 minutes\n  - Ability to assign a credential to a specific user\n\n  ### Required Headers\n\n  | Name                    | Format | Value                   |\n  |-------------------------|--------|-------------------------|\n  | Authorization           | string | Bearer `{access_token}` |\n  | X-AppFolio-Developer-ID | string | `{YOUR-DEVELOPER-ID}`   |\n  | X-AppFolio-Database-ID   | string | `{YOUR-DATABASE-ID}`   |\n\n\n  ## Getting Started: OAuth Client Credentials\n\n  1. **Get Your OAuth Credentials**\n  - Beneath API Credentials Select OAuth\n  - Select New API Credential to generate your OAuth Credential\n  - Enter an OAuth Credential Name \u0026 Purpose\n  - Select the Databases the credential can access\n  - Assign the credential to either All Administrators and Production Users or a specific user\n  - Specify which endpoints and attributes this credential will have access to\n  - Upon creation, securely store your new OAuth generated credentials consisting of a Client ID and Client Secret\n\n  2. **Get Your Developer ID and Database Id**\n  - Navigate to your newly created credential\n  - Save the value of the Developer ID at the top of the page for later reference\n  - Save the Database ID to be used in your API Requests\n\n  3. **Request an Access Token via cURL**\n\n  ```\n  curl -X POST 'https://api.appfolio.com/oauth/token' \\\n  --header 'Content-Type: application/x-www-form-urlencoded' \\\n  --data-urlencode 'grant_type=client_credentials' \\\n  --data-urlencode 'client_id={YOUR-CLIENT-ID}' \\\n  --data-urlencode 'client_secret={YOUR-CLIENT-SECRET}'\n  ```\n  Replace in the above command:\n\n  - `{YOUR-CLIENT-ID}` with your Client ID\n  - `{YOUR-CLIENT-SECRET}` with your Client Secret\n\n\n4.  Use the Access Token in your API Requests, which includes the three required headers. \n\n\n  ```\n  curl -g --request GET 'https://api.appfolio.com/api/v0{resource}' \\\n  --header 'X-AppFolio-Developer-ID: {YOUR-DEVELOPER-ID}' \\\n  --header 'X-AppFolio-Database-ID: {YOUR-DATABASE-ID}' \\\n  --header 'Authorization: Bearer {YOUR-ACCESS-TOKEN}'\n  ```\n\nReplace in the above command:\n\n- `{YOUR-DEVELOPER-ID}` with your Developer ID\n- `{YOUR-DATABASE-ID}` with your Database ID\n- `{YOUR-ACCESS-TOKEN}` with the access token obtained from Step 3\n\n**Note**: Access tokens expire after 5 minutes. Request a new token when it expires. When writing your integration code to refresh the API token, use the value in the access token request: `expires_in` in seconds. This value is currently 5 minutes but is subject to change.\n\n  # HTTP Basic Authentication (Legacy)\n\n  HTTP Basic Authentication is a simple authentication scheme where credentials (Client ID and Client Secret) are encoded in Base64 format and included in each API request's header, requiring separate credential pairs for each customer database you need to access. While still supported, Basic Authentication requires:\n\n  - Separate credentials for each customer database\n  - Manual onboarding process for each new customer\n  - Storing permanent credentials securely\n  - Managing multiple sets of credentials across different customer databases\n\n  ### Required Headers\n\n  | Name                    | Format  | Value                    |\n  |-------------------------|---------|--------------------------|\n  | Authorization           | string  | Basic `{ENCODED-STRING}` |\n  | X-AppFolio-Developer-ID | string  | `{YOUR-DEVELOPER-ID}`    |\n\n  ### **Migration Note**\n\nLegacy Basic Auth credentials will remain active, allowing you to transition to OAuth at your own pace. We strongly recommend adopting OAuth for new integrations and planning to migrate existing integrations to take advantage of its improved security and simplified credential management. If you need to maintain an existing integration, see the OAuth Client Credentials Guide or the HTTP Basic Auth Guide for details on implementation.\n\n\n## Getting Started: HTTP Basic Authentication (Legacy)\n\n1. Get Your Developer ID \n\n- Select your account name → Admin → Developer ID in the Developer Details card\n\n2. Get Your Basic Auth Credentials \n\n- Beneath **API Credentials**, select **Basic Auth**\n- Generate and securely store your **Client Secret** on the same row by selecting **Generate a Client Secret**. Store this value in a safe place.\n\n3. Generate the Base64 Encoded Credentials \n\n- For **Mac** users, paste the following command with your Client ID and Client Secret in **Terminal**:\n\n```\necho -n \"{ClientID}:{ClientSecret}\" | base64\n```\n- For **Windows** users, paste the following command with your Client ID and Client Secret in **Windows Command Prompt**:\n\n```\npowershell \"[convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes(\"{ClientID}:{ClientSecret}\"))\"\n```\n\nReplace in the above commands:\n\n- `{ClientID}` with your Client ID\n- `{ClientSecret}` with your Client Secret\n\n4. Make an API Request\n\n```\ncurl -g --request GET 'https://api.appfolio.com/api/v0/{resource}/' \\\n--header 'X-AppFolio-Developer-ID: {YOUR-DEVELOPER-ID}' \\\n--header 'Authorization: Basic {YOUR-ENCODED-STRING}'\n```\n\nReplace in the above command:\n\n- `{YOUR-DEVELOPER-ID}` with your Developer ID\n- `{YOUR-ENCODED-STRING}` with the value returned from step 3\n- `{resource}` with the desired resource (for example, properties, tenants, or charges)\n\n**Note**: You'll need separate credentials for each customer database when using Basic Auth.\n\n# Rate Limits\n\n  To prevent network congestion and avoid `429` **Too Many Requests** errors, we recommend regulating or staggering the rate of your requests. All endpoints have per-second, per-minute and per-hour global rate limits for each set of credentials.\u003cbr\u003e\n  Currently, the rate limits are as follows:\n\n  - **8 requests per second, 256 requests per minute, and 4096 requests per hour**\n\n  Some endpoints have a separate, stricter rate limit:\n\n  - The **General Ledger Details** endpoint (`/gl_details`) is limited to **5 requests per 15 seconds**.\n  - The **Jobs** endpoint (`/jobs`) is limited to **5 requests per 15 seconds**.\n\n  \n\n# Error Codes\n\nThe API returns HTTP status codes. The following error codes are possible. \n\n| Error Code | Text                      | Description                                                                                                            |\n|------------|---------------------------|------------------------------------------------------------------------------------------------------------------------|\n| `400`      | Bad Request               | The request was not processed due to invalid syntax.                                                                   |\n| `401`      | Unauthorized              | HTTP Basic: Access denied.                                                                                             |\n| `403`      | Forbidden                 | The developer has insufficient permissions to access this API endpoint.                                                |\n| `404`      | Not Found                 | The requested resource could not be found.                                                                             |\n| `409`      | Conflict                  | The request conflicts with the current state of the resource. Resolve the conflict and retry.                          |\n| `422`      | Unprocessable Entity      | The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values. |\n| `429`      | Too Many Requests         | The developer has sent too many requests.                                                                              |\n| `500`      | Unexpected Error          | The server encountered an unexpected condition that prevented a successful request. This is usually a temporary state. |\n| `503`      | Service Unavailable       | The server cannot handle the request due to overload or maintenance. Please try again later.                           |\n| `533`      | Data Unavailable          | Data is currently unavailable. Please try again later.                                                                 |\n| `701`      | Invalid Credential        | The customer has restricted access to their data by disabling their API integration.                                   |\n\n# API Best Practices\n\nTo maximize efficiency and ensure the reliability of your integration with the API, review the following best practices.\n\n## Date and Time Formatting\n\nOur API strictly adheres to the \u003ca href=\"https://en.wikipedia.org/wiki/ISO_8601\" target=\"https://en.wikipedia.org/wiki/ISO_8601\"\u003eISO 8601\u003c/a\u003e format for `\u003cdate-time\u003e` representation, which follows the pattern `YYYY-MM-DDTHH:mm:ssZ` for date and time, where \"T\" separates the date and time components, and \"Z\" indicates Coordinated Universal Time (UTC). This global standard ensures clarity and consistency across different systems and programming languages. By following ISO 8601, developers can avoid ambiguity and facilitate seamless integration with our API.\n\n`YYYY-MM-DDThh:mm:ssZ`\n\n- `YYYY` is the four-digit year\n- `MM` is the two-digit month\n- `DD` is the two-digit day\n- `T` separates the date and time components\n- `hh` is the two-digit hour\n- `mm` is the two-digit minute\n- `ss` is the two-digit second\n- `Z` indicates Coordinated Universal Time (UTC)\n\n- `2022-06-00T12:00:00Z` is equivalent to June 1st, 2022, at 12:00:00 PM UTC.\n\n## Deprecation\n\nWhen reading the API documentation you will notice attributes marked as **Deprecated**. When an attribute or endpoint is marked as **Deprecated**, we no longer recommend using it due to changes in the API.\n\nAny new API users should not use deprecated attributes, and existing API users should consider transitioning to updated attributes or endpoints. When a new API version is released in the future, the deprecated attributes or endpoints will be removed entirely.\n\n## Filtering and Pagination\n\nTo ensure the proper utilization of the `LastUpdatedAt` query parameter, we recommend the following best practices:\n\n- The `LastUpdatedAt` attribute indicates the date of the most recent update to an object in the AppFolio Property Manager. However, changes may not always be visible to API users, as they could involve internal attributes or attributes that are inaccessible to certain users. API users should not make assumptions about what changed on an object based solely on the fact that `LastUpdatedAt` has changed. Rather, they should compare the changed object's attributes to the last known attributes to discover the change if needed.\n\n- For the first import using a given endpoint, you may want to set the `LastUpdatedAt` filter to a date in the past (e.g. `filters[LastUpdatedAtFrom]=1970-01-01T00:00:00Z`) and use the response to sync up your internal records. If this response has more than one page, you will need to fetch the following pages as well.\nFor subsequent requests following the initial import, avoid setting arbitrary parameters for `LastUpdatedAt` and instead set this value to the last time you made a successful request. This will improve performance by only retrieving the data you need, and subsequently reducing the time it takes to receive the response.\n\nTo ensure the proper utilization of the `page` query parameter, we recommend the following best practices:\n\n- If possible, use the default value for the `page` query parameter. The default values were carefully selected to ensure that unnecessarily large requests are not sent. The default value for the `page` size parameter is 1000, but this might differ per endpoint. The page size parameter can be modified to a smaller number if desired. If page sizes larger than the default page size parameter are requested,\npage size will be reduced to the default value. AppFolio can reduce or increase the default page size parameter for a given endpoint.\n\nThe following is an example of a valid request with the default values for the `page` query parameter:\n\n- `https://api.appfolio.com/api/v0/{resource}?filters[LastUpdatedAtFrom]=1970-01-01T00:00:00Z\u0026page[number]=1\u0026page[size]=1000`\n\n\n\n## Outages\n\nAs with any API, errors and exceptions will occur. For example, there may be a connection error between servers or a rare outage. Always watch for errors and exceptions, and if they do occur, log the request in as much detail as possible. This will reduce response times in the event that you need to contact support.\n- In the event of a `503` **Service Unavailable** error, we suggest implementing [Exponential Back Off](https://en.wikipedia.org/wiki/Exponential_backoff). This ensures that your server does not generate excessive load.\n- A `533` **Data Unavailable** error typically occurs when a database is down due to database migrations and/or scheduled maintenance. Scheduled maintenance errors will typically resolve within five minutes, and will occur between 9PM and 4AM PST. \n\n## Retry-After Header: Retrying Rate Limited API Requests\n\nA `Retry-After` HTTP response header is utilized by AppFolio to manage rate-limited API requests. When your request is rate limited, this header indicates the time duration in seconds that you should wait before resending the request. It is best practice to observe the value of the `Retry-After` header and wait for the specified time to resend the request. Adhering to this guidance will reduce the number of 429 \"Too Many Requests\" errors sent, and conserves resources for both your integration and AppFolio’s services.\n\n**Rate Limits and Error Responses**:\n\nFor each set of credentials, AppFolio enforces rate limits as follows:\n\n- 8 requests per second\n- 256 requests per minute\n- 4096 requests per hour\n\nShould any of these limits be exceeded, AppFolio will trigger a 429 \"Too Many Requests\" error and include a `Retry-After` header.\n\n- If you send more than 8 requests in a second, the value of the `Retry-After` header will be 1 second.\n- If you send more than 256 requests in a minute, the value of the `Retry-After` header will be \u003c 60 seconds.\n- If you send more than 4096 requests in an hour, the value of the `Retry-After` header will be \u003c 3600 seconds.\n\n**Rate Limit Resets and Handling Time-Related Errors**:\n\nAll rate limits reset at the beginning of each new second, minute, or hour. In scenarios where the per-minute or per-hour rate limits are exceeded, the `Retry-After` header's value specifies the time remaining until the next complete minute or hour when the 429 Too Many Requests error will expire, and new requests should be sent.\n\n**Example Scenario**:\n\nFor instance, if you sent 300 requests at 09:49:30 AM, the `Retry-After` header would display 30 seconds. The next request should be scheduled at or after 9:50:00 AM. If the per-hour rate limit is exceeded, the 429 error will expire at the top of the upcoming hour, regardless of the time it was triggered. As an example, sending 5000 requests at 09:15:00 AM would lead to a `Retry-After` header value of 2700 seconds, necessitating a wait until 10:00:00 AM before you should issue another request.\n\n## User Roles\n\nIn order to successfully carry out certain requests using the API, the correct user roles must be enabled in the AppFolio Property Manager.\n\nSome examples include:\n\n- When assigning a lead to a user, that user must have the **Leasing Agent** role in the AppFolio Property Manager.\n- When creating a work order, the assigned user must have the **Maintenance Tech** role in the AppFolio property manager.\n\nIf a user does not have the correct permissions your request will result in a `422` “User not found.” error.\n\n## Idempotency\n\nWhen your client sends a POST request and never receives a response — due to a network timeout, connection reset, or other transport-layer failure — you face an ambiguous situation: did the server receive and process the request, or not? If you retry blindly, you risk creating a duplicate record. If you don't retry, the operation may have silently failed.\n\nIdempotency solves this by letting you retry safely. Include an `Idempotency-Key` header on the original request. If the server processed the request but the response was lost in transit, the retry returns the stored original response instead of executing the operation again. If the server never received the original request, the retry executes it normally. Either way, the result is the same — no duplicates, no missed operations.\n\n### How to use it\n\nInclude an `Idempotency-Key` header with a unique string value on any POST request:\n\n```\nPOST /api/v0/work_orders\n...\nIdempotency-Key: {your-unique-key}\n\n{ ... }\n```\n\nIf the request succeeds and you retry it with the same key and body, the server returns the original response without executing the request again. When a stored response is replayed, the response includes an `Idempotent-Replayed: true` header.\n\nKeys are scoped to your Customer identity and request path. You may reuse the same key string across different endpoints without collision.\n\n### Key requirements\n\n| Requirement | Details |\n|---|---|\n| Max length | 256 characters |\n| Characters | Printable ASCII only (no control characters) |\n| Method | POST only — header is silently ignored on GET, PATCH, PUT, DELETE |\n\nKeys that are empty, too long, or contain invalid characters return `400 Bad Request`.\n\n### Retry behavior\n\nThe server computes a SHA-256 fingerprint of the raw request body and stores it alongside the response. On retry:\n\n| Scenario | Response |\n|---|---|\n| Same key, same body — request complete | Stored response + `Idempotent-Replayed: true` |\n| Same key, different body | `422 Unprocessable Entity` — payload mismatch |\n| Same key, same body — original still processing | `409 Conflict` + `Retry-After: 1` — retry after 1 second |\n\nStored responses cover most HTTP status codes, but there is an important exception: **validation errors caught before the request is recorded are not stored and will not replay.** If the original request was rejected due to a missing or invalid parameter (typically a `422`), the key was never stored, so retrying with the same key and body simply re-validates — you get the same error, but without `Idempotent-Replayed: true`. Only errors returned by the endpoint itself (after the key has been stored) are replayed on retry.\n\nIn practice: if you see a `422` on retry *without* `Idempotent-Replayed: true`, the request was rejected before recording — fix the payload and retry with a new key. If you see `Idempotent-Replayed: true` on a `422`, the original error was stored and the retry is confirming it.\n\nRe-execution (not replay) only occurs if the original request raised an unhandled server exception and left no stored response.\n\n### TTL\n\nIdempotency keys expire 24 hours after creation. After expiry, the same key value is treated as a new request.\n\n### Error response format\n\nIdempotency errors include a machine-readable `code` field:\n\n```json\n{“error”: “Idempotency key conflict: request already in progress”, “code”: 409}\n```\n\n```json\n{“error”: “Idempotency key fingerprint mismatch”, “code”: 422}\n```\n\n```json\n{“error”: “Idempotency key invalid: must be 1-256 printable ASCII characters”, “code”: 400}\n```\n\n### Choosing a key value\n\nUse a value unique to the logical operation — a UUID generated before sending the request works well. Store the key alongside your pending operation so you can reuse it on retry. Do not reuse a key with a different payload; that returns `422`.\n\n# API Troubleshooting\n\nWhen troubleshooting issues associated with the API, ensure you can answer _Yes_ to the following questions in the checklist. If you answer _No_ to any of the following questions, it is likely that you have found the problem.\n\n1. **Is the URL correct?**\n\n- A valid URL should look similar to `http://api.appfolio.com/api/v0/{endpoint}`.\n\n2. **Were the correct credentials passed in the request?**\n\n- Ensure the **Client Secret** and **Client ID** belong to the same database whose records you are trying to access.\n\n3. **Is the authorization header valid?**\n\n- Ensure the formatting of the **Client ID** and **Client Secret** passed into your authorization header are valid.\n\n4. **Are the correct User Roles enabled?**\n\n- For example, if you are creating a lead and assigning a user to that lead, does the user have the **Leasing Agent** role enabled?\n\n5. **Are the request parameters valid?**\n\n- If an incorrect parameter value was passed, the returned error codes should be descriptive enough to assist you in identifying the problem.\n\n6. **Is the rate at which you are issuing requests regulated?**\n\n- If multiple PATCH requests are made to the same resource simultaneously, the first request will update the resource but the second request to update the resource will fail. Thus, it is important to spread out or queue your PATCH requests across resources.\n\n- In general, staggering the rate at which you issue requests will prevent network congestion and errors.\n\n# Webhooks Overview\n\nAppFolio provides support for webhooks through the API. Webhooks are HTTP-based callback functions that allow your app to receive real-time updates about events in the AppFolio system. Webhooks are only available for a small subset of endpoints and can be enabled by reaching out to an AppFolio representative.\n\nYou must configure a webhook URL to allow your application to receive webhooks. Once a webhook URL is configured, you will subscribe to a specific webhook topic and receive notifications about that event once it occurs in the AppFolio system. For example, when a user creates, updates, or deletes a property within AppFolio, a webhook callback from AppFolio will notify your application about the property event.\n\n## Why Use Webhooks?\n\n- Webhooks provide real-time updates that prevent you from having to periodically query the API, contributing to cost savings in infrastructure and server resources\n- Webhooks make it easier for you to adhere to our rate limits by removing the need to periodically poll for changes\n- Webhooks can allow you to automate workflows in your organization by giving you the ability to define how to respond to webhook event notifications that you receive\n\n## Authentication\n\nWebhook event notifications are sent to an endpoint defined and exposed by you. The webhook URL you define must be secured by HTTPS. To validate that the webhook event notifications are coming from AppFolio and verify the integrity of the notification’s content, AppFolio implements [JSON Web Signature (JWS)](https://www.rfc-editor.org/rfc/rfc7515.html) message signing with a [detached payload](https://datatracker.ietf.org/doc/html/rfc7515#appendix-F). The `X-JWS-Signature` header contains the signature for the webhook payload.\n\nYou must verify the signature of each webhook and discard all webhook payloads that fail signature verification without processing them. The step-by-step guide to verifying the signature can be found in the **Webhooks: Getting Started** section along with \u003ca href=\"https://github.com/appfolio/stack-webhook-jws-examples\" target=\"https://github.com/appfolio/stack-webhook-jws-examples\"\u003esample code\u003c/a\u003e in several languages.\n\n### **Authentication Headers**\n\n| Name              | Description                                                                             |\n|-------------------|-----------------------------------------------------------------------------------------|\n| `X-JWS-Signature` | An encoded signature that verifies that a webhook event notification came from AppFolio |\n\n## Webhook Event Payload Structure\n\nThe payload of the webhook event notification sent by AppFolio is an HTTP POST request that contains a JSON object with attributes that describe the event that occurred. The following is an example payload AppFolio sends to your webhook when a property has been created in AppFolio. The JSON object contains several attributes explained in the table beneath the example payload.\n\n```json\nPOST / HTTP/0.0\nHost: {your-company-name}.appf.io\nContent-Type: application/json\nX-JWS-Signature: {encoded-jws-signature}\n\n{\n  \"client_id\":\"{your-client-id}\",\n  \"event_id\":\"0f56aa84-e319-4460-89b2-2be2f6d12345\",\n  \"topic\":\"properties\",\n  \"resource_id\":\"5b4afdd0-25af-11ee-8c46-06b43963c6f4\",\n  \"event_timestamp\":\"2023-03-27T16:55:12Z\",\n  \"message_sent_at\":\"2023-08-28T23:18:27Z\",\n  “event_type”: ”create”,\n  \"database_id\": \"4d5b8b3e-97d4-444b-ae24-29f8fd1a1fc5\"\n}\n```\n\n| Attribute         | Description                                                                                                                                                                           |\n|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `client_id`       | Unique identifier of the customer that is sent the webhook event notification. This attribute corresponds to the client_id API credentials used to access that customer via the APIs. |\n| `event_id`        | Unique identifier of the webhook event notification sent by AppFolio                                                                                                                  |\n| `topic`           | The topic of the webhook event notification                                                                                                                                           |\n| `resource_id`     | Unique identifier of the resource AppFolio is notifying your app about                                                                                                                |\n| `event_timestamp` | When the event you were listening for occurred in AppFolio’s system                                                                                                                   |\n| `message_sent_at` | When AppFolio sent a notification about the event you were listening for                                                                                                              |\n| `event_type`      | The type of event that triggered the event notification. Common values include `create`, `update`, or `destroy`. Some topics emit additional domain-specific event types (e.g. `inventory_details_created`). Refer to the Webhook Topics table for the full list of events per topic. |\n| `database_id`     | Unique identifier of the database that the webhook event came from. This attribute corresponds to the database_id used to access that database via the Oauth Client Credentials Flow. |\n\n**Note**: In rare cases, webhooks can be delivered multiple times. Webhook implementations can detect this if needed by checking the `event_id` attribute for already processed Webhooks and ignoring duplicates. An alternative to detecting duplicates would be to make the operations triggered by the Webhook **idempotent**. This guarantees that even if an event is triggered multiple times, it will yield the same result if executed only once.\n\n\n## Batched Webhook Events (Opt-In)\n\nYou can opt in to receive batched webhook events. When batching is enabled, multiple events for the same topic, database, and event type are grouped into a single webhook notification. This reduces the number of webhook calls your endpoint receives during bulk operations.\n\nWhen batching is enabled, the payload format changes to include an array of resource IDs instead of a single resource ID:\n\n```json\nPOST / HTTP/0.0\nHost: {your-company-name}.appf.io\nContent-Type: application/json\nX-JWS-Signature: {encoded-jws-signature}\n\n{\n  \"batch_id\":\"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n  \"client_id\":\"{your-client-id}\",\n  \"topic\":\"work_orders\",\n  \"event_type\":\"inventory_details_updated\",\n  \"resource_ids\":[\"5b4afdd0-25af-11ee-8c46-06b43963c6f4\", \"6c5bfee1-36b0-22ff-9d57-17c54a74d7e5\"],\n  \"extras\": {\n    \"5b4afdd0-25af-11ee-8c46-06b43963c6f4\": [\n      {\"inventory_id\": \"9f1e2d3c-4b5a-6789-0123-456789abcdef\"},\n      {\"inventory_id\": \"ae2f3e4d-5c6b-7890-1234-56789abcdef0\"}\n    ],\n    \"6c5bfee1-36b0-22ff-9d57-17c54a74d7e5\": [\n      {\"inventory_id\": \"bf3a4f5e-6d7c-8901-2345-6789abcdef01\"}\n    ]\n  },\n  \"event_count\": 3,\n  \"database_id\":\"4d5b8b3e-97d4-444b-ae24-29f8fd1a1fc5\",\n  \"message_sent_at\":\"2026-04-06T10:00:05Z\",\n  \"batch_window_start\":\"2026-04-06T10:00:00Z\",\n  \"batch_window_end\":\"2026-04-06T10:00:05Z\"\n}\n```\n\n| Attribute            | Description                                                                                                     |\n|----------------------|-----------------------------------------------------------------------------------------------------------------|\n| `batch_id`           | Unique identifier for this batch delivery. Use this to detect duplicate deliveries.                             |\n| `client_id`          | Unique identifier of the customer, same as in individual webhooks.                                              |\n| `topic`              | The topic of the webhook event notification.                                                                    |\n| `event_type`         | The type of event that triggered the batch. Common values include `create`, `update`, or `destroy`. Some topics emit additional domain-specific event types (e.g. `inventory_details_updated` as shown in the example above). Refer to the Webhook Topics table for the full list of events per topic. |\n| `resource_ids`       | Unique identifiers for resources included in this batch. Deduplicated — each resource appears at most once.     |\n| `extras`             | Optional. Sparse map keyed by `resource_id`. Each value is an array of `extra` objects (deduplicated by exact match) for that resource, in arrival order. The same field on individual webhooks is `extra` (a single object). The `extras` field is omitted entirely when no event in the batch carried `extra`. |\n| `event_count`        | The total number of events in the batch. May be greater than the length of `resource_ids` if a resource was updated multiple times within the batch window. |\n| `database_id`        | Unique identifier of the database the events came from.                                                         |\n| `message_sent_at`    | When AppFolio sent this batched notification.                                                                   |\n| `batch_window_start` | Start of the time window during which events were collected.                                                    |\n| `batch_window_end`   | End of the time window during which events were collected.                                                      |\n\n**Important**: When batching is enabled, your webhook handler must be updated to accept `resource_ids` (an array) instead of `resource_id` (a string). Individual (non-batched) webhooks are not affected and continue to use the existing payload format.\n\n**Note**: Batched webhooks do not include the `event_id` field (since each batch represents multiple events). To detect duplicate batch deliveries, use the `batch_id` field, which uniquely identifies each batch delivery.\n\n**About `extras`**: For event types that include an `extra` field on individual webhooks (for example, `work_orders` `inventory_details_*` events include `extra: { inventory_id }`), the batched payload aggregates them into the top-level `extras` object. Within a single batch, the same `resource_id` may have multiple distinct `extra` objects (e.g. multiple `inventory_id`s for the same work order updated in the same window) — all distinct values are preserved. To look up the side information for a given resource, read `extras[resource_id]`; the value is always an array.\n\nWhen an event type always emits `extra` on individual webhooks (for example, `inventory_details_*`), every `resource_id` in the batch will appear as a key in `extras` with at least one entry. For event types that do not emit `extra`, the `extras` field is omitted entirely from the payload.\n\nTo enable webhook batching, contact an AppFolio representative.\n\n\n## Webhook Topics\n\nThe table below provides a list of webhook topics available for subscription. Each row in the table represents a distinct topic you can monitor. The \"Events\" column details the specific types of actions or changes that can trigger a webhook notification for the corresponding topic.\n\n| Webhook Topic           | Topic Key                | Events                        | Description                                                         |\n| ----------------------- | ------------------------ | ----------------------------- | ------------------------------------------------------------------- |\n| Bills                   | `bills`                  | `create`, `update`, `destroy` | Triggered when bills are created, modified, or deleted.             |\n| Charges                 | `charges`                | `create`, `update`, `destroy` | Triggered when charges are created, modified, or deleted.           |\n| Connected Databases     | `connected_databases`    | `create`, `destroy`           | Triggered when a new database connection is created or deleted      |\n| Delinquent Charges      | `delinquent_charges`     | `create`, `update`, `destroy` | Triggered when delinquent charges are created, modified, or deleted. |\n| General Ledger Accounts | `gl_accounts`            | `create`, `update`, `destroy` | Triggered when GL accounts are created, modified, or deleted.       |\n| General Ledger Details  | `gl_details`             | `create`, `update`, `destroy` | Triggered when GL details are created, modified, or deleted.        |\n| Inventories             | `inventories`            | `create`, `update`, `destroy` | Triggered when inventory items are created, modified, or deleted.   |\n| Journal Entries         | `journal_entries`        | `create`, `update`, `destroy` | Triggered when journal entries are created, modified, or deleted.   |\n| Leads                   | `leads`                  | `create`, `update`, `destroy` | Triggered when leads are created, modified, or deleted.             |\n| Leases                  | `leases`                 | `create`, `update`, `destroy` | Triggered when leases are created, modified, or deleted.            |\n| Owners                  | `owners`                 | `create`, `update`, `destroy` | Triggered when an owner record is created, modified, or deleted.    |\n| Owner Groups            | `owner_groups`           | `create`, `update`, `destroy` | Triggered when owner groups are created, modified, or deleted.      |\n| Pending Charge Batch    | `pending_charge_batches` | `create`, `update`            | Triggered when pending charge batches are created or modified.      |\n| Properties              | `properties`             | `create`, `update`, `destroy` | Triggered when properties are created, modified, or deleted.        |\n| Property Groups         | `property_groups`        | `create`, `update`, `destroy` | Triggered when property groups are created, modified, or deleted.   |\n| Recurring Charges       | `recurring_charges`      | `create`, `update`, `destroy` | Triggered when recurring charges are created, modified, or deleted. |\n| Rental Applications     | `rental_applications`    | `create`, `update`, `destroy` | Triggered when rental applications are created, modified, or deleted.|\n| Tenants                 | `tenants`                | `create`, `update`, `destroy` | Triggered when a tenant record is created, modified, or deleted.    |\n| Units                   | `units`                  | `create`, `update`, `destroy` | Triggered when a unit record is created, modified, or deleted.      |\n| Vendors                 | `vendors`                | `create`, `update`, `destroy` | Triggered when a vendor record is created, modified, or deleted.    |\n| Work Orders             | `work_orders`            | `create`, `update`, `destroy`, `inventory_details_created`, `inventory_details_updated`, `inventory_details_destroyed` | Triggered when work orders or their inventory details are created, modified, or deleted. |\n\n\nNote: Ensure your webhook endpoint can handle all events for a subscribed topic.\n\n\n\n## Webhook Event Logs\n\nWebhook event logs include a record of every webhook attempt the AppFolio system has made and information on the success or failure of that call. This can be useful for debugging failed webhook requests, as you can see the event notification's payload and which topic the notification was sent to. \n\nWebhook logs are only accessible by a user with the Administrator role.  Webhooks logs are accessible by selecting the **Webhooks Logs** button from the left navigation or by selecting **See All Events** from the **Webhook Card** within **Admin Settings**. The following table explains the columns present on the **Webhooks Logs** page. \n\n| Log Column            | Description                                                                                                        |\n|-----------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Sent At               | When AppFolio sent the webhook notification about the event                                                                                                                        |\n| ID                    | Unique identifier of the webhook event notification sent by AppFolio                                                                                                               |\n| Topic                 | The topic of the webhook event notification                                                                                                                                        |\n| URL                   | The URL the webhook notification was sent to                                                                                                                                       |\n| Latency               | The time in milliseconds for the webhook event notification to be sent from AppFolio                                                                                                                                                                                   |\n| Response Code         | The HTTP response code of the webhook event. A **Green** status indicates that the Webhook was successful. A **Red** status code indicates an error stemming from your server.  |\n\n# Webhooks Getting Started\n\nThis step-by-step guide walks you through enabling webhooks. The steps include configuring your application to receive notifications, subscribing to webhook topics, and how to start receiving webhook event notifications.\n\n## Configure a Webhook URL\n\nThe Webhook URL is a server for incoming HTTP POST notification messages triggered by events within the AppFolio system. The URL must be secured by HTTPS, and the domain has to be owned by your company.\n\n1. Navigate to the **Webhook Card** within **Admin Settings**. As a user with the *Administrator* role, select **Admin** from the User drop-down in the top-right corner of the page.\n2. Navigate to the **Webhooks Card** at the bottom left of the page.\n3. To add a **Webhook URL**, select **Edit** from within the **Webhooks Card**. The **Webhook URL** will become configurable.\n4. Enter the name of your **Webhook URL**.\n\n## Subscribe to Webhook Topics\n\nAfter webhooks are enabled for your integration, you will be given access to a subset of webhook topics. A webhook topic refers to a specific event or category of events that can trigger a webhook.  The topics you can subscribe to will be listed beneath **Topic Subscriptions**.\n\n1. From the list of topics available for subscription, select the ones you are interested in enabling by selecting the checkbox adjacent to the webhook topic.\n2. Ensure your **Webhook URL** can receive an event notification by selecting **Send Test Event**.\n3. If your **Send Test Event** was successful, an entry will appear in the webhook logs that the test was successful.\n4. Navigate to the **Webhook Logs** page and ensure the test event is timed correctly.\n5. The **See All Events** link will point you to displaying all webhook events you can utilize to debug errant requests.\n\n**Important**: Once you have subscribed to a topic, it is time to set up your web server to receive HTTPS POST requests from AppFolio. When setting up your web server, ensure that the server is behind the HTTPS URL configured in **Step 2**. \n\n## Verify the Webhook Message Signature\n\nAppFolio signs all outgoing webhooks to enable recipients to verify the authenticity and integrity of the received notifications. You must verify the webhook message signature in the event notification payload sent by AppFolio by executing the following steps. Any notifications that fail the webhook message signature verification must not be processed.\n\n1. **Fetch Public Keys From AppFolio**\n\n- Configure a verification library to obtain public keys from `https://api.appfolio.com/.well-known/jwks.json`. The endpoint will respond with a set of keys in JSON Web Key Set (JWKS) [format](https://datatracker.ietf.org/doc/html/rfc7517#section-5):\n\n2. **Read the Payload of the Webhook Request Sent by AppFolio**\n\n- This is a sample request that will be sent to your webhook. Notice the payload and the signature header.\n\n```json\nPOST / HTTP/1.2\nHost: example.appf.io\nContent-Type: application/json\nX-JWS-Signature: eyJhbGciOiJQUzI1NiIsImlhdCI6MTY5MzI2NDcwNywia2lkIjoiNWViZGMxMjgtMGZmOC00YzRiLTllNzAtZGU3MjBkY2M2ZjEyIiwiY3JpdCI6WyJiNjQiXSwiYjY0IjpmYWxzZX0..CmenfU2_rJqCthg3r2TfbVZmhfCL8j50JOztvKRISkp7su-K5BMd8mbLYJJ2_0l-43W7VzzsYAXd6RD1srjcOcVRVujOik7T9YRd6zdQhzlEjUpcUFXoxXVVj804j0wWY0X9a8TxT-bk6WkmQcu209sj7mT5YfnfkHQSzpVEyjhhwi3oa_NVGMYutrf-Bik-pV-K-as6kfTFd0BTm5SwdFkAtr9La356NcpnQiwGEZ4ethEPjr6VAxiLvxb1d1oSA0U0NawS4ryzMuKk8O0d_64SZo457J9MhgJqfu0j_dPcnz8Hmu1qtleWVPwe7P5cC4o7Ulzwmy70_jxsBs0F4A\n\n{\n  \"client_id\":\"{your-client-id}\",\n  \"event_id\":\"0f56aa84-e319-4460-89b2-2be2f6d12345\",\n  \"topic\":\"properties\",\n  \"resource_id\":\"5b4afdd0-25af-11ee-8c46-06b43963c6f4\",\n  \"event_timestamp\":\"2023-03-27T16:55:12Z\",\n  \"message_sent_at\":\"2023-08-28T23:18:27Z\",\n  “event_type”: ”create”\n}\n```\n\n3. **Extract the JWS Header from the signature**. This is before the `..`  in the `X-JWS-Signature` header value.\n4. **Extract the JWS Signature**. This is after the `..`  in the `X-JWS-Signature header` header value.\n5. **Compute the JWS Payload**. Encode the body of the main request (the payload) using the unpadded alternate base64 encoding defined in [RFC 4648](https://datatracker.ietf.org/doc/html/rfc4648). Additionally, ensure you are using the unparsed raw contents of the HTTP body, as processing like JSON parsing could reformat the body and cause the verification to fail.\n6. **Verify the Webhook Message Signature**\n- Concatenate the encoded values from steps **3**, **4**, and **5** with `.` as a separator. For example:\n\n```json\njws-header + \".\" + jws-payload + \".\" + jws-signature`\n```\n\n- Pass the JWS Signature, the JWS Header, and the JWS Payload to the JWS verification library you configured with AppFolio's JWKS public keys in **Step 1**. Code samples in various languages can be found in \u003ca href=\"https://github.com/appfolio/stack-webhook-jws-examples\" target=\"https://github.com/appfolio/stack-webhook-jws-examples\"\u003ethis repository\u003c/a\u003e. This should result in a successful verification.\n- **Note**: AppFolio uses `RSASSA_PSS_SHA_256` as the signature algorithm. For additional information pertaining to this algorithm, click [here](https://datatracker.ietf.org/doc/html/rfc3447#section-8.1).\n\n","contact":{"name":"AppFolio Engineering Team"}},"servers":[{"url":"https://api.appfolio.com/api/v0"}],"security":[{"basic_auth":[]}],"x-tagGroups":[{"name":"Accounting","tags":["Bank Accounts","Bills","Charges","Delinquent Charges","General Ledger Accounts","General Ledger Details","Journal Entries","Late Fee Policies","Payables","Pending Charge Batches","Recurring Charges","Tenant Ledgers"]},{"name":"Corporate Accounting","tags":["Corporate Entities","Corporate General Ledger Accounts"]},{"name":"Attachments","tags":["Folders"]},{"name":"Community Associations","tags":["Community Associations","Community Association Bank Balances","Community Association Board Members","Community Association Homeowners","Community Association Homeowner Ledgers","Community Association Renters","Community Association Rules","Community Association Units","Community Association Violations"]},{"name":"Custom Fields","tags":["Custom Fields"]},{"name":"Leasing","tags":["Leads","Leases","Listings","Rental Applications","Showings"]},{"name":"People","tags":["Tenants","Owners","Owner Groups","Users"]},{"name":"Properties","tags":["Occupancies","Portfolios","Properties","Property Groups","Units","Unit Types"]},{"name":"Maintenance","tags":["Inspections","Inventories","Inventory Locations","Purchase Orders","Work Orders","Vendors"]},{"name":"System","tags":["Jobs"]}],"tags":[{"name":"Bank Accounts","description":"Manage bank accounts"},{"name":"Bank Adjustments","description":"Manage bank adjustments"},{"name":"Bank Statements","description":"Manage bank statements for reconciliation purposes"},{"name":"Bills","description":"View and manage bills through various operations. This API endpoint supports webhooks for certain; please refer to the Webhooks section of the documentation for further details."},{"name":"Community Association Bank Balances","description":"Track bank balances for Community Associations"},{"name":"Community Association Board Members","description":"Manage information about Community Association board members"},{"name":"Community Association Homeowners","description":"Oversee data for homeowners in Community Associations"},{"name":"Community Association Homeowner Ledgers","description":"Track financial records for Community Association homeowners"},{"name":"Community Association Renters","description":"Manage information about renters in Community Associations"},{"name":"Community Association Rules","description":"Administer rules and regulations for Community Associations"},{"name":"Community Association Units","description":"Manage individual units within Community Associations"},{"name":"Community Association Violations","description":"Track and manage rule violations in Community Associations"},{"name":"Charges","description":"Handle charges for tenants through various operations. This API endpoint supports webhooks; please refer to the Webhooks section of the documentation for further details."},{"name":"Community Associations","description":"Oversee information for Community Associations"},{"name":"Corporate Entities","description":"View corporate entities used for corporate accounting purposes"},{"name":"Corporate General Ledger Accounts","description":"Track and manage corporate general ledger accounts. This API endpoint supports webhooks; please refer to the Webhooks section of the documentation for further details."},{"name":"Custom Fields","description":"Manage additional customized data fields for various entities"},{"name":"Delinquent Charges","description":"Track and manage delinquent charges. This API endpoint supports webhooks; please refer to the Webhooks section of the documentation for further details."},{"name":"Folders","description":"List the attachment folders belonging to a property, unit, vendor, owner, or tenant."},{"name":"General Ledger Accounts","description":"Track and manage general ledger accounts. This API endpoint supports webhooks; please refer to the Webhooks section of the documentation for further details."},{"name":"General Ledger Details","description":"Access detailed general ledger transaction information. This API endpoint supports webhooks; please refer to the Webhooks section of the documentation for further details."},{"name":"Import UIDs","description":"Link records to their unique IDs from the source database during an onboarding"},{"name":"Inspections","description":"Manage inspections through various operations"},{"name":"Inventories","description":"View and manage inventory items through various operations."},{"name":"Inventory Locations","description":"Manage the locations where inventory items are stored"},{"name":"Job","description":"Track and retrieve status and results of asynchronous bulk operations across resources"},{"name":"Journal Entries","description":"Record financial transactions for accounting purposes. This API endpoint supports webhooks; please refer to the Webhooks section of the documentation for further details."},{"name":"Late Fee Policies","description":"Track and manage late fee policies through various operations."},{"name":"Leads","description":"Track and manage potential tenant inquiries through various operations. This API endpoint supports webhooks; please refer to the Webhooks section of the documentation for further details."},{"name":"Leases","description":"Track leases status and dates."},{"name":"Listings","description":"Manage property listings for rent or sale"},{"name":"Mailing Letters","description":"Track and manage mailing letter correspondence through various operations"},{"name":"Occupancies","description":"Track and manage occupancies"},{"name":"Owners","description":"Manage property owners and information through various operations. This API endpoint supports webhooks; please refer to the Webhooks section of the documentation for further details."},{"name":"Owner Groups","description":"Oversee owner groups and their details"},{"name":"Payables","description":"Manage accounts payable and outgoing payments"},{"name":"Prepayments","description":"Import prepayments"},{"name":"Portfolios","description":"View and manage property portfolios and their details"},{"name":"Properties","description":"Manage and oversee various details relating to properties. This API endpoint supports webhooks; please refer to the Webhooks section of the documentation for further details."},{"name":"Property Groups","description":"Oversee property groups and their details. This API endpoint supports webhooks; please refer to the Webhooks section of the documentation for further details."},{"name":"Purchase Orders","description":"View purchase orders and their line items"},{"name":"Recurring Charges","description":"Oversee recurring charges for an occupancy"},{"name":"Recurring Journal Entries","description":"View recurring journal entries for accounting purposes"},{"name":"Rental Applications","description":"Process and track rental applications from prospective tenants through various operations"},{"name":"Security Deposits","description":"Import security deposits"},{"name":"Showings","description":"Manage property viewing appointments for prospective tenants through various operations"},{"name":"Tenants","description":"Manage tenant information through various operations"},{"name":"Tenant Ledgers","description":"Track financial records and balances for tenants. This API endpoint supports webhooks; please refer to the Webhooks section of the documentation for further details."},{"name":"Units","description":"Manage units across properties through various operations"},{"name":"Unit Types","description":"Manage Unit types across properties through various operations"},{"name":"Users","description":"Retrieve user accounts and access rights. This API endpoint supports webhooks; please refer to the Webhooks section for further details."},{"name":"Vendors","description":"Manage vendor services through various operations. This API endpoint supports webhooks; please refer to the Webhooks section of the documentation for further details."},{"name":"Work Orders","description":"Manage maintenance requests and repairs through various operations. This API endpoint supports webhooks; please refer to the Webhooks section of the documentation for further details."}],"paths":{"/bank_accounts":{"get":{"operationId":"getBankAccounts","summary":"List All Bank Accounts","description":"Returns all bank accounts that meet the filter criteria. Hidden and corporate bank accounts are not returned.","tags":["Bank Accounts"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/bank_accounts?filters[Id]=1abcde23-c543-456e-abc9-123456789cee,3b5344d0-482b-4b50-b30f-2dd67412b517' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Authorization: Basic {Auth}'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","style":"deepObject","description":"Filters for bank accounts","schema":{"type":"object","properties":{"Id":{"description":"Example: `filters[Id]=3b5344d0-482b-4b50-b30f-2dd67412b517,1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the bank account. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc","format":"uuid"}}},"required":false}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankAccounts"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}}}}},"/bank_accounts/bulk":{"post":{"operationId":"bulkCreateBankAccounts","summary":"Bulk Create Bank Accounts","description":"Create bank accounts in bulk","tags":["Bank Accounts"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/bank_accounts/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"ReferenceId\": \"1\",\n            \"AccountName\": \"Operating Account\",\n            \"AccountNumber\": \"123456789\",\n            \"AccountType\": \"Checking\",\n            \"BankName\": \"First National Bank\",\n            \"RoutingNumber\": \"987654321\",\n            \"NextCheckNumber\": 101,\n            \"BankAddress1\": \"100 Main Street\",\n            \"BankAddress2\": \"Suite 500\",\n            \"BankCity\": \"Santa Barbara\",\n            \"BankState\": \"CA\",\n            \"BankZip\": \"93101\",\n            \"CompanyAddress1\": \"200 Business Avenue\",\n            \"CompanyAddress2\": \"Floor 3\",\n            \"CompanyCity\": \"Santa Barbara\",\n            \"CompanyState\": \"CA\",\n            \"CompanyZip\": \"93101\",\n            \"CompanyNameOnChecks\": \"Acme Property Management\"\n          },\n          {\n            \"ReferenceId\": \"2\",\n            \"AccountName\": \"Escrow Account\",\n            \"AccountNumber\": \"987654321\",\n            \"AccountType\": \"Savings\",\n            \"BankName\": \"Pacific Trust\",\n            \"RoutingNumber\": \"123456789\",\n            \"NextCheckNumber\": 201,\n            \"BankAddress1\": \"500 Financial Blvd\",\n            \"BankCity\": \"Santa Barbara\",\n            \"BankState\": \"CA\",\n            \"BankZip\": \"93103\"\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Bank Account objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BankAccount.BulkCreate"}}}},"example":{"data":[{"ReferenceId":"1","AccountName":"Operating Account","AccountNumber":"123456789","AccountType":"Checking","BankName":"First National Bank","RoutingNumber":"987654321","NextCheckNumber":101,"BankAddress1":"100 Main Street","BankAddress2":"Suite 500","BankCity":"Santa Barbara","BankState":"CA","BankZip":"93101","CompanyAddress1":"200 Business Avenue","CompanyAddress2":"Floor 3","CompanyCity":"Santa Barbara","CompanyState":"CA","CompanyZip":"93101","CompanyNameOnChecks":"Acme Property Management"}]}}}},"responses":{"201":{"description":"Created bank accounts","content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual bank accounts in the bulk-creation process.","example":"1"},"successful":{"type":"boolean","description":"Indication of successful creation","example":true},"BankAccountId":{"type":"string","description":"Unique identifier of the created bank account","example":"71c5cb28-547f-11ec-bfa5-02975b268737"}}}}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual bank accounts in the bulk-creation process.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted bank account creation","type":"array","items":{"properties":{"attribute":{"description":"The attribute that caused the error","type":"string"},"message":{"description":"Error message describing the issue","type":"string"}}}}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"BankAddress1","message":"Required parameter BankAddress1 is missing."},{"attribute":"BankState","message":"is invalid"}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/bank_adjustments/bulk":{"post":{"operationId":"bulkBankAdjustments","summary":"Bulk Create Bank Adjustments","description":"Create bank adjustments in bulk","tags":["Bank Adjustments"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/bank_adjustments/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"Amount\": 150.0,\n            \"BankAccountId\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\",\n            \"Date\": \"2026-02-08\",\n            \"Description\": \"'amazing bank adjustment description'\",\n            \"ReferenceId\": \"1\",\n          },\n          {\n            \"Amount\": 300.0,\n            \"BankAccountId\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\",\n            \"Date\": \"2026-02-08\",\n            \"ReferenceId\": \"2\",\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Bank Adjustment objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BankAdjustment.BulkCreate"}}}},"example":{"data":[{"Amount":150.0,"BankAccountId":"1bc8de4e-db50-4463-85fc-3a381f3d3e51","Date":"2026-02-08","Description":"amazing bank adjustment description","ReferenceId":"1"},{"Amount":300.0,"BankAccountId":"1bc8de4e-db50-4463-85fc-3a381f3d3e51","Date":"2026-02-08","ReferenceId":"2"}]}}}},"responses":{"202":{"description":"Bank Adjustments accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk creation of bank adjustments"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual bank adjustments in the bulk-creation of bank adjustments.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted bank adjustment creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"BankAccountId","message":"The specified BankAccountId does not exist"}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/bank_statements/bulk":{"post":{"operationId":"bulkCreateBankStatements","summary":"Bulk Create Bank Statements","description":"Create bank statements in bulk for reconciliation purposes","tags":["Bank Statements"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/bank_statements/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"ReferenceId\": \"1\",\n            \"BankAccountId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"BankBalance\": \"15000.00\",\n            \"CheckRegisterBalance\": \"14850.00\",\n            \"CutoffDate\": \"2022-03-03\"\n          },\n          {\n            \"ReferenceId\": \"2\",\n            \"BankAccountId\": \"71c5cb28-547f-11ec-bfa5-02975b268738\",\n            \"BankBalance\": \"25000.00\",\n            \"CheckRegisterBalance\": \"24900.00\",\n            \"CutoffDate\": \"2022-03-03\"\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Bank Statement objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BankStatement.BulkCreate"}}}},"example":{"data":[{"ReferenceId":"1","BankAccountId":"71c5cb28-547f-11ec-bfa5-02975b268737","BankBalance":"15000.00","CheckRegisterBalance":"14850.00","CutoffDate":"2022-03-03"}]}}}},"responses":{"202":{"description":"Bank statements creation accepted (async processing)","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","description":"Job ID for tracking the async bank statement creation process","example":"0d250350-4cd2-4580-9dc3-8f6c1c2bee50"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual bank statements in the bulk-creation process.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted bank statement creation","type":"array","items":{"properties":{"attribute":{"description":"The attribute that caused the error","type":"string"},"message":{"description":"Error message describing the issue","type":"string"}}}}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"BankBalance","message":"Invalid BankBalance format. Expected format is a decimal number (e.g., '15000.00' or '15000')."},{"attribute":"CutoffDate","message":"Invalid date format. Expected format is YYYY-MM-DD."}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/bills":{"get":{"operationId":"getBills","summary":"List All Bills","description":"Returns all bills that meet the filter criteria","tags":["Bills"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/bills?filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for bills. All GET requests must include a filter for `[Id]` (if available), or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"ApprovalStatus":{"description":"Example: `filters[ApprovalStatus]=Approved` \u003cbr\u003e The bill's approval status. Filter the results based on a single value. Valid values include `All`, `Pending Approval` or `Approved`.","type":"string","format":"string"},"Id":{"description":"Example: `filters[Id]=537b8cd8-381d-11ea-827d-b083fed171ad,648b8cd8-381d-11ea-827d-b083fed171da` \u003cbr\u003e Unique identifier of the bill to filter by. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns bill records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"},"IncludeHidden":{"description":"Example: `filters[IncludeHidden]=true` \u003cbr\u003e Indicates whether or not to include bills associated with a property hidden by an AppFolio Property Manager user in the response","type":"boolean"},"ManagementCompanyAsPayee":{"description":"Example: `filters[ManagementCompanyAsPayee]=true` \u003cbr\u003e Indicates whether or not to include bills where the management company is the payee for the bill","type":"boolean"}}},"required":false}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Bills"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}},"post":{"operationId":"createBill","summary":"Create Bill","description":"Create a bill","tags":["Bills"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/bills' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"AccountNumber\": \"1334567800\",\n        \"CashAccountId\": \"41c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"CheckMemo\": \"Account #1231234\",\n        \"DueDate\": \"2022-02-03\",\n        \"InvoiceDate\": \"2022-02-01\",\n        \"PostingDate\": \"2022-02-01\",\n        \"PropertyId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"Reference\": \"invoice #123\",\n        \"Remarks\": \"November Bill\",\n        \"TotalAmount\": \"112.31\",\n        \"VendorId\": \"80c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"WorkOrderId\": \"61c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"LineItems\": [\n          {\n            \"Amount\": \"43.10\",\n            \"Description\": \"sample description\",\n            \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\",\n            \"PropertyId\": \"d9009724-9f37-11fd-bh31-d45a967b9b10\",\n            \"UnitId\": \"91c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"ServiceFrom\": 2022-01-25,\n            \"ServiceTo\": 2022-02-07\n          },\n          {\n            \"Amount\": \"69.21\",\n            \"Description\": \"sample description\",\n            \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\",\n            \"PropertyId\": \"d9009724-9f37-11fd-bh31-d45a967b9b10\",\n            \"UnitId\": \"91c5cb28-547f-11ec-bfa5-02985b268737\",\n            \"ServiceFrom\": \"2022-02-01\",\n            \"ServiceTo\": \"2022-02-07\"\n          },\n        ]\n     }'\n"}],"requestBody":{"description":"Bill object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Bill.Create"},"example":{"AccountNumber":"1334567800","CashAccountId":"41c5cb28-547f-11ec-bfa5-02975b268737","CheckMemo":"sample memo","DueDate":"2022-02-03","InvoiceDate":"2022-02-01","LineItems":[{"UnitId":"914a2a8e-f5d3-11e9-a485-1876da4c83b5","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","Description":"sample description1","Amount":"43.10"},{"UnitId":"9191d02e-f5d3-11e9-a485-1867da4c81b5","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","Description":"sample description2","Amount":"69.21"}],"PostingDate":"2022-02-01","PropertyId":"71c5cb28-547f-11ec-bfa5-02975b268737","Reference":"invoice #123","Remarks":"November Bill","TotalAmount":"112.31","VendorId":"80c5cb28-547f-11ec-bfa5-02975b268737","WorkOrderId":"61c5cb28-547f-11ec-bfa5-02975b268737"}}}},"responses":{"201":{"description":"Created a Bill","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the created bill","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/bills/{billId}":{"patch":{"operationId":"updateBill","summary":"Update Bill","description":"Update a bill","tags":["Bills"],"parameters":[{"name":"billId","in":"path","description":"Unique identifier of the bill to update","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/bills/ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"AccountNumber\": \"1334567800\",\n        \"CheckMemo\": \"Account #1231234\",\n        \"DueDate\": \"2022-02-03\",\n        \"InvoiceDate\": \"2022-02-01\",\n        \"PostingDate\": \"2022-02-01\",\n        \"PropertyId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"Reference\": \"invoice #123\",\n        \"Remarks\": \"November Bill\",\n        \"TotalAmount\": \"112.31\",\n        \"VendorId\": \"80c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"WorkOrderId\": \"61c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"PurchaseOrderId\": \"62c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"LineItems\": [\n          {\n            \"Amount\": \"43.10\",\n            \"Description\": \"sample description\",\n            \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\",\n            \"PropertyId\": \"d9009724-9f37-11fd-bh31-d45a967b9b10\",\n            \"UnitId\": \"91c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"ServiceFrom\": 2022-01-25,\n            \"ServiceTo\": 2022-02-07\n          },\n          {\n            \"Amount\": \"69.21\",\n            \"Description\": \"sample description\",\n            \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\",\n            \"PropertyId\": \"d9009724-9f37-11fd-bh31-d45a967b9b10\",\n            \"UnitId\": \"91c5cb28-547f-11ec-bfa5-02985b268737\",\n            \"ServiceFrom\": 2022-01-25,\n            \"ServiceTo\": 2022-02-07\n          },\n        ]\n     }'\n"}],"requestBody":{"description":"Bill object","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"AccountNumber":{"type":"string","description":"For utility billing. The account number associated with the bill, used by a utility vendor to identify the account"},"CheckMemo":{"type":"string","description":"The memo on the check"},"DueDate":{"type":"string","format":"date","description":"The date the invoice is due"},"InvoiceDate":{"type":"string","format":"date","description":"The date the invoice was received"},"LineItems":{"$ref":"#/components/schemas/Bill.UpdateLineItems"},"ManagementCompanyAsPayee":{"type":"boolean","description":"Indicates whether the management company is the payee for the bill. Required and must be true when VendorId is null or not provided."},"PostingDate":{"type":"string","format":"date","description":"The accrual-accounting invoice date"},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the the property associated with the bill. If a PropertyId is not found within the `LineItem` array, use this value for reference purposes."},"Reference":{"type":"string","description":"The reference number to the invoice number. This number must be unique, no duplicate record is allowed."},"Remarks":{"type":"string","description":"A description or summary of the invoice"},"TotalAmount":{"type":"string","format":"decimal","description":"The total amount due. Ensure that the total amount is equal to the total of all items summed."},"VendorId":{"type":"string","format":"uuid","description":"Unique identifier of the payee's vendor ID. Required when ManagementCompanyAsPayee is false or not provided. When present, ManagementCompanyAsPayee cannot be true."},"WorkOrderId":{"type":"string","format":"uuid","description":"Unique identifier of the work order corresponding to the invoice. The value of `WorkOrderId` cannot be null."},"PurchaseOrderId":{"type":"string","format":"uuid","description":"Unique identifier of the purchase order to link to the bill. The purchase order must be accessible to the caller, must not be canceled, and must not be pending approval. A null or omitted value is ignored — an existing link cannot be cleared through the API."}}},"example":{"AccountNumber":"1334567800","CheckMemo":"sample memo","DueDate":"2022-02-03","InvoiceDate":"2022-02-01","LineItems":[{"UnitId":"914a2a8e-f5d3-11e9-a485-1876da4c83b5","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","Description":"sample description1","Amount":"43.10"},{"UnitId":"9191d02e-f5d3-11e9-a485-1867da4c81b5","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","Description":"sample description2","Amount":"69.21"}],"PostingDate":"2022-02-01","PropertyId":"71c5cb28-547f-11ec-bfa5-02975b268737","Reference":"invoice #123","Remarks":"November Bill","TotalAmount":"112.31","VendorId":"80c5cb28-547f-11ec-bfa5-02975b268737","WorkOrderId":"61c5cb28-547f-11ec-bfa5-02975b268737","PurchaseOrderId":"62c5cb28-547f-11ec-bfa5-02975b268737"}}}},"responses":{"200":{"description":"Updated a Bill","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated bill","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/bills/{BillId}/attachments":{"post":{"operationId":"createBillAttachment","summary":"Create Bill Attachment","description":"Upload an attachment to a bill","tags":["Bills"],"parameters":[{"name":"BillId","in":"path","description":"The bill to which the file will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/bills/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/attachments' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --form 'File=@\"/path/to/file.pdf\"'\n"}],"requestBody":{"description":"Attachment object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"}}},"example":{"File":"/path/to/file.pdf"}}}},"responses":{"201":{"description":"Uploaded an attachment","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the bill attachment","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/bills/bulk":{"post":{"operationId":"bulkCreateBill","deprecated":true,"summary":"Bulk Create Bills","description":"Create multiple bills in bulk. Deprecated: use **bulkCreateBillAsync** (`POST /bills/bulk/async`) instead.","tags":["Bills"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/bills/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"AttachmentURL\": \"https://developer.com/temp/76460145.pdf\",\n            \"AccountNumber\": \"1334567800\",\n            \"CashAccountId\": \"41c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"CheckMemo\": \"Account #1231234\",\n            \"DueDate\": \"2022-05-30\",\n            \"InvoiceDate\": \"2022-05-01\",\n            \"PaymentDate\": \"2022-05-01\",\n            \"PaymentReference\": \"Payment for invoice #123\",\n            \"PostingDate\": \"2022-05-01\",\n            \"PropertyId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"Reference\": \"invoice #123\",\n            \"ReferenceId\": \"76460145\",\n            \"Remarks\": \"May Utility Bills\",\n            \"TotalAmount\": \"60.31\",\n            \"VendorId\": \"80c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"WorkOrderId\": \"61c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"PurchaseOrderId\": \"62c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"LineItems\": [\n              {\n                \"UnitId\": \"91c5cb28-547f-11ec-bfa5-02975b268737\",\n                \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\",\n                \"Description\": \"Electric bill\",\n                \"Amount\": \"43.10\"\n              },\n              {\n                \"UnitId\": \"91c5cb28-547f-11ec-bfa5-02985b268737\",\n                \"GlAccountId\": \"5658614e-8384-4cdd-8247-373247d3ac64\",\n                \"Description\": \"Gas bill\",\n                \"Amount\": \"17.21\"\n              },\n            ]\n          },\n          {\n            \"AttachmentURL\": \"https://developer.com/temp/21929356.pdf\",\n            \"CheckMemo\": \"Account #3697471\",\n            \"DueDate\": \"2022-05-30\",\n            \"InvoiceDate\": \"2022-05-01\",\n            \"PaymentDate\": \"2022-05-01\",\n            \"PaymentReference\": \"Payment for invoice #456\",\n            \"PostingDate\": \"2022-05-01\",\n            \"PropertyId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"Reference\": \"invoice #456\",\n            \"ReferenceId\": \"21929356\",\n            \"Remarks\": \"May Utility Bills\",\n            \"TotalAmount\": \"51.33\",\n            \"VendorId\": \"80c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"WorkOrderId\": \"61c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"PurchaseOrderId\": \"62c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"LineItems\": [\n              {\n                \"UnitId\": \"cf1df055-689f-437d-8cf0-3d9ae54beb86\",\n                \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\",\n                \"Description\": \"Electric bill\",\n                \"Amount\": \"37.98\"\n              },\n              {\n                \"UnitId\": \"cf1df055-689f-437d-8cf0-3d9ae54beb86\",\n                \"GlAccountId\": \"5658614e-8384-4cdd-8247-373247d3ac64\",\n                \"Description\": \"Gas bill\",\n                \"Amount\": \"13.35\"\n              },\n            ]\n          }\n        ]\n     }'\n"}],"requestBody":{"description":"Bill objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Bill.BulkCreate"}}}},"example":{"data":[{"AccountNumber":"1334567800","AttachmentURL":"https://developer.com/temp/76460145.pdf","CashAccountId":"41c5cb28-547f-11ec-bfa5-02975b268737","CheckMemo":"Account #1231234","DueDate":"2022-05-30","InvoiceDate":"2022-05-01","PaymentDate":"2022-05-01","PaymentReference":"payment reference for invoice #123","PostingDate":"2022-05-01","PropertyId":"71c5cb28-547f-11ec-bfa5-02975b268737","Reference":"invoice #123","ReferenceId":"76460145","Remarks":"May Utility Bills","TotalAmount":"60.31","VendorId":"80c5cb28-547f-11ec-bfa5-02975b268737","WorkOrderId":"61c5cb28-547f-11ec-bfa5-02975b268737","PurchaseOrderId":"62c5cb28-547f-11ec-bfa5-02975b268737","LineItems":[{"UnitId":"91c5cb28-547f-11ec-bfa5-02975b268737","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","Description":"Electric bill","Amount":"43.10"},{"UnitId":"91c5cb28-547f-11ec-bfa5-02985b268737","GlAccountId":"5658614e-8384-4cdd-8247-373247d3ac64","Description":"Gas bill","Amount":"17.21"}]},{"AttachmentURL":"https://developer.com/temp/21929356.pdf","CheckMemo":"Account #3697471","DueDate":"2022-05-30","InvoiceDate":"2022-05-01","PaymentDate":"2022-05-01","PaymentReference":"payment reference for invoice #123","PostingDate":"2022-05-01","PropertyId":"71c5cb28-547f-11ec-bfa5-02975b268737","Reference":"invoice #456","ReferenceId":"21929356","Remarks":"May Utility Bills","TotalAmount":"51.33","VendorId":"80c5cb28-547f-11ec-bfa5-02975b268737","WorkOrderId":"61c5cb28-547f-11ec-bfa5-02975b268737","PurchaseOrderId":"62c5cb28-547f-11ec-bfa5-02975b268737","LineItems":[{"UnitId":"cf1df055-689f-437d-8cf0-3d9ae54beb86","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","Description":"Electric bill","Amount":"37.98"},{"UnitId":"cf1df055-689f-437d-8cf0-3d9ae54beb86","GlAccountId":"5658614e-8384-4cdd-8247-373247d3ac64","Description":"Gas bill","Amount":"13.35"}]}]}}}},"responses":{"202":{"description":"Bills accepted","content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"properties":{"ReferenceId":{"type":"string","description":"Transient bill reference ID. There will be one object in the response for each bill in the request."},"successful":{"description":"Indicates whether or not the bill was created successfully","type":"boolean"},"errors":{"type":"array","description":"Errors for this bill if it was not created successfully","items":{"properties":{"attribute":{"type":"string","description":"Attribute containing the error (if applicable)"},"message":{"type":"string","description":"Error description"}}}},"data":{"type":"object","description":"Data object containing the bill's ID. Expand to view the bill's ID.","properties":{"Id":{"description":"Unique identifier of a successfully created bill","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19"}}}}}}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/bills/bulk/async":{"post":{"operationId":"bulkCreateBillAsync","summary":"Bulk Create Bills (Async)","description":"Asynchronously create multiple bills in bulk","tags":["Bills"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/bills/bulk/async' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"AttachmentURL\": \"https://developer.com/temp/76460145.pdf\",\n            \"AccountNumber\": \"1334567800\",\n            \"CashAccountId\": \"41c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"CheckMemo\": \"Account #1231234\",\n            \"DueDate\": \"2022-05-30\",\n            \"InvoiceDate\": \"2022-05-01\",\n            \"PaymentDate\": \"2022-05-01\",\n            \"PaymentReference\": \"Payment for invoice #123\",\n            \"PostingDate\": \"2022-05-01\",\n            \"PropertyId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"Reference\": \"invoice #123\",\n            \"ReferenceId\": \"76460145\",\n            \"Remarks\": \"May Utility Bills\",\n            \"TotalAmount\": \"60.31\",\n            \"VendorId\": \"80c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"WorkOrderId\": \"61c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"PurchaseOrderId\": \"62c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"LineItems\": [\n              {\n                \"UnitId\": \"91c5cb28-547f-11ec-bfa5-02975b268737\",\n                \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\",\n                \"Description\": \"Electric bill\",\n                \"Amount\": \"43.10\"\n              },\n              {\n                \"UnitId\": \"91c5cb28-547f-11ec-bfa5-02985b268737\",\n                \"GlAccountId\": \"5658614e-8384-4cdd-8247-373247d3ac64\",\n                \"Description\": \"Gas bill\",\n                \"Amount\": \"17.21\"\n              }\n            ]\n          }\n        ]\n     }'\n"}],"requestBody":{"description":"Bill objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Bill.BulkCreateAsync"}}}}}}},"responses":{"202":{"description":"Bills accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk creation of bills"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient bill reference ID","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with the attempted bill creation","type":"array","items":{"properties":{"attribute":{"type":"string","description":"Attribute containing the error (if applicable)"},"message":{"type":"string","description":"Error description"}}}}}}}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/ca/bank_balances":{"get":{"operationId":"getCaBankBalances","summary":"List All Community Association Bank Account Balances","description":"Returns Community Association (CA) bank account balances that meet the filter criteria","tags":["Community Association Bank Balances"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/ca/bank_balances?filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cee' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for Community Association Bank Balances. All GET requests must include a filter for `[AssociationId]`.","style":"deepObject","schema":{"type":"object","required":["AssociationId"],"properties":{"AssociationId":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc","description":"Example: `filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the association attached to the bank account. Filter the results based on one or more `AssociationId`s. Multiple values should be separated by commas.","format":"uuid"}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CABankBalances"}}}}}}},"/ca/board_members":{"get":{"operationId":"getCaBoardMembers","summary":"List All Community Association Board Members","description":"Returns Community Association (CA) Board of Director Member's details that meet the filter criteria","tags":["Community Association Board Members"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/ca/board_members?filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cee\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for Community Association Board of Director Members. All GET requests must include a filter for `[AssociationId]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"AssociationId":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc","description":"Example: `filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the association the CA board member belongs to. Filter the results based on one or more `AssociationId`s. Multiple values should be separated by commas.","format":"uuid"},"LastUpdatedAtFrom":{"type":"string","format":"date-time","example":"2021-12-15T16:30:46Z","description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns CA board member records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC)."}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CABoardMembers"}}}}}}},"/ca/homeowners":{"get":{"operationId":"getCaHomeowners","summary":"List All Community Association Homeowners","description":"Returns Community Association (CA) homeowners that meet the filter criteria","tags":["Community Association Homeowners"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/ca/homeowners?filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cee\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for Community Association homeowners. All GET requests must include a filter for `[Id]` (if available), or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"AssociationId":{"type":"string","description":"Example: `filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the association the CA homeowner belongs to. Filter the results based on one or more `AssociationId`s. Multiple values should be separated by commas.","format":"uuid"},"Id":{"type":"string","description":"Example: `filters[Id]=537b8cd8-381d-11ea-827d-b083fed171ad,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the CA homeowner. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","format":"uuid"},"LastUpdatedAtFrom":{"type":"string","format":"date-time","description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns CA homeowner records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"Status":{"example":"Current,Past,Future,Notice,Foreclosure","$ref":"#/components/schemas/CAHomeowner.Status"}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CAHomeowners"}}}}}}},"/ca/homeowner_ledgers":{"get":{"operationId":"getCaHomeownerLedgers","summary":"List All Community Association Homeowner Ledgers","description":"Returns all Community Association ledgers that meet the filter criteria","tags":["Community Association Homeowner Ledgers"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/ca/homeowner_ledgers?filters[DateFrom]=2020-12-15\u0026filters[DateTo]=2020-12-16\u0026filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cee' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for Community Association Homeowner Ledgers. All GET requests must include a filter for `[AssociationId]`, `[DateFrom]`, and `[DateTo]`.","style":"deepObject","schema":{"type":"object","required":["DateTo","DateFrom","AssociationId"],"properties":{"DateFrom":{"description":"Example: `filters[DateFrom]=2021-12-15` \u003cbr\u003e Date range from the date stipulated. `DateFrom` and `DateTo` can be at most 2 years apart.","type":"string","format":"date"},"DateTo":{"description":"Example: `filters[DateTo]=2021-12-15` \u003cbr\u003e Date range to the date stipulated. `DateFrom` and `DateTo` can be at most 2 years apart.","type":"string","format":"date"},"AssociationId":{"description":"Example: `filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the Community Association associated with the homeowner ledger. Filter the results based on a single value.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns transaction records that have been updated since the date provided. The value must adhere to the ISO 8601 format: `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"},"OccupancyId":{"description":"Example: `filters[OccupancyId]=1abcae23-c343-466e-adc9-923455789cba,1abcde43-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the occupancy associated with the homeowner ledger. Filter the results based on one or more OccupancyIds. Multiple values should be separated by commas.","type":"string","format":"uuid"}}},"required":true}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CaHomeownerLedgers"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/ca/renters":{"get":{"operationId":"getCaRenters","summary":"List All Community Association Renters","description":"Returns Community Association (CA) renters that meet the filter criteria","tags":["Community Association Renters"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/ca/renters?filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cee\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for Community Association renters. All GET requests must include a filter for `[Id]`, `[AssociationId]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"type":"string","example":"234cde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc","description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the CA renter. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","format":"uuid"},"AssociationId":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc","description":"Example: `filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the association related to the CA renter. Filter the results based on one or more `AssociationId`s. Multiple values should be separated by commas.","format":"uuid"},"LastUpdatedAtFrom":{"type":"string","format":"date-time","example":"2021-12-15T16:30:46Z","description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns CA Renter records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CARenters"}}}}}}},"/ca/rules":{"get":{"operationId":"getCaRules","summary":"List All Community Association Rules","description":"Returns Community Association (CA) rules that meet the filter criteria","tags":["Community Association Rules"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/ca/rules?filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cee\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for Community Association rules. All GET requests must include a filter for `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","required":["LastUpdatedAtFrom"],"properties":{"AssociationId":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,537b8cd8-381d-11ea-827d-b083fed171ad","description":"Example: `filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cba,537b8cd8-381d-11ea-827d-b083fed171ad` \u003cbr\u003e Unique identifier of the association to retrieve the rule(s) for. Filter the results based on one or more `AssociationId`s. Multiple values should be separated by commas.","format":"uuid"},"LastUpdatedAtFrom":{"type":"string","format":"date-time","example":"2021-12-15T16:30:46Z","description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns CA rule records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CARules"}}}}}}},"/ca/units":{"get":{"operationId":"getCaUnits","summary":"List All Community Association Units","description":"Returns all Community Association (CA) units that meet the filter criteria","tags":["Community Association Units"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/ca/units?filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cee\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for Community Association units. All GET requests must include a filter for `[Id]` (if available), or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","required":["LastUpdatedAtFrom"],"properties":{"AssociationId":{"type":"string","description":"Example: `filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the Community Association the unit belongs to. Filter the results based on a single value.","format":"uuid"},"LastUpdatedAtFrom":{"type":"string","format":"date-time","description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns Community Association unit records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CAUnits"}}}}}}},"/ca/violations":{"get":{"operationId":"getCaViolations","summary":"List All Community Association Violations","description":"Returns Community Association (CA) violations that meet the filter criteria","tags":["Community Association Violations"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/ca/violations?filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cee\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for Community Association violations. All GET requests must include a filter for `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","required":["LastUpdatedAtFrom"],"properties":{"AssociationId":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc","description":"Example: `filters[AssociationId]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the association to retrieve violations for. Filter the results based on one or more `AssociationId`s. Multiple values should be separated by commas.","format":"uuid"},"InspectionDateFrom":{"type":"string","example":"2021-12-15","description":"Example: `filters[InspectionDateFrom]=2021-12-15` \u003cbr\u003e Returns CA violations records with an inspection date from the date specified. Valid format is \"YYYY-MM-DD\" e.g. \"2021-12-15\"."},"InspectionDateTo":{"type":"string","example":"2021-12-15","description":"Example: `filters[InspectionDateFrom]=2022-01-15` \u003cbr\u003e Returns CA violations records with an inspection date up to the date specified. Valid format is \"YYYY-MM-DD\" e.g. \"2022-01-15\"."},"LastUpdatedAtFrom":{"type":"string","format":"date-time","example":"2021-12-15T16:30:46Z","description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns CA violations records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CAViolations"}}}}}},"post":{"operationId":"createCaViolation","summary":"Create Community Association Violations ","description":"Create a Community Association (CA) Violation","tags":["Community Association Violations"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/ca/violations' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"UnitId\": \"1abcde23-c543-456e-abc9-123456789cba\",\n        \"ViolatedRuleId\": \"1abcde23-c543-456e-abc9-123456789cba\",\n        \"InspectionDate\": \"2023-05-11\",\n        \"Description\": \"This is a description\",\n        \"Status\": \"In Progress\",\n        \"MarkedForEscalation\": false\n     }'\n"}],"requestBody":{"description":"Violation object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CAViolations.Create"},"example":{"Description":"sample description","InspectionDate":"2022-05-11","MarkedForEscalation":false,"Status":"In Progress","UnitId":"2ca1275d-2db6-4013-87a6-686dedc705c3","ViolatedRuleId":"f303fb98-6d0d-4d01-b876-a3ebfa8f8294"}}}},"responses":{"201":{"description":"Created a Violation","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the created violation","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"422"},"message":{"type":"string","description":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}},"example":{"code":422,"message":"Cannot create the violation with the given unit id"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/ca/violations/{violationId}/attachments":{"post":{"operationId":"createCaViolationAttachment","summary":"Create Community Association Violations Attachment","description":"Create Community Association (CA) Violations Attachment","tags":["Community Association Violations"],"parameters":[{"name":"violationId","in":"path","description":"The CA violation to which the file will be attached","required":true,"schema":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","format":"uuid"}}],"requestBody":{"description":"Violation Attachment object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"}}},"example":{"File":"/path/to/file.pdf"}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/ca/violations/1abcde23-c543-456e-abc9-123456789cba/attachments' \\\n--header 'Authorization: Basic {Auth}' \\\n--header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n--form 'File=@\"/path/to/file.pdf\"'\n"}],"responses":{"201":{"description":"Uploaded an attachment","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the CA violation attachment","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/ca/violations/{violationId}":{"patch":{"operationId":"updateCaViolation","summary":"Update Community Association Violations","description":"Update a Community Association (CA) Violation","tags":["Community Association Violations"],"parameters":[{"name":"violationId","in":"path","description":"Unique identifier of the violation to update","required":true,"schema":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","format":"uuid"}}],"requestBody":{"description":"Violation object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CAViolations.Update"},"example":{"Description":"updated description","InspectionDate":"2023-05-11","MarkedForEscalation":false,"Status":"Corrected","UnitId":"2ca1275d-2db6-4013-87a6-686dedc705c3","ViolatedRuleId":"f303fb98-6d0d-4d01-b876-a3ebfa8f8294"}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n    --request PATCH 'https://api.appfolio.com/api/v0/ca/violations/1abcde23-c543-456e-abc9-123456789cba' \\\n    --header 'Authorization: Basic {Auth}' \\\n    --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n    --header 'Content-Type: application/json' \\\n    --data-raw '{\n      \"UnitId\": \"1abcde23-c543-456e-abc9-123456789cba\",\n      \"ViolatedRuleId\": \"1abcde23-c543-456e-abc9-123456789cba\",\n      \"InspectionDate\": \"2023-05-11\",\n      \"Description\": \"Updated description\",\n      \"MarkedForEscalation\": false\n      \"Status\": \"Corrected\"\n    }'\n"}],"responses":{"200":{"description":"Updated a Violation","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated CA violation","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Violation Rule cannot be found with id 1abcde23-c543-456e-abc9-123456789cba"}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/charges":{"get":{"operationId":"getCharges","summary":"List All Charges","description":"Returns all open charges for all occupants residing at the property","tags":["Charges"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/charges?filters[Id]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[PropertyId]=3b5344d0-482b-4b50-b30f-2dd67412b517' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Authorization: Basic {Auth}'\n"}],"parameters":[{"name":"filters","in":"query","style":"deepObject","description":"Filters for charges. All GET requests must include a filter for `[Id]` or `[PropertyId]`","schema":{"type":"object","properties":{"Id":{"description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cee,1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the charge. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc","format":"uuid"},"PropertyId":{"description":"Example: `filters[PropertyId]=3b5344d0-482b-4b50-b30f-2dd67412b517` \u003cbr\u003e Unique identifier of the property or association related to the charge. Filter the results based on a single value.","type":"string","format":"uuid"}}},"required":true}],"responses":{"204":{"description":"The request was successful. No content will be included in the response payload.","content":{"application/json":{"example":{}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}}}},"post":{"operationId":"createCharge","summary":"Create Charges","description":"Create a single charge","tags":["Charges"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/charges' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"AmountDue\": \"43.10\",\n        \"ChargedOn\": \"2022-02-01\",\n        \"PostedOn\": \"2022-03-01\",\n        \"Description\": \"Pool reservation charge\",\n        \"GlAccountId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"OccupancyId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n     }'\n"}],"requestBody":{"description":"Charge object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Charge.Create"},"example":{"AmountDue":"43.12","ChargedOn":"2022-02-01","PostedOn":"2022-03-01","Description":"sample description","GlAccountId":"71c5cb28-547f-11ec-bfa5-02975b268737","OccupancyId":"71c5cb28-547f-11ec-bfa5-02975b268737"}}}},"responses":{"201":{"description":"Created a Charge","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the created charge","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"422"},"message":{"type":"string","description":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}},"example":{"code":422,"message":"Cannot post charge in closed accounting period"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/charges/bulk":{"post":{"operationId":"bulkCreateCharge","deprecated":true,"summary":"Bulk Create Charges","description":"Create multiple charges in bulk. Deprecated: use **bulkCreateChargeAsync** (`POST /charges/bulk/async`) instead.","tags":["Charges"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/charges/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"AmountDue\": \"43.10\",\n            \"ChargedOn\": \"2020-02-01\",\n            \"Description\": \"Parking charge\",\n            \"GlAccountId\": \"11c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"OccupancyId\": \"21c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"ReferenceId\": \"31c5cb28-547f-11ec-bfa5-02975b268737\",\n          },\n          {\n            \"AmountDue\": \"31.10\",\n            \"ChargedOn\": \"2022-02-01\",\n            \"Description\": \"Pool reservation charge\",\n            \"GlAccountId\": \"41c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"OccupancyId\": \"51c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"ReferenceId\": \"61c5cb28-547f-11ec-bfa5-02975b268737\"\n          }\n        ]\n     }'\n"}],"requestBody":{"description":"Charge objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Charge.BulkCreate"}}}},"example":{"data":[{"AmountDue":"43.10","ChargedOn":"2022-02-01","PostedOn":"2022-03-01","Description":"Pool reservation charge","GlAccountId":"71c5cb28-547f-11ec-bfa5-02975b268737","OccupancyId":"71c5cb28-547f-11ec-bfa5-02975b268737","ReferenceId":"71c5cb28-547f-11ec-bfa5-02975b268737"},{"AmountDue":"21.50","ChargedOn":"2024-02-01","Description":"Parking charge","GlAccountId":"91c5cb28-147f-11ec-bfa5-02975b268735","OccupancyId":"91c5cb28-147f-11ec-bfa5-02975b268735","ReferenceId":"71c5cb28-547f-11ec-bfa5-02975b268737"}]}}}},"responses":{"202":{"description":"Charges accepted","content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer."},"successful":{"description":"Indicates whether or not the charge was created successfully","type":"boolean"},"errors":{"type":"array","description":"Errors for this charge if it was not created successfully","items":{"properties":{"attribute":{"type":"string","description":"Attribute containing the error (if applicable)"},"message":{"type":"string","description":"Error description"}}}},"data":{"type":"object","description":"If charge was created successfully, hash object with charge ID","properties":{"Id":{"description":"Unique identifier for a successfully created charge","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19"}}}}}}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/charges/bulk/async":{"post":{"operationId":"bulkCreateChargeAsync","summary":"Bulk Create Charges (Async)","description":"Create multiple charges in bulk asynchronously. Returns a Job ID that can be used to track the status of the job via the Jobs List endpoint.","tags":["Charges"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/charges/bulk/async' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"AmountDue\": \"43.10\",\n            \"ChargedOn\": \"2020-02-01\",\n            \"Description\": \"Parking charge\",\n            \"GlAccountId\": \"11c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"OccupancyId\": \"21c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"ReferenceId\": \"31c5cb28-547f-11ec-bfa5-02975b268737\"\n          },\n          {\n            \"AmountDue\": \"31.10\",\n            \"ChargedOn\": \"2022-02-01\",\n            \"Description\": \"Pool reservation charge\",\n            \"GlAccountId\": \"41c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"OccupancyId\": \"51c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"ReferenceId\": \"61c5cb28-547f-11ec-bfa5-02975b268737\"\n          }\n        ]\n     }'\n"}],"requestBody":{"description":"Charge objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Charge.BulkCreate"}}}},"example":{"data":[{"AmountDue":"43.10","ChargedOn":"2022-02-01","PostedOn":"2022-03-01","Description":"Pool reservation charge","GlAccountId":"71c5cb28-547f-11ec-bfa5-02975b268737","OccupancyId":"71c5cb28-547f-11ec-bfa5-02975b268737","ReferenceId":"71c5cb28-547f-11ec-bfa5-02975b268737"},{"AmountDue":"21.50","ChargedOn":"2024-02-01","Description":"Parking charge","GlAccountId":"91c5cb28-147f-11ec-bfa5-02975b268735","OccupancyId":"91c5cb28-147f-11ec-bfa5-02975b268735","ReferenceId":"91c5cb28-147f-11ec-bfa5-02975b268735"}]}}}},"responses":{"202":{"description":"Charges accepted for processing","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","description":"Unique identifier of the job that is processing the charges. Use the Jobs List endpoint to track the status of the job.","format":"uuid"}}}}}},"422":{"description":"Validation errors","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer."},"successful":{"type":"boolean","description":"Always false for validation errors"},"errors":{"type":"array","description":"Validation errors for this charge","items":{"properties":{"attribute":{"type":"string","description":"Attribute containing the error"},"message":{"type":"string","description":"Error description"}}}}}}}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/charges/{ChargeId}/attachments":{"post":{"operationId":"createChargeAttachment","summary":"Create Charge Attachment","description":"Upload an attachment to a charge","tags":["Charges"],"parameters":[{"name":"ChargeId","in":"path","description":"The charge to which the file will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/charges/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/attachments' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --form 'File=@\"/path/to/file.pdf\"'\n"}],"requestBody":{"description":"Attachment object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"}}},"example":{"File":"/path/to/file.pdf"}}}},"responses":{"201":{"description":"Uploaded an attachment","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the charge attachment","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/ca/associations":{"get":{"operationId":"getCommunityAssociations","summary":"List All Community Associations","description":"Returns all Community Associations that meet the filter criteria","tags":["Community Associations"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/ca/associations?filters[Id]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for Community Associations. All GET requests must include a filter for `[Id]` (if available), or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the Community Association(s) that are sought for retrieval. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns Community Association records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommunityAssociations"}}}}}}},"/corporate_entities":{"get":{"operationId":"getCorporateEntities","summary":"List All Corporate Entities","description":"Returns all corporate entities that meet the filter criteria. Corporate entities represent properties with PropertyType = \"Corporate\" used for corporate accounting purposes.","tags":["Corporate Entities"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/corporate_entities?filters[Id]=1abcde234-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for corporate entities. All GET requests must include a filter for `[Id]`, `[Ids]`, or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"description":"Example: `filters[Id]=234abcde-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the corporate entity. Filter the results based on a single `Id`.","type":"string","format":"uuid"},"Ids":{"description":"Example: `filters[Ids]=234abcde-c543-456e-abc9-123456789abc,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique identifiers of the corporate entities that are sought for retrieval. Filter the results based on one or more `Ids`. Multiple values should be separated by commas.","type":"string","format":"uuid"},"Name":{"description":"Example: `filters[Name]=Acme Corporation` \u003cbr\u003e Filter the results by the display name of the corporate entity. This filter can be combined with required filters for more specific searches.","type":"string"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns corporate entity records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"},"HiddenAtFrom":{"description":"Example: `filters[HiddenAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns corporate entity records that have been hidden since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC). When this filter is used, only hidden entities are returned.","type":"string","format":"date-time"},"IncludeHidden":{"description":"Example: `filters[IncludeHidden]=true` \u003cbr\u003e Indicates whether or not to include corporate entities hidden by an AppFolio Property Manager user in the response. By default, hidden entities are excluded.","type":"boolean"}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CorporateEntities"}}}}}}},"/corporate_entities/{CorporateEntityId}/attachments":{"post":{"operationId":"createCorporateEntityAttachment","summary":"Create Corporate Entity Attachment","description":"Upload an attachment to a corporate entity","tags":["Corporate Entities"],"parameters":[{"name":"CorporateEntityId","in":"path","description":"The corporate entity to which the file will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/corporate_entities/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/attachments' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --form 'File=@\"/path/to/file.pdf\"'\n"}],"requestBody":{"description":"Attachment object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"}}},"example":{"File":"/path/to/file.pdf"}}}},"responses":{"201":{"description":"Uploaded an attachment","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the corporate entity attachment","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/corporate_entities/attachments":{"get":{"operationId":"listCorporateEntityAttachments","summary":"List All Corporate Entity Attachments","description":"Returns all attachments associated with a corporate entity","tags":["Corporate Entities"],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for corporate entity attachments. All GET requests must include a filter for `[CorporateEntityId]`, or `[CreatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"CreatedAtFrom":{"type":"string","format":"date-time","description":"Returns attachments created on or after the specified date. The value must adhere to the ISO 8601 format YYYY-MM-DDThh:mm:ssZ and the default time zone is Coordinated Universal Time (UTC).","example":"filters[CreatedAtFrom]=2021-12-15T16:30:46Z"},"CorporateEntityId":{"type":"string","format":"uuid","description":"Unique identifier of the corporate entity associated with the attachment. Can only filter by one corporate entity at a time.","example":"filters[CorporateEntityId]=1abcde23-c543-456e-abc9-123456789cba"}}},"required":false}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/corporate_entities/attachments?page[size]=10\u0026page[number]=2\u0026filters[CorporateEntityId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[CreatedAtFrom]=2020-12-14T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CorporateEntity.Attachments"}}}}}}},"/corporate/gl_accounts/bulk":{"post":{"operationId":"bulkCreateCorporateGlAccounts","summary":"Bulk Create Corporate General Ledger Accounts","description":"Create Corporate General Ledger Account in bulk","tags":["Corporate General Ledger Accounts"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/corporate/gl_accounts/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"ReferenceId\": \"12321\",\n            \"Name\": \"Stack Corporate GL Income\",\n            \"Number\": \"1500-0000\",\n            \"Type\": \"income\",\n            \"OffsetAccountId\": \"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19\",\n            \"ParentGlAccountId\": \"57e04805-01c4-4e39-adc9-c74ff9ddc8d8\",\n          },\n          {\n            \"ReferenceId\": \"12322\",\n            \"Name\": \"Stack Corporate GL Cash\",\n            \"Number\": \"1400-0000\",\n            \"Type\": \"cash\",\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Corporate General Ledger account objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CorporateGlAccount.BulkCreate"}}}},"example":{"data":[{"ReferenceId":"12321","Name":"Stack Corporate GL Income","Number":"1400-0000","Type":"income","ParentGlAccountId":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8","OffsetAccountId":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19"}]}}}},"responses":{"202":{"description":"Corporate General Ledger accounts accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk creation of Corporate GL accounts"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual GL account in the bulk-creation of Corporate GL accounts.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted Corporate GL account creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"Name","message":"Name has already been taken"}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/custom_fields":{"get":{"operationId":"getCustomFields","summary":"List All Custom Fields","description":"Returns all custom fields that meet the filter criteria","tags":["Custom Fields"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/custom_fields?filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for custom fields. All GET requests must include a filter for `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","required":["LastUpdatedAtFrom"],"properties":{"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns custom field records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomFields"}}}}}}},"/delinquent_charges":{"get":{"operationId":"getDelinquentCharges","summary":"List All Delinquent Charges","description":"Returns all delinquent charges that meet the filter criteria","tags":["Delinquent Charges"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/delinquent_charges?filters[Id]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cee,3b5344d0-482b-4b50-b30f-2dd67412b517' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Authorization: Basic {Auth}'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","style":"deepObject","description":"Filters for delinquent charges","schema":{"type":"object","properties":{"Id":{"description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cee,1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the delinquent charge. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc","format":"uuid"},"PropertyId":{"description":"Example: `filters[PropertyId]=3b5344d0-482b-4b50-b30f-2dd67412b517` \u003cbr\u003e Unique identifier of the property or association related to the delinquent charge. Filter the results based on a single value.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","format":"uuid"}}},"required":false}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelinquentCharges"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}}}}},"/folders":{"get":{"operationId":"getfolders","summary":"List All Folders","description":"List endpoint to display the attachment folders belonging to a given entity (property, unit, vendor, owner, or tenant).","tags":["Folders"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/folders?filters[EntityType]=Property\u0026filters[EntityId]=3b5344d0-482b-4b50-b30f-2dd67412b517' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Authorization: Basic {Auth}'\n"}],"parameters":[{"name":"filters","in":"query","style":"deepObject","description":"Optional filters for folders. With no filters, all folders on supported entity types are returned.","schema":{"type":"object","properties":{"EntityType":{"description":"Example: `filters[EntityType]=Property` \u003cbr\u003e Optionally restrict to folders belonging to this entity type. One of `Property`, `Unit`, `Vendor`, `Owner`, or `Occupancy`.","type":"string","example":"Property","enum":["Property","Unit","Vendor","Owner","Occupancy"]},"EntityId":{"description":"Example: `filters[EntityId]=3b5344d0-482b-4b50-b30f-2dd67412b517` \u003cbr\u003e Unique identifier (UUID) of a specific entity whose folders should be returned. Requires `EntityType`.","type":"string","example":"3b5344d0-482b-4b50-b30f-2dd67412b517","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2022-04-01T10:10:10Z` \u003cbr\u003e Optionally return only folders updated after this time (ISO 8601).","type":"string","example":"2022-04-01T10:10:10Z","format":"date-time"}}},"required":false},{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Folders"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}}}}},"/folders/bulk":{"post":{"operationId":"bulkCreateFolders","summary":"Bulk Create Folders","description":"Create attachment folders in bulk for properties, units, vendors, owners, or occupancies","tags":["Folders"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/folders/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"ReferenceId\": \"1\",\n            \"FolderName\": \"Lease Documents\",\n            \"EntityType\": \"Property\",\n            \"EntityId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\"\n          },\n          {\n            \"ReferenceId\": \"2\",\n            \"FolderName\": \"Move-In Inspections\",\n            \"EntityType\": \"Unit\",\n            \"EntityId\": \"9f2b6a14-6d3c-4f8e-9c21-4a7d5e8b1c30\"\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Folder objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Folder.BulkCreate"}}}},"example":{"data":[{"ReferenceId":"1","FolderName":"Lease Documents","EntityType":"Property","EntityId":"71c5cb28-547f-11ec-bfa5-02975b268737"},{"ReferenceId":"2","FolderName":"Move-In Inspections","EntityType":"Unit","EntityId":"9f2b6a14-6d3c-4f8e-9c21-4a7d5e8b1c30"}]}}}},"responses":{"202":{"description":"Folder creation accepted (async processing)","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","description":"Job ID for tracking the async folder creation process","example":"0d250350-4cd2-4580-9dc3-8f6c1c2bee50"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual folders in the bulk-creation process.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted folder creation","type":"array","items":{"properties":{"attribute":{"description":"The attribute that caused the error","type":"string"},"message":{"description":"Error message describing the issue","type":"string"}}}}}}}}},"example":{"errors":[{"ReferenceId":"1","successful":false,"errors":[{"attribute":"FolderName","message":"FolderName is required"}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/gl_accounts":{"get":{"operationId":"getGlAccounts","summary":"List All General Ledger Accounts","description":"Returns all General Ledger (GL) accounts that meet the filter criteria","tags":["General Ledger Accounts"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/gl_accounts?filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z\u0026filters[IsCorporateAccount]=true' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"filters","in":"query","description":"Filters for General Ledger accounts","style":"deepObject","schema":{"type":"object","properties":{"AvailableTo":{"type":"string","description":"Example: `filters[AvailableTo]=Corporate` \u003cbr\u003e Filters GL accounts by availability. Accepted values are `Property`, `Corporate`, and `PropertyAndCorporate`."},"IsCorporateAccount":{"type":"boolean","description":"Example: `filters[IsCorporateAccount]=true` \u003cbr\u003e Indicates whether the GL account is a corporate or non-corporate (standard) GL account. Do not include this query parameter in the request to return both corporate and non-corporate GL accounts."},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns GL account records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"},"PropertyId":{"type":"string","description":"Example: `filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789cba ` \u003cbr\u003e Unique identifier of the property to filter by. Filter the results based on one or more PropertyIds. Multiple values should be separated by commas.","format":"uuid"}}},"required":false}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlAccounts"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/gl_accounts/bulk":{"post":{"operationId":"bulkCreateGlAccounts","summary":"Bulk Create General Ledger Accounts","description":"Create General Ledger Account in bulk","tags":["General Ledger Accounts"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/gl_accounts/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"ReferenceId\": \"12321\",\n            \"Name\": \"Stack GL Income\",\n            \"Number\": \"1500-0000\",\n            \"Type\": \"income\",\n            \"FundAccount\": \"Reserve\",\n            \"OffsetAccountId\": \"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19\",\n            \"ParentGlAccountId\": \"57e04805-01c4-4e39-adc9-c74ff9ddc8d8\",\n          },\n          {\n            \"ReferenceId\": \"12322\",\n            \"Name\": \"Stack GL Cash\",\n            \"Number\": \"1400-0000\",\n            \"Type\": \"cash\",\n            \"FundAccount\": \"Operating\",\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"General Ledger account objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/GlAccount.BulkCreate"}}}},"example":{"data":[{"ReferenceId":"12321","Name":"Stack GL Income","Number":"1400-0000","Type":"income","FundAccount":"Reserve","ParentGlAccountId":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8","OffsetAccountId":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19"}]}}}},"responses":{"202":{"description":"General Ledger accounts accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk creation of GL accounts"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual GL account in the bulk-creation of GL accounts.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted GL account creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"FundAccount","message":"Invalid values passed. Must not duplicate ReferenceId."},{"attribute":"Name","message":"Required parameter Address1 is missing."}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/gl_details":{"get":{"operationId":"getGlDetail","summary":"List All General Ledger Details","description":"Returns all General Ledger (GL) Details that meet the filter criteria.\u003cbr\u003e\u003cbr\u003eNote: Results for a given query are cached for up to ~15 minutes, so a recent change may not appear immediately on an identical repeated request.","tags":["General Ledger Details"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/gl_details?filters[DateFrom]=2020-12-15\u0026filters[DateTo]=2020-12-16\u0026filters[GlAccountId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cee,1abcde23-c543-456e-abc9-123456789cbb\u0026filters[AccountingBasis]=Cash' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for General Ledger details. All requests must include a filter for `[DateFrom]` and `[DateTo]`. `[PropertyId]` is required unless both `[LastUpdatedOnFrom]` and `[LastUpdatedOnTo]` are provided and the time range between them is 2 days or less.","style":"deepObject","schema":{"type":"object","required":["DateTo","DateFrom"],"properties":{"AccountingBasis":{"description":"Default: `Cash` \u003cbr\u003e Example: `filters[AccountingBasis]=Accrual` \u003cbr\u003e The account basis of the GL account. Filter the results based on a single value. Valid values are 'Accrual' or 'Cash'.","type":"string"},"DateFrom":{"description":"Example: `filters[DateFrom]=2021-12-15` \u003cbr\u003e Date range from the date stipulated. `DateFrom` and `DateTo` can be at most 3 months apart.","type":"string","format":"date"},"DateTo":{"description":"Example: `filters[DateTo]=2021-12-15` \u003cbr\u003e Date range to the date stipulated. `DateFrom` and `DateTo` can be at most 3 months apart.","type":"string","format":"date"},"GlAccountId":{"description":"Example: `filters[GlAccountId]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the GL Account. Filter the results based on one or more GL Accounts. Multiple values should be separated by commas.","type":"string","format":"uuid"},"PropertyId":{"description":"Example: `filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the property associated with the General Ledger Detail. Filter the results based on one or more PropertyIds. Multiple values should be separated by commas. This parameter is required unless both `LastUpdatedOnFrom` and `LastUpdatedOnTo` are provided and the time range between them is 2 days or less.","type":"string","format":"uuid"},"LastUpdatedOnFrom":{"description":"Example: `filters[LastUpdatedOnFrom]=2021-12-15` \u003cbr\u003e Returns General Ledger Detail records that have been updated since the date provided.","type":"string","format":"date"},"LastUpdatedOnTo":{"description":"Example: `filters[LastUpdatedOnTo]=2021-12-15` \u003cbr\u003e Returns General Ledger Detail records that have been updated before or at the date provided.","type":"string","format":"date"}}},"required":true}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlDetails"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/import_uids/bulk":{"post":{"operationId":"bulkCreateImportUids","summary":"Bulk Create Import UIDs","description":"Create import UIDs in bulk to link records to their unique IDs from the source database during an onboarding","tags":["Import UIDs"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/import_uids/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"ReferenceId\": \"1\",\n            \"ParentType\": \"Property\",\n            \"ParentId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"ImportUid\": \"12345678901234567\"\n          },\n          {\n            \"ReferenceId\": \"2\",\n            \"ParentType\": \"Unit\",\n            \"ParentId\": \"71c5cb28-547f-11ec-bfa5-02975b268738\",\n            \"ImportUid\": \"12345678901234568\"\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Import UID objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ImportUid.BulkCreate"}}}},"example":{"data":[{"ReferenceId":"1","ParentType":"Property","ParentId":"71c5cb28-547f-11ec-bfa5-02975b268737","ImportUid":"12345678901234567"}]}}}},"responses":{"202":{"description":"Import UIDs creation accepted (async processing)","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","description":"Job ID for tracking the async import UID creation process","example":"0d250350-4cd2-4580-9dc3-8f6c1c2bee50"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual import UIDs in the bulk-creation process.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted import UID creation","type":"array","items":{"properties":{"attribute":{"description":"The attribute that caused the error","type":"string"},"message":{"description":"Error message describing the issue","type":"string"}}}}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"ParentType","message":"ParentType is required"}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/inspections/{InspectionId}/attachments":{"post":{"operationId":"createInspectionAttachment","summary":"Create Inspection Attachment","description":"Upload an attachment to a inspection","tags":["Inspections"],"parameters":[{"name":"InspectionId","in":"path","description":"The inspection to which the file will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"97c65ff4-489f-11f0-8dea-ebc7235a5ab4"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/inspections/97c65ff4-489f-11f0-8dea-ebc7235a5ab4/attachments' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --form 'File=@\"/path/to/file.pdf\"'\n"}],"requestBody":{"description":"Attachment object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"}}},"example":{"File":"/path/to/file.pdf"}}}},"responses":{"201":{"description":"Uploaded an attachment","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the inspection attachment","type":"string","example":"97c65ff4-489f-11f0-8dea-ebc7235a5ab4","format":"uuid"}}}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"The InspectionId provided was not found. Please verify the InspectionId and try again."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/inspections":{"post":{"operationId":"createInspection","summary":"Create Inspection","description":"Create a new inspection","tags":["Inspections"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/inspections' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"Name\": \"Inspection Name\",\n        \"URL\": \"https://example.com/inspections/54321\",\n        \"InspectionDate\": \"2025-06-30\",\n        \"UnitId\": \"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19\"\n      }'\n"}],"requestBody":{"description":"Inspection object","required":true,"content":{"application/json":{"schema":{"properties":{"inspection":{"$ref":"#/components/schemas/Inspection.Create"}}},"example":{"inspection":{"Name":"Inspection Name","URL":"https://example.com/inspections/54321","InspectionDate":"2025-06-30","UnitId":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19"}}}}},"responses":{"201":{"description":"Inspection created","content":{"application/json":{"schema":{"properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier for the created inspection"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"422"},"message":{"type":"string","description":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}},"example":{"code":422,"message":"Required parameter PropertyId, UnitId, or OccupancyId is missing."}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/inspections/bulk":{"post":{"operationId":"bulkCreateInspections","summary":"Bulk Create Inspections","description":"Create Inspection in bulk","tags":["Inspections"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/inspections/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"ReferenceId\": \"54321\",\n            \"Name\": \"Inspection Name\",\n            \"URL\": \"https://example.com/inspections/54321\",\n            \"InspectionDate\": \"2025-06-30\",\n            \"UnitId\": \"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19\"\n          },\n          {\n            \"ReferenceId\": \"12322\",\n            \"Name\": \"Move out Inspection\",\n            \"URL\": \"https://example.com/inspections/213\",\n            \"InspectionDate\": \"2025-03-20\",\n            \"OccupancyId\": \"57e04805-9f44-42f7-b01f-cfb2ec92ee19\"\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Inspection objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Inspections.BulkCreate"}}}},"example":{"data":[{"ReferenceId":"54321","Name":"Inspection Name","URL":"https://example.com/inspections/54321","InspectionDate":"2025-06-30","UnitId":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19"}]}}}},"responses":{"202":{"description":"Inspections accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk creation of Inspections"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual inspection in the bulk-creation of inspections.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted inspection creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"message":"Inspectable must exist"}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/inspections/{InspectionId}":{"patch":{"operationId":"updateInspection","summary":"Update Inspection","description":"Update an inspection record","tags":["Inspections"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n    --request PATCH 'https://api.appfolio.com/api/v0/inspections/2f7232fb-e23b-11ee-8c46-06b43963c6f4' \\\n    --header 'Authorization: Basic {Auth}' \\\n    --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n    --header 'Content-Type: application/json' \\\n    --data-raw '{\n      \"Name\": \"New Name\",\n      \"URL\": \"https://partner.com/inspections/updated-123\",\n      \"InspectionDate\": \"2025-06-10\",\n      \"Status\": \"DONE\"\n    }'\n"}],"parameters":[{"name":"InspectionId","in":"path","description":"Unique identifier of the inspection to update","required":true,"schema":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","format":"uuid"}}],"requestBody":{"description":"Attributes to update for the inspection","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Inspections.Update"},"example":{"Name":"New Name","URL":"https://partner.com/inspections/updated-123","InspectionDate":"2025-06-10","Status":"DONE"}}}},"responses":{"200":{"description":"Updated an inspection","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated inspection","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","format":"uuid"}}}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"The InspectionId provided was not found. Please verify the InspectionId and try again."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"422"},"message":{"type":"string","description":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}},"example":{"code":422,"message":"Invalid value passed. Acceptable values for Status are: NEW, IN PROGRESS, DONE, OUT FOR SIGNING, or SIGNED."}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}},"delete":{"operationId":"deleteInspection","summary":"Delete Inspection","description":"Delete an inspection record","tags":["Inspections"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n    --request DELETE 'https://api.appfolio.com/api/v0/inspections/2f7232fb-e23b-11ee-8c46-06b43963c6f4' \\\n    --header 'Authorization: Basic {Auth}' \\\n    --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"InspectionId","in":"path","description":"Unique identifier of the inspection to delete","required":true,"schema":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","format":"uuid"}}],"responses":{"204":{"description":"The request was successful. No content will be included in the response payload.","content":{"application/json":{"example":{}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"The InspectionId provided was not found. Please verify the InspectionId and try again."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/inventories":{"post":{"operationId":"createInventory","summary":"Create Inventory","description":"Create a new inventory item","tags":["Inventories"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/inventories' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"Name\": \"HVAC Filter\",\n        \"Cost\": \"15.50\",\n        \"Quantity\": \"25\",\n        \"LocationId\": \"630964fb-bc9b-4f9a-b649-01cfe309ccc2\",\n        \"Description\": \"20x25x1 air filter\",\n        \"PartNumber\": \"HVAC-20-25-1\",\n        \"Shelf\": \"A3\",\n        \"MarkUpType\": \"Percentage\",\n        \"MarkUp\": \"20.5\"\n      }'\n"}],"requestBody":{"description":"Inventory object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Inventory.Create"},"example":{"Name":"HVAC Filter","Cost":"15.50","Quantity":"25","LocationId":"630964fb-bc9b-4f9a-b649-01cfe309ccc2","Description":"20x25x1 air filter","PartNumber":"HVAC-20-25-1","Shelf":"A3","MarkUpType":"Percentage","MarkUp":"20.0"}}}},"responses":{"201":{"description":"Inventory created","content":{"application/json":{"schema":{"properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier for the created inventory item"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"422"},"message":{"type":"string","description":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}},"example":{"code":422,"message":"Required parameter Name is missing."}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}},"get":{"operationId":"getInventories","summary":"List All Inventories","description":"Returns all inventory items that meet the filter criteria","tags":["Inventories"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/inventories?filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"filters","in":"query","description":"Filters for Inventories. All GET requests must include a filter for `[Id]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns inventory records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"},"Id":{"type":"string","description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the inventory item to filter by. Filter the results based on one or more Ids. Multiple values should be separated by commas.","format":"uuid"},"IncludeHidden":{"description":"Example: `filters[IncludeHidden]=true` \u003cbr\u003e Indicates whether or not to include inventory items that have been hidden","type":"boolean"}}},"required":true}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Inventories"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/inventories/bulk":{"post":{"operationId":"bulkCreateInventories","summary":"Bulk Create Inventories","description":"Create inventory items in bulk. Returns a JobId that can be used to retrieve the results of the bulk creation.","tags":["Inventories"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/inventories/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"ReferenceId\": \"ref-1\",\n            \"Name\": \"HVAC Filter\",\n            \"Cost\": \"15.50\",\n            \"Quantity\": \"25\",\n            \"LocationId\": \"630964fb-bc9b-4f9a-b649-01cfe309ccc2\"\n          },\n          {\n            \"ReferenceId\": \"ref-2\",\n            \"Name\": \"Paint\",\n            \"Cost\": \"8.99\",\n            \"Quantity\": \"12\",\n            \"LocationId\": \"630964fb-bc9b-4f9a-b649-01cfe309cdd3\"\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Inventory objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Inventories.BulkCreate"}}}},"example":{"data":[{"ReferenceId":"ref-1","Name":"HVAC Filter","Cost":"15.50","Quantity":"25","LocationId":"630964fb-bc9b-4f9a-b649-01cfe309ccc2"}]}}}},"responses":{"202":{"description":"Inventories accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk creation of inventory items"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual inventory items in the bulk creation.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted inventory creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"ref-1","successful":false,"errors":[{"attribute":"Name","message":"Required parameter Name is missing."}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/inventories/{Id}":{"patch":{"operationId":"updateInventory","summary":"Update Inventory","description":"Update an inventory item. At least one attribute or relationship must be provided.","tags":["Inventories"],"parameters":[{"name":"Id","in":"path","description":"Unique identifier of the inventory item to update","required":true,"schema":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","format":"uuid"}}],"requestBody":{"description":"Update inventory object. At least one attribute must be provided.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"Name":{"type":"string","description":"The name of the inventory item."},"Quantity":{"type":"number","description":"The quantity of the inventory item."},"Reorder":{"type":"integer","description":"The reorder threshold for the inventory item."},"Cost":{"type":"number","description":"The cost of the inventory item."},"Description":{"type":"string","description":"A description of the inventory item."},"PartNumber":{"type":"string","description":"The part number of the inventory item."},"Shelf":{"type":"string","description":"The bin/shelf location of the inventory item."},"Category":{"type":"string","description":"The category of the inventory item."},"LocationId":{"type":"string","format":"uuid","description":"Unique identifier of the inventory location."},"VendorId":{"type":"string","format":"uuid","description":"Unique identifier of the vendor."},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the GL account (must be expense type)."},"MarkUpType":{"type":"string","enum":["Percentage","Fixed Amount"],"description":"The markup type."},"MarkUp":{"type":"number","description":"The markup value."}}},"example":{"Name":"Updated Inventory Item","Quantity":10,"Cost":"25.00"}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/inventories/1abcde23-c543-456e-abc9-123456789cba' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Name\": \"Updated Inventory Item\",\n       \"Quantity\": 10,\n       \"Cost\": \"25.00\"\n     }'\n"}],"responses":{"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"200":{"description":"Updated the inventory item","content":{"application/json":{"schema":{"properties":{"Id":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","description":"Unique identifier of the updated inventory item","format":"uuid"}}}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested inventory not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Inventory specified, but no parameter to update was passed."}}}}}},"delete":{"operationId":"deleteInventory","summary":"Delete Inventory","description":"Delete an inventory item","tags":["Inventories"],"parameters":[{"name":"Id","in":"path","description":"Unique identifier of the inventory item to delete","required":true,"schema":{"type":"string","format":"uuid","example":"630964fb-bc9b-4f9a-b649-01cfe309cb52"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request DELETE 'https://api.appfolio.com/api/v0/inventories/630964fb-bc9b-4f9a-b649-01cfe309cb52' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"responses":{"204":{"description":"The request was successful. No content will be included in the response payload.","content":{"application/json":{"example":{}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Inventory not found"}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"This item has been used on a Work Order and cannot be deleted."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/inventory_locations":{"get":{"operationId":"getInventoryLocations","summary":"List All Inventory Locations","description":"Returns all inventory locations that meet the filter criteria","tags":["Inventory Locations"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/inventory_locations?filters[Id]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"filters","in":"query","description":"Filters for Inventory Locations. All GET requests must include a filter for `[Id]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns inventory location records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"},"Id":{"type":"string","description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789cba ` \u003cbr\u003e Unique identifier of the inventory location to filter by. Filter the results based on one or more Ids. Multiple values should be separated by commas.","format":"uuid"}}},"required":true}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InventoryLocations"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}},"post":{"operationId":"createInventoryLocation","summary":"Create an Inventory Location","description":"Creates a new inventory location","tags":["Inventory Locations"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location \\\n     --request POST 'https://api.appfolio.com/api/v0/inventory_locations' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Name\": \"Main Warehouse\",\n       \"Description\": \"Primary storage location\",\n       \"PropertyId\": \"1abcde23-c543-456e-abc9-123456789cba\"\n     }'\n"}],"requestBody":{"description":"Inventory Location object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InventoryLocations.Create"},"example":{"Name":"Main Warehouse","Description":"Primary storage location","PropertyId":"1abcde23-c543-456e-abc9-123456789cba"}}}},"responses":{"201":{"description":"Created an Inventory Location","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the created inventory location","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Required parameter Name is missing."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/inventory_locations/bulk":{"post":{"operationId":"bulkCreateInventoryLocations","summary":"Bulk Create Inventory Locations","description":"Create inventory locations in bulk","tags":["Inventory Locations"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location \\\n     --request POST 'https://api.appfolio.com/api/v0/inventory_locations/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"data\": [\n         {\n           \"ReferenceId\": \"54321\",\n           \"Name\": \"Main Warehouse\",\n           \"Description\": \"Primary storage location\",\n           \"PropertyId\": \"1abcde23-c543-456e-abc9-123456789cba\"\n         },\n         {\n           \"ReferenceId\": \"54322\",\n           \"Name\": \"Secondary Storage\"\n         }\n       ]\n     }'\n"}],"requestBody":{"description":"Inventory Location objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InventoryLocations.BulkCreate"}}}},"example":{"data":[{"ReferenceId":"54321","Name":"Main Warehouse","Description":"Primary storage location","PropertyId":"1abcde23-c543-456e-abc9-123456789cba"}]}}}},"responses":{"202":{"description":"Inventory locations accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk creation of inventory locations"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual inventory locations in the bulk-creation of inventory locations.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted inventory location creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"54321","successful":false,"errors":[{"attribute":"Name","message":"Required parameter Name is missing."}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/inventory_locations/{Id}":{"patch":{"operationId":"updateInventoryLocation","summary":"Update Inventory Location","description":"Update an inventory location. At least one attribute or relationship must be provided.","tags":["Inventory Locations"],"parameters":[{"name":"Id","in":"path","description":"Unique identifier of the inventory location to update","required":true,"schema":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","format":"uuid"}}],"requestBody":{"description":"Update inventory location object. At least one attribute must be provided.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"Name":{"type":"string","description":"The name of the inventory location."},"Description":{"type":"string","description":"A description of the inventory location."},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property associated with the inventory location."}}},"example":{"Name":"Storage Room A","Description":"Main storage room on the first floor","PropertyId":"1abcde23-c543-456e-abc9-123456789cba"}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/inventory_locations/1abcde23-c543-456e-abc9-123456789cba' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Name\": \"Storage Room A\",\n       \"Description\": \"Main storage room on the first floor\"\n     }'\n"}],"responses":{"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"200":{"description":"Updated the inventory location","content":{"application/json":{"schema":{"properties":{"Id":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","description":"Unique identifier of the updated inventory location","format":"uuid"}}}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested location not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Location specified, but no parameter to update was passed."}}}}}}},"/jobs":{"get":{"operationId":"getjobs","summary":"List All Jobs","description":"Retrieve the status and per-record results of asynchronous bulk operations.\n\nWhen you submit a request to an asynchronous bulk endpoint, it responds immediately with a `JobId`. Use this endpoint to poll that job until it reaches a terminal status (`finished` or `failed`), then read the per-record outcomes from `Result`.\n\n#### Retrieving a job requires its Id\n\n`filters[Id]` is required — jobs cannot be listed or discovered without it. Store the `JobId` from the bulk response when you submit the request. If you lose it, the results cannot be recovered.\n\n#### Results are available for 7 days\n\nJob results are retained for 7 days from when the bulk request was submitted, then deleted. After deletion this endpoint returns `200` with an empty `data` array, which is indistinguishable from an unrecognized `Id`. Treat this endpoint as a short-lived collection point rather than a queryable history: read the results and store them on your side.\n\n#### Polling rate limit\n\nThis endpoint is limited to 5 requests per 15 seconds, which is stricter than the general API rate limits. Space out your polling accordingly, and prefer batching several job `Id`s into a single request over issuing a separate request per job.\n","tags":["Jobs"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/jobs?filters[Id]=1abcde23-c543-456e-abc9-123456789cee,3b5344d0-482b-4b50-b30f-2dd67412b517' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Authorization: Basic {Auth}'\n"}],"parameters":[{"name":"filters","in":"query","style":"deepObject","description":"Filters for jobs","schema":{"type":"object","required":["Id"],"properties":{"Id":{"description":"Example: `filters[Id]=3b5344d0-482b-4b50-b30f-2dd67412b517,1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the job. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc","format":"uuid"}}},"required":true},{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Jobs"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}}}}},"/journal_entries":{"get":{"operationId":"getJournalEntries","summary":"List All Journal Entries","description":"Returns all journal entries that meet the filter criteria","tags":["Journal Entries"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/journal_entries?page[size]=10\u0026page[number]=2\u0026filters[Id]=1abcde23-c543-456e-abc9-123456789cbaZ\u0026filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cbaZ\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for journal entries. All GET requests must include a filter for `[Id]` (if available), or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","required":["LastUpdatedAtFrom"],"properties":{"Id":{"type":"string","description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the journal entries sought for retrieval. Filter the results based on one or more `Id`s. Multiple values should be separated by commas","format":"uuid"},"LastUpdatedAtFrom":{"type":"string","format":"date-time","description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns AppFolio Property Manager journal entry records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).."},"PropertyId":{"type":"string","description":"Example: `filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique Identifier of the property or association related to the the journal entry. Filter the results based on one or more PropertyIds. Multiple values should be separated by commas.","format":"uuid"}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JournalEntries"}}}}}},"post":{"operationId":"createJournalEntry","summary":"Create Journal Entries","description":"Create a journal entry","tags":["Journal Entries"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/journal_entries' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"EntryDate\": \"2022-02-01\",\n        \"PropertyId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"ReferenceNumber\": \"123\",\n        \"Remarks\": \"Payroll November\",\n        \"AccountingBasis\": \"All\",\n        \"ScheduledReversalDate\": \"2022-03-01\",\n        \"LineItems\": [\n          {\n            \"Credit\": \"43.10\",\n            \"Debit\": null,\n            \"Description\": \"sample description\",\n            \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\",\n          },\n          {\n            \"Credit\": null,\n            \"Debit\": \"43.10\",\n            \"Description\": \"sample description\",\n            \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\",\n          },\n        ]\n     }'\n"}],"requestBody":{"description":"Journal Entry object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JournalEntry.Create"},"example":{"EntryDate":"2022-02-01","PropertyId":"71c5cb28-547f-11ec-bfa5-02975b268737","ReferenceNumber":"123","Remarks":"Payroll November","AccountingBasis":"All","ScheduledReversalDate":"2022-03-01","LineItems":[{"Credit":"43.10","Debit":null,"Description":"sample description","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08"},{"Credit":null,"Debit":"43.10","Description":"sample description","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08"}]}}}},"responses":{"201":{"description":"Created a Journal Entry","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the created journal entry","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/journal_entries/{JournalEntryId}":{"patch":{"operationId":"updateJournalEntry","summary":"Update Journal Entries","description":"Update a journal entry","tags":["Journal Entries"],"parameters":[{"name":"JournalEntryId","in":"path","description":"Unique identifier of the journal entry to update","required":true,"schema":{"type":"string","example":"9933b9bc-3910-417d-bdf2-8884b63ccf97","format":"uuid"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/journal_entries/2e67d04f-e02f-449a-9b61-694636189c04' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"EntryDate\": \"2022-02-01\",\n        \"PropertyId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"Remarks\": \"Payroll November\",\n        \"AccountingBasis\": \"All\",\n        \"ScheduledReversalDate\": \"2022-03-01\",\n        \"LineItems\": [\n          {\n            \"Credit\": \"43.10\",\n            \"Debit\": null,\n            \"Description\": \"sample description\",\n            \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\",\n          },\n          {\n            \"Credit\": null,\n            \"Debit\": \"43.10\",\n            \"Description\": \"sample description\",\n            \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\",\n          },\n        ]\n     }'\n"}],"requestBody":{"description":"Journal Entry object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JournalEntry.Update"},"example":{"EntryDate":"2022-02-01","PropertyId":"71c5cb28-547f-11ec-bfa5-02975b268737","AccountingBasis":"All","ScheduledReversalDate":"2022-03-01","LineItems":[{"Credit":"43.10","Debit":null,"Description":"sample description","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08"},{"Credit":null,"Debit":"43.10","Description":"sample description","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08"}],"Remarks":"Payroll November"}}}},"responses":{"200":{"description":"Updated a Journal Entry","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated journal entry","type":"string","example":"2e67d04f-e02f-449a-9b61-694636189c04","format":"uuid"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Property not found"}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/journal_entries/bulk":{"post":{"operationId":"bulkCreateJournalEntries","summary":"Bulk Create Journal Entries","description":"Create journal entries in bulk","tags":["Journal Entries"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/journal_entries/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"EntryDate\": \"2022-02-01\",\n            \"PropertyId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"ReferenceId\": \"1\",\n            \"ReferenceNumber\": \"123\",\n            \"Remarks\": \"Example remarks\",\n            \"AccountingBasis\": \"All\",\n            \"ScheduledReversalDate\": \"2022-03-01\",\n            \"LineItems\": [\n              {\n                \"Credit\": \"43.10\",\n                \"Debit\": null,\n                \"Description\": \"sample description\",\n                \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\",\n              },\n              {\n                \"Credit\": null,\n                \"Debit\": \"43.10\",\n                \"Description\": \"sample description 2\",\n                \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\",\n              },\n            ]\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Journal Entry objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/JournalEntry.BulkCreate"}}}},"example":{"data":[{"EntryDate":"2022-02-01","PropertyId":"71c5cb28-547f-11ec-bfa5-02975b268737","ReferenceId":"1","ReferenceNumber":"123","Remarks":"Example remarks","AccountingBasis":"All","ScheduledReversalDate":"2022-03-01","LineItems":[{"Credit":"43.10","Debit":null,"Description":"sample description","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08"},{"Credit":null,"Debit":"43.10","Description":"sample description 2","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08"}]}]}}}},"responses":{"202":{"description":"Journal Entries accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk creation of journal entries"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual journal entries in the bulk-creation of journal entries.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted journal entry creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"EntryDate","message":"Required parameter EntryDate is missing."}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/journal_entries/{JournalEntryId}/attachments":{"post":{"operationId":"createJournalEntryAttachment","summary":"Create Journal Entry Attachment","description":"Upload an attachment to a journal entry","tags":["Journal Entries"],"parameters":[{"name":"JournalEntryId","in":"path","description":"The journal entry to which the file will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/journal_entries/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/attachments' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --form 'File=@\"/path/to/file.pdf\"'\n"}],"requestBody":{"description":"Attachment object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"}}},"example":{"File":"/path/to/file.pdf"}}}},"responses":{"201":{"description":"Uploaded an attachment","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the journal_entries attachment","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/late_fee_policies":{"get":{"operationId":"getLateFeePolicies","summary":"List All Late Fee Policies","description":"Returns all late fee policies that meet the filter criteria","tags":["Late Fee Policies"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/late_fee_policies?filters[Id]=fabcde23-c543-456e-abc9-123456789cba\u0026filters[PropertyId]=12bcde23-c543-456e-abc9-123456789cba\u0026filters[PartyType]=Property\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for late fee policies. All GET requests must include a filter for `[Id]`, or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"description":"Example: `filters[Id]=bca5de23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier for the late fee policies. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","format":"uuid"},"PropertyId":{"description":"Example: `filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cee,bca5de23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the property associated with the late fee policy. Filter the results based on one or more `PropertyId`s. Multiple values should be separated by commas. For SFR Properties, a single property-based policy will be included in the response. For a Multi-family, the response will include a property-based (default) policy along with any occupancy-based policies to residents of the property.","type":"string","format":"uuid"},"OccupancyId":{"description":"Example: `filters[OccupancyId]=1abcde23-c543-456e-abc9-123456789cee,bca5de23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the occupancy associated with the late fee policy. Filter the results based on one or more `OccupancyId`s. Multiple values should be separated by commas. Must not be provided when `PartyType` is Property.","type":"string","format":"uuid"},"PartyType":{"description":"Example: `filters[PartyType]=Property` \u003cbr\u003e Returns late fee policy records that are associated with the type provided. Must be either Occupancy or Property.","type":"string","example":"Property"},"EffectiveOnFrom":{"description":"Example: `filters[EffectiveOnFrom]=2020-12-15` \u003cbr\u003e Returns late fee policy records that have started since the date provided.","type":"string","format":"date"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z` \u003cbr\u003e Returns late fee policy records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":true}],"responses":{"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LateFeePolicies"}}}}}}},"/late_fee_policies/bulk":{"post":{"operationId":"bulkCreateLateFeePolicies","summary":"Bulk Create Late Fee Policies","description":"Create late fee policies in bulk","tags":["Late Fee Policies"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/late_fee_policies/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"PropertyId\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\",\n            \"ReferenceId\": \"1\",\n            \"EligibleCharges\": \"Every Charge\",\n            \"FeeType\": \"Flat\",\n            \"FlatAmount\": 150.0,\n            \"GracePeriodType\": \"Fixed Period\",\n            \"GracePeriodValue\": 3,\n            \"LateFeeGraceBalance\": 200,\n            \"LateFeePerDay\": 5.0,\n            \"MaxDailyLateFeesAmount\": 50,\n            \"PolicyEffectiveOn\": \"2026-02-08\",\n          },\n          {\n            \"OccupancyId\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\",\n            \"ReferenceId\": \"2\",\n            \"EligibleCharges\": 'All Recurring Charges',\n            \"FeeType\": \"Percentage\",\n            \"GracePeriodType\": \"Fixed Day of Month\",\n            \"GracePeriodValue\": 5,\n            \"LateFeeGraceBalance\": 300,\n            \"LateFeePerDay\": 15.0,\n            \"MaxDailyLateFeesAmount\": 75,\n            \"Percentage\": 10.0,\n            \"PolicyEffectiveOn\": \"2026-02-08\",\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Late Fee Policy objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LateFeePolicy.BulkCreate"}}}},"example":{"data":[{"PropertyId":"1bc8de4e-db50-4463-85fc-3a381f3d3e51","ReferenceId":"1","EligibleCharges":"Every Charge","FeeType":"Flat","FlatAmount":150.0,"GracePeriodType":"Fixed Period","GracePeriodValue":3,"LateFeeGraceBalance":200,"LateFeePerDay":5.0,"MaxDailyLateFeesAmount":50,"PolicyEffectiveOn":"2026-02-08"},{"OccupancyId":"1bc8de4e-db50-4463-85fc-3a381f3d3e51","ReferenceId":"2","EligibleCharges":"All Recurring Charges","FeeType":"Percentage","GracePeriodType":"Fixed Day of Month","GracePeriodValue":5,"LateFeeGraceBalance":300,"LateFeePerDay":15.0,"MaxDailyLateFeesAmount":75,"Percentage":10.0,"PolicyEffectiveOn":"2026-02-08"}]}}}},"responses":{"202":{"description":"Late Fee Policies accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk creation of late fee policies"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual late fee policies in the bulk-creation of late fee policies.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted late fee policy creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"PropertyId","message":"not found"}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/leads":{"get":{"operationId":"getLeads","summary":"List All Leads","description":"Returns all leads that meet the filter criteria","tags":["Leads"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/leads?filters[Id]=fabcde23-c543-456e-abc9-123456789cba\u0026filters[PropertyId]=12bcde23-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":100}},"required":false},{"name":"filters","in":"query","description":"Filters for leads. All GET requests must include a filter for `[Id]` (if available), or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"description":"Example: `filters[Id]=bca5de23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier for the lead. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z` \u003cbr\u003e Returns lead records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"},"PropertyId":{"description":"Example: `filters[PropertyId]=eea5de23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the property associated with the lead. Filter the results based on one or more PropertyIds. Multiple values should be separated by commas.","type":"string","format":"uuid"}}},"required":false}],"responses":{"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Leads"}}}}}},"post":{"operationId":"createLead","summary":"Create Leads","description":"Create a lead","tags":["Leads"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["FirstName","LastName","PropertyId"],"properties":{"AdditionalOccupants":{"type":"integer","description":"The number of other potential occupants of the residency"},"AssignedUserId":{"type":"string","description":"The AppFolio Property Manager user responsible for the lead. Reference the **Users** endpoint for any necessary associations.","format":"uuid"},"Bathrooms":{"type":"string","format":"decimal","description":"The number of desired bathrooms"},"Bedrooms":{"type":"integer","description":"The number of desired bedrooms"},"CreatedAt":{"type":"string","format":"date-time","description":"The date the lead was created. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"CreditScore":{"type":"string","description":"The self-reported credit score of the interested party"},"DesiredMoveIn":{"type":"string","format":"date","description":"The date the prospective resident desires to move in"},"FirstName":{"type":"string","description":"The first name of the interested person"},"Email":{"type":"string","description":"The email address of the interested person"},"HasCats":{"type":"boolean","description":"Indicates whether or not the interested person has cat(s)"},"HasDogs":{"type":"boolean","description":"Indicates whether or not the interested person has dog(s)"},"HasOtherPet":{"type":"boolean","description":"Indicates whether or not the interested person has other pet(s)"},"LastName":{"type":"string","description":"The last name of the interested person"},"MaxRent":{"type":"string","format":"decimal","description":"The max amount the interested person is willing to pay monthly for rent"},"Messages":{"type":"array","description":"Array of objects representing messages sent about a lead","items":{"properties":{"PropertyId":{"type":"string","example":"630964fb-bc9b-4f9a-b649-01cfe309cb52","description":"Unique identifier of the property associated with the message","format":"uuid"},"UnitId":{"type":"string","example":"630964fb-bc9b-4f9a-b649-01cfe309cb52","description":"Unique identifier of the unit associated with the message","format":"uuid"},"Message":{"type":"string","example":"This is a message","description":"The content of the message sent by the lead"},"Source":{"type":"string","example":"Website","description":"The source of the message"},"Timestamp":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date and time the message was sent, in Coordinated Universal Time (UTC)"}}}},"MiddleInitial":{"type":"string","description":"The middle initial of the interested person"},"MonthlyIncome":{"type":"string","format":"decimal","description":"The self-reported monthly income of interested person"},"PhoneNumber":{"type":"string","description":"The phone number of the interested person"},"PropertyId":{"type":"string","description":"Unique identifier of the property associated with the lead","format":"uuid"},"Source":{"type":"string","description":"The mechanism through which this lead was submitted"},"Status":{"type":"string","enum":["active","cold","inactive","waitlisted"],"description":"Indicates the current phase of engagement with a prospective resident\n#### Status Options\n| Options    | Description                                                                                                                                                                                             |\n|------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| active     | A prospective resident is interested in a unit or property                                                                                                                                                |\n| cold       | A prospective resident has ceased to show interest                                                                                                                                                                      |\n| inactive   | A prospective resident is unqualified, or has stated a reason for their lack of interest |\n| waitlisted | A prospective resident is interested in a unit or property, but there are currently no units available that fit their interests. If a prospect submits an additional lead, the status will revert to \"active\" |\n"},"UnitIds":{"type":"array","items":{"type":"string"},"description":"Unique identifier of the unit(s) that the interested party is interested in"}}},"example":{"AdditionalOccupants":1,"AssignedUserId":"123cde23-c543-456e-abc9-123456789cba","Bathrooms":"2.5","Bedrooms":2,"CreatedAt":"2021-12-15T16:30:46Z","CreditScore":"720 to 850","DesiredMoveIn":"2021-12-31","Email":"sample@example.com","FirstName":"John","HasCats":true,"HasDogs":false,"HasOtherPet":false,"LastName":"Doe","MaxRent":"2200.00","MiddleInitial":"","MonthlyIncome":"6600.00","PhoneNumber":"(310) 555-0194","Messages":[{"PropertyId":"233cde23-c543-456e-abc9-123456789cba","Message":"I am interested in this property","Source":"Website","Timestamp":"2021-09-27T11:33:35Z"},{"UnitId":"1abcde23-c543-456e-abc9-123456789cba","Message":"I am interested in this unit","Source":"Website","Timestamp":"2021-09-27T11:33:35Z"}],"PropertyId":"233cde23-c543-456e-abc9-123456789cba","Source":"Website","Status":"active","UnitIds":["1abcde23-c543-456e-abc9-123456789cba","234abcde-c543-456e-abc9-123456789abc"]}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/leads' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"AdditionalOccupants\": 1,\n        \"Bathrooms\": \"2.5\",\n        \"Bedrooms\": 2,\n        \"CreatedAt\": \"2021-12-15T16:30:46Z\",\n        \"CreditScore\": \"850\",\n        \"DesiredMoveIn\": \"2021-12-31\",\n        \"Email\": \"sample@example.com\",\n        \"FirstName\": \"John\",\n        \"HasCats\": true,\n        \"HasDogs\": false,\n        \"HasOtherPet\": false,\n        \"LastName\": \"Walker\",\n        \"MaxRent\": \"2200.00\",\n        \"Messages\": [\n          {\n            \"PropertyId\": \"47b15bb4-8997-a97c-0af14a764744\",\n            \"Message\": \"I am interested in this property\",\n            \"Source\": \"Website\",\n            \"Timestamp\": \"2021-09-27T11:33:35Z\"\n          },\n          {\n            \"UnitId\": \"1abcde23-c543-456e-abc9-123456789cba\",\n            \"Message\": \"I am interested in this unit\",\n            \"Source\": \"Website\",\n            \"Timestamp\": \"2021-09-27T11:33:35Z\"\n          }\n        ],\n        \"MiddleInitial\": \"\",\n        \"MonthlyIncome\": \"6600.00\",\n        \"PhoneNumber\": \"(310) 555-0194\",\n        \"PropertyId\": \"47b15bb4-8997-a97c-0af14a764744\",\n        \"Source\": \"Website\",\n        \"Status\": \"active\",\n        \"UnitIds\": [\"1abcde23-c543-456e-abc9-123456789cba\", \"234abcde-c543-456e-abc9-123456789abc\"]\n     }'\n"}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"201":{"description":"Created a Lead","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the created lead. If `Duplicate` is true, it is the unique identifier of the original lead that was updated.","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec929e19","format":"uuid"},"Duplicate":{"type":"boolean","example":false,"description":"Indicates whether or not the lead is a duplicate of an existing lead. Leads are marked as duplicates if a lead was submitted from a party with the same contact information (phone number or email) that is already associated with a lead with the same `PropertyId`. If `Duplicate` is true, the original lead will be updated rather than a new lead being created."},"OriginalLeadId":{"type":"string","example":null,"description":"ID of the existing lead this lead duplicates. The ID attribute of the newly created lead will be distinct from its duplicate.","format":"uuid","deprecated":true}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"422"},"message":{"type":"string","description":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}},"example":{"code":422,"message":"One of the following parameters is required: PropertyId, FirstName, or LastName."}}}}}}},"/leads/{leadId}":{"patch":{"operationId":"updateLead","summary":"Update Lead","description":"Update a lead","tags":["Leads"],"parameters":[{"name":"leadId","in":"path","description":"Unique identifier of the lead to update","required":true,"schema":{"type":"string","example":"cc113767-a69e-11ea-abac-0a41ffc49f5e","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"AdditionalOccupants":{"type":"integer","description":"The number of other potential occupants of the residency"},"AssignedUserId":{"type":"string","description":"The AppFolio Property Manager user assigned to the lead. A `null` value passed to `AssignedUserId` will unassign the user previously assigned to the lead. Omitting `AssignedUserId` from the request body will not update the assigned user. Reference the **Users** endpoint for any necessary associations.","format":"uuid"},"Bathrooms":{"type":"string","format":"decimal","description":"The number of desired bathrooms"},"Bedrooms":{"type":"integer","description":"The number of desired bedrooms"},"CreatedAt":{"type":"string","format":"date-time","description":"The date the lead was created. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"CreditScore":{"type":"string","description":"The self-reported credit score of the interested party"},"DesiredMoveIn":{"type":"string","format":"date","description":"The date the prospective resident desires to move in"},"FirstName":{"type":"string","description":"The first name of the interested person"},"Email":{"type":"string","description":"The email address of the interested person"},"HasCats":{"type":"boolean","description":"Indicates whether or not the interested person has cat(s)"},"HasDogs":{"type":"boolean","description":"Indicates whether or not the interested person has dog(s)"},"HasOtherPet":{"type":"boolean","description":"Indicates whether or not the interested person has other pet(s)"},"InactiveReason":{"$ref":"#/components/schemas/Lead.InactiveReason"},"LastName":{"type":"string","description":"The last name of the interested person"},"MaxRent":{"type":"string","format":"decimal","description":"The max amount the interested person is willing to pay monthly for rent"},"MiddleInitial":{"type":"string","description":"The middle initial of the interested person"},"MonthlyIncome":{"type":"string","format":"decimal","description":"The self-reported monthly income of interested person"},"PhoneNumber":{"type":"string","description":"The phone number of the interested person"},"Source":{"type":"string","description":"The mechanism through which this lead was submitted"},"Status":{"type":"string","enum":["active","cold","inactive","waitlisted"],"description":"Indicates the current phase of engagement with a prospective resident\n#### Status Options\n| Options    | Description                                                                                                                                                                                             |\n|------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| active     | A prospective resident is interested in a unit or property                                                                                                                                                |\n| cold       | A prospective resident has ceased to show interest                                                                                                                                                                      |\n| inactive   | A prospective resident is unqualified, or has stated a reason for their lack of interest If the status is set to inactive, you must specify the reason the lead was marked inactive by setting a value for \"InactiveReason\" |\n| waitlisted | A prospective resident is interested in a unit or property, but there are currently no units available that fit their interests. If a prospect submits an additional lead, the status will revert to \"active\" |\n"},"UnitIds":{"type":"array","items":{"type":"string"},"description":"Array of `UnitIds` to update on the lead. To maintain a unit's association with a lead, pass in that unit's `Id`.\u003cbr /\u003ePassing an empty array of `UnitIds` will drop all unit interests from the lead.\u003cbr /\u003ePassing in `null` for this array or omitting it from the request will not change the units."}}},"example":{"AdditionalOccupants":1,"AssignedUserId":"123cde23-c543-456e-abc9-123456789cba","Bathrooms":"2.5","Bedrooms":2,"CreatedAt":"2021-12-15T16:30:46Z","CreditScore":"650","DesiredMoveIn":"2021-12-31","Email":"sample@example.com","FirstName":"John","HasCats":true,"HasDogs":false,"HasOtherPet":false,"LastName":"Doe","MaxRent":"2200.00","MiddleInitial":"","MonthlyIncome":"6600.00","PhoneNumber":"(310) 555-0194","Source":"Website","Status":"active","UnitIds":["1abcde23-c543-456e-abc9-123456789cba","234abcde-c543-456e-abc9-123456789abc"]}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/leads/ae32dc0a-9f44-42f7-b01f-cfb2ec929e19' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"AdditionalOccupants\": 1,\n        \"Bathrooms\": \"2.5\",\n        \"Bedrooms\": 2,\n        \"CreatedAt\": \"2021-12-15T16:30:46Z\",\n        \"CreditScore\": \"850\",\n        \"DesiredMoveIn\": \"2021-12-31\",\n        \"HasCats\": false,\n        \"Source\": \"Website\",\n        \"Status\": \"active\",\n        \"UnitIds\": [\"1abcde23-c543-456e-abc9-123456789cba\", \"234abcde-c543-456e-abc9-123456789abc\"]\n     }'\n"}],"responses":{"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular lead."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"Updated a Lead","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated lead","type":"string","example":"ac32dc0a-9f44-42f7-b01f-cfb2ec929e19","format":"uuid"}}}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"integer","description":"404"},"message":{"type":"string","description":"The requested resource could not be not found."}}},"example":{"code":404,"message":"Requested parameter (LeadId) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Invalid value passed. Acceptable values for HasCats are: true, false."}}}}}}},"/leads/notes":{"get":{"operationId":"getLeadsNotes","summary":"List All Leads Notes","description":"Returns all notes for a lead that meet the filter criteria","tags":["Leads"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/leads/notes?filters[GuestCardId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for lead notes. All GET requests must include a filter for `[GuestCardId]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"GuestCardId":{"description":"Example: `filters[GuestCardId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e The unique identifier of the Guest Card to which the note will be attached. Guest Cards can be linked to multiple leads. Filter the results based on a single value.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns lead note records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Leads.Notes"}}}}}}},"/leads/{GuestCardId}/notes":{"post":{"operationId":"createLeadNote","summary":"Create Lead Note","description":"Add a note to a lead","tags":["Leads"],"parameters":[{"name":"GuestCardId","in":"path","description":"The unique identifier of the Guest Card to which the note will be attached. Guest Cards can be linked to multiple leads.","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/leads/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for lead\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the lead note. A lead note cannot exceed `65,535` characters."}}},"example":{"Body":"This rental application has been submitted on 11/11/2023"}}}},"responses":{"201":{"description":"Created a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the lead note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/leads/{GuestCardId}/notes/{Id}":{"patch":{"operationId":"updateLeadNote","summary":"Update Lead Note","description":"Update a note to a lead","tags":["Leads"],"parameters":[{"name":"GuestCardId","in":"path","description":"The unique identifier of the Guest Card to which the note will be attached. Guest Cards can be linked to multiple leads.","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d9"}},{"name":"Id","in":"path","description":"Unique identifier of the note to update","required":true,"schema":{"type":"string","format":"uuid","example":"45e04805-01c4-4e39-adc9-c75ff9ddc8d7"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/leads/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes/632b920c-e048-4a7b-b1f6-eddb6ad6d23c' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for lead - updating\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the lead note. A lead note cannot exceed `65,535` characters."}}},"example":{"Body":"This rental application has been submitted on 11/11/2023 - Updated"}}}},"responses":{"200":{"description":"Updated a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated lead note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular note."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (Lead Id or Note Id) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Required parameter Body is missing."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/leases":{"get":{"operationId":"getLeases","summary":"List All Leases","description":"Returns all leases that meet the filter criteria","tags":["Leases"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/leases?filters[LeaseId]=1abcde23-c543-456e-abc9-123456789cba' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Authorization: Basic {Auth}'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","style":"deepObject","description":"Filters for leases","schema":{"type":"object","properties":{"LeaseId":{"description":"Example: `filters[LeaseId]=1abcde23-c543-456e-abc9-123456789cee,1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the lease. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc","format":"uuid"},"OccupancyId":{"description":"Example: `filters[OccupancyId]=3b5344d0-482b-4b50-b30f-2dd67412b517` \u003cbr\u003e Unique identifier of the occupancy related to the lease. Filter the results based on multiple values.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2025-11-18T01:26:34Z` \u003cbr\u003e Returns Lease records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time","example":"2025-11-18T01:26:34Z"}}},"required":false}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Lease"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}}}}},"/leases/{LeaseId}":{"patch":{"operationId":"updateLease","summary":"Update Lease","description":"Update a lease. Note: `IsMtm` and `EndOn` are mutually exclusive and cannot be set in the same request.","tags":["Leases"],"parameters":[{"name":"LeaseId","in":"path","description":"Unique identifier of the lease to update","required":true,"schema":{"type":"string","example":"198d9391-7dca-4ce4-8255-391cf7e6297a","format":"uuid"}}],"requestBody":{"description":"Update lease object. At least one attribute must be provided. Note: `IsMtm` and `EndOn` are mutually exclusive and cannot be set in the same request.","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"EndOn":{"type":"string","format":"date","description":"The end date of the lease. The value must adhere to the ISO 8601 format `YYYY-MM-DD`. Cannot be set if `IsMtm` is `true`."},"IsMtm":{"type":"boolean","description":"Indicates if the lease is month-to-month. Cannot be set to `true` if `EndOn` is provided."},"RenewedOn":{"type":"string","format":"date","description":"The date the lease was renewed. The value must adhere to the ISO 8601 format `YYYY-MM-DD`."}}},"example":{"EndOn":"2026-12-31","RenewedOn":"2026-01-15"}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/leases/ac00dc0a-9f44-42f7-b01f-cfb2ec929e19' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"EndOn\": \"2026-12-31\",\n       \"RenewedOn\": \"2026-01-15\"\n     }'\n"}],"responses":{"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"200":{"description":"Updated the lease","content":{"application/json":{"schema":{"properties":{"Id":{"type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec929e19","description":"Unique identifier of the updated lease","format":"uuid"}}}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (LeaseId) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"IsMtm and EndOn are mutually exclusive. Cannot set both in the same request."}}}}}}},"/leases/renewal_pricings":{"get":{"operationId":"getLeaseRenewalPricings","summary":"List All Lease Renewal Pricings","description":"Returns all lease renewal pricing options that meet the filter criteria","tags":["Leases"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/leases/renewal_pricings?filters[LeaseId]=1abcde23-c543-456e-abc9-123456789cba' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Authorization: Basic {Auth}'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","style":"deepObject","description":"Filters for lease renewal pricings. `LeaseId` is required.","schema":{"type":"object","properties":{"LeaseId":{"description":"Example: `filters[LeaseId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the lease. Filter the results based on one or more lease UUIDs. Multiple values should be separated by commas.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc","format":"uuid"}}},"required":true}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenewalPricing"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/leases/renewal_pricings/bulk":{"put":{"operationId":"putBulkLeaseRenewalPricings","summary":"Bulk Put Lease Renewal Pricings","description":"Update approved renewal pricing options for leases in bulk","tags":["Leases"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PUT 'https://api.appfolio.com/api/v0/leases/renewal_pricings/bulk' \\\n    --header 'Authorization: Basic {Auth}' \\\n    --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n    --header 'Content-Type: application/json' \\\n    --data-raw '{\n      \"data\": [\n        {\n          \"LeaseId\": \"1abcde23-c543-456e-abc9-123456789cba\",\n          \"StartDate\": \"2025-05-01\",\n          \"Price\": 2100,\n          \"LeaseTerm\": 12\n        },\n        {\n          \"LeaseId\": \"1abcde23-c543-456e-abc9-123456789cba\",\n          \"StartDate\": \"2025-05-01\",\n          \"Price\": 2200,\n          \"LeaseTerm\": 6\n        }\n      ]\n    }'\n"}],"requestBody":{"description":"Lease renewal pricing objects","required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"LeaseId":{"type":"string","format":"uuid","description":"Unique identifier of the lease","example":"1abcde23-c543-456e-abc9-123456789cba"},"StartDate":{"type":"string","format":"date","description":"Start date of the renewal pricing option","example":"2025-05-01"},"Price":{"type":"number","description":"Monthly rent amount for the renewal option","example":2100},"LeaseTerm":{"type":"integer","description":"Lease term in months for the renewal option","example":12}},"required":["LeaseId","StartDate","Price","LeaseTerm"]}}},"required":["data"]}}}},"responses":{"202":{"description":"Accepted - Request has been queued for processing","content":{"application/json":{"schema":{"type":"object","properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the asynchronous job","example":"a965e7d8-a17d-11ec-b909-0242ac120002"}},"required":["JobId"]}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}}}}},"/listings":{"get":{"operationId":"getListings","summary":"List All Listings","description":"Returns all units that are not manually excluded, have no active occupancy with a move-out, notice, or move-in date, are currently advertised on the website or external listing platforms, and satisfy the filter criteria.","tags":["Listings"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/listings?filters[LastUpdatedAtFrom]=2022-10-01T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":100}},"required":false},{"name":"filters","in":"query","description":"Filters for listings. All GET requests must include a filter for `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","required":["LastUpdatedAtFrom"],"properties":{"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns listing records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time","example":"2022-10-01T16:30:46Z"},"PostedToWebsite":{"description":"Example: `filters[PostedToWebsite]=true` \u003cbr\u003e Returns listings posted (if PostedToWebsite is true) or not posted (if PostedToWebsite is false) to the AppFolio listings page.","type":"boolean","example":true}}},"required":true}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Listings"}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/mailing_letters":{"get":{"operationId":"getMailingLetters","summary":"List Mailing Letters","description":"Returns all mailing letters that meet the filter criteria","tags":["Mailing Letters"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n--request GET 'https://api.appfolio.com/api/v0/mailing_letters?filters[CreatedAtFrom]=2021-12-15T16:30:46Z\u0026filters[Id]=2f7232fb-e23b-11ee-8c46-06b43963c6f4' \\\n--header 'Authorization: Basic {Auth}' \\\n--header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for mailing letters. All GET requests must include a filter for `[CreatedAtFrom]`.","style":"deepObject","schema":{"type":"object","required":["CreatedAtFrom"],"properties":{"CreatedAtFrom":{"type":"string","format":"date-time","description":"Example: `filters[CreatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns letters created on or after the specified date. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"Id":{"type":"string","description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the letter. Filter the results based on one or more `Id`s. Multiple values should be separated by commas."},"Status":{"type":"string","enum":["New","Accepted","Not Accepted","Mailed","Canceled"],"description":"Example: `filters[Status]=new` \u003cbr\u003e The status of the mailing letter. Filter the results based on one or more statuses. Multiple values should be separated by commas.\n#### Status Options\n| Status Option | Type   | Description                                                          |\n|---------------|--------|----------------------------------------------------------------------|\n| New           | String | The letter has been created but not yet processed by the partner     |\n| Accepted      | String | The letter has been accepted by the partner for sending              |\n| Not Accepted  | String | The letter was not accepted due to a partner validation error        |\n| Mailed        | String | The letter was successfully mailed by the partner                    |\n| Canceled      | String | The letter was canceled by the customer in the partner's platform    |\n"}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MailingLetters"}}}}}}},"/mailing_letters/{mailingLetterId}":{"patch":{"operationId":"updateMailingLetter","summary":"Update Mailing Letter","description":"Update a mailing letter record","tags":["Mailing Letters"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n    --request PATCH 'https://api.appfolio.com/api/v0/mailing_letters/2f7232fb-e23b-11ee-8c46-06b43963c6f4' \\\n    --header 'Authorization: Basic {Auth}' \\\n    --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n    --header 'Content-Type: application/json' \\\n    --data-raw '{\n      \"TrackingNumber\": \"9205 9010 0000 0000 46\",\n      \"LetterUrl\": \"https://www.example.com/letter/1\",\n      \"Status\": \"Accepted\"\n    }'\n"}],"parameters":[{"name":"mailingLetterId","in":"path","description":"Unique identifier of the letter to update","required":true,"schema":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","format":"uuid"}}],"requestBody":{"description":"Attributes to update for the letter","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MailingLetter.Update"},"example":{"Status":"Accepted","StatusReason":"Letter accepted by mailing partner for processing","StatusOccurredAt":"2021-08-16T19:50:00.000Z","TrackingNumber":"9205 9010 0000 0000 46","LetterUrl":"https://www.example.com/letter/1"}}}},"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"Updated a letter","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated letter","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","format":"uuid"}}}}}}}}},"/mailing_letters/bulk_update":{"patch":{"operationId":"bulkUpdateMailingLetter","summary":"Bulk Update Mailing Letters","description":"Update multiple mailing letters in bulk","tags":["Mailing Letters"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/mailing_letters/bulk_update'      --header 'Content-Type: application/json'       --data '{\n        \"data\": [\n          {\n            \"Id\": \"d083f6a1-dd44-11ee-b5e8-0a9ddbefafd7\",\n            \"LetterUrl\": \"wwww.example.com\",\n            \"Status\": \"Accepted\"\n          }\n        ]\n      }\n"}],"requestBody":{"description":"Mailing Letters","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MailingLetter.BulkUpdate"}}}},"example":{"data":[{"Id":"d083f6a1-dd44-11ee-b5e8-0a9ddbefafd7","TrackingNumber":"12345","LetterUrl":"wwww.example.com","Status":"Accepted","StatusReason":"Letter accepted by mailing partner for processing","StatusOccurredAt":"2021-08-16T19:50:00.000Z"},{"Id":"afg47871-dd44-11ee-b5e8-0a9ddbefafd7","TrackingNumber":"12345","LetterUrl":"wwww.example.com","Status":"Accepted","StatusReason":"Letter accepted by mailing partner for processing","StatusOccurredAt":"2021-10-16T19:50:00.000Z"}]}}}},"responses":{"200":{"description":"Letters accepted","content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"properties":{"ids":{"type":"array","properties":{"Id":{"description":"Unique identifier for a successfully updated letter","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19"}}}}}}}}}}},"422":{"description":"Letters not accepted","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"Id":{"type":"string","description":"UUID of letter."},"successful":{"description":"Indicates whether or not the letter was updated successfully","type":"boolean"},"errors":{"type":"array","description":"Errors for this letter if it was not updated successfully","items":{"properties":{"attribute":{"type":"string","description":"Attribute containing the error (if applicable)"},"message":{"type":"string","description":"Error description"}}}}}}}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/occupancies/{OccupancyId}/attachments":{"post":{"operationId":"createOccupancyAttachment","summary":"Create Occupancy Attachment","description":"Add an attachment to an occupancy","tags":["Occupancies"],"parameters":[{"name":"OccupancyId","in":"path","description":"The occupancy to which the file will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/occupancies/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/attachments' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --form 'File=@\"/path/to/file.pdf\"' \\\n     --form 'FolderId=\"972b920c-e048-4a7b-b1f6-eddb6ad6d23c\"'\n"}],"requestBody":{"description":"Attachment object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"},"FolderId":{"type":"string","format":"uuid","description":"Unique identifier of the folder to place the attachment in."}}},"example":{"File":"/path/to/file.pdf","FolderId":"972b920c-e048-4a7b-b1f6-eddb6ad6d23c"}}}},"responses":{"201":{"description":"Uploaded an attachment","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the occupancy attachment","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/occupancies/attachments":{"get":{"operationId":"listOccupancyAttachments","summary":"List All Occupancy Attachments","description":"Returns all attachments associated with an occupancy","tags":["Occupancies"],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for occupancy attachments. All GET requests must include a filter for `[OccupancyId]`, or `[CreatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"CreatedAtFrom":{"type":"string","format":"date-time","description":"Example: filters[CreatedAtFrom]=2021-12-15T16:30:46Z \u003cbr\u003e Returns attachments created after the specified date. The value must adhere to the ISO 8601 format YYYY-MM-DDThh:mm:ssZ and the default time zone is Coordinated Universal Time (UTC)."},"OccupancyId":{"type":"string","description":"Example: filters[OccupancyId]=1abcde23-c543-456e-abc9-123456789cba \u003cbr\u003e Unique identifier of the occupancy associated with the attachment. Can only filter by one occupancy at a time.","format":"uuid"}}},"required":false}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/occupancies/attachments?page[size]=10\u0026page[number]=2\u0026filters[OccupancyId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[CreatedAtFrom]=2020-12-14T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Occupancy.Attachments"}}}}}}},"/occupancies/documents":{"get":{"operationId":"getOccupancyDocuments","summary":"List All Occupancies Documents","description":"Returns all occupancy's documents that meet the filter criteria","tags":["Occupancies"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/occupancies/documents?filters[OccupancyId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":50},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for occupancies documents. All GET requests must include a filter for `[OccupancyId]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"OccupancyId":{"description":"Example: `filters[OccupancyId]=1abcde23-c543-456e-abc9-123456789cba,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique identifier of the occupancy. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns occupancy document records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OccupancyDocuments"}}}}}}},"/owners":{"get":{"operationId":"getOwners","summary":"List All Owners","description":"Returns all owners that meet the filter criteria","tags":["Owners"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/owners?page[size]=100\u0026page[number]=1\u0026filters[PropertyId]=bfcb95e8-d5fb-448c-b811-88d9f832e79c' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.\n\n","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for owners. All GET requests must include a filter for `[Id]` (if available), or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","required":["LastUpdatedAtFrom"],"properties":{"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z` \u003cbr\u003e Returns owner records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"},"PropertyId":{"type":"string","description":"Example: `filters[PropertyId]=cfcb95e8-d5fb-448c-b811-88d9f832e79c,cfcb67w4-d5fb-448c-b811-99d9f832e79c` \u003cbr\u003e Unique identifier of the property associated with the owner. Filter the results based on one or more PropertyIds. Multiple values should be separated by commas."},"IncludeHidden":{"description":"Example: `filters[IncludeHidden]=true` \u003cbr\u003e Indicates whether or not to include owners that were marked as inactive from the list of owners","type":"boolean"}}},"required":true}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Owners"}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Invalid value passed. filters[PropertyId] must be in UUID format."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}},"post":{"operationId":"createOwner","summary":"Create Owner","description":"Create an owner","tags":["Owners"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/owners' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"Address1\": \"123 Alpine St\",\n        \"Address2\": \"Unit A\",\n        \"City\": \"Santa Barbara\",\n        \"State\": \"CA\",\n        \"Zip\": \"93101\"\n        \"CountryCode\": \"US\"\n        \"Email\": \"joe@owners.com\",\n        \"FirstName\": \"Joe\",\n        \"LastName\": \"Owner\",\n        \"CompanyName\": \"OwnerComp\",\n        \"PhoneNumber\": \"(310) 555-0194\",\n        \"OwnerPaidByACH\": true,\n        \"UseOnlinePayables\": true,\n        \"BankAccountRoutingNumber\": \"121042882\",\n        \"BankAccountNumber\": \"23438791498723\",\n        \"SavingsAccount\": true,\n        \"TaxpayerName\": \"OwnerComp\",\n        \"TaxpayerId\": \"999-99-9999\",\n        \"Send1099\": true,\n        \"OwnerConsentedToReceiveElectronic1099\": false,\n        \"Sending1099Preference\": \"Paper\",\n        \"PhoneNumbers\": [\n          {\n            \"Number\": \"555-123-4567\",\n            \"Label\": \"Mobile\",\n            \"AdditionalDetails\": \"Primary contact number\",\n            \"IsPrimary\": true\n          }\n        ],\n        \"Emails\": [\n          {\n            \"EmailAddress\": \"john.doe@example.com\",\n            \"IsPrimary\": true\n          }\n        ],\n        \"Addresses\": [\n          {\n            \"Address1\": \"123 Main St\",\n            \"Address2\": \"Apt 1\",\n            \"City\": \"Anytown\",\n            \"State\": \"CA\",\n            \"PostalCode\": \"12345\",\n            \"CountryCode\": \"US\",\n            \"IsPrimary\": true\n          }\n        ],\n        \"Tags\": [\"Tag Name\"],\n        \"UseAlternatePayee\": true,\n        \"AlternatePayeeName\": \"John Smith\",\n        \"AlternatePaymentAddress1\": \"123 Highland Avenue\",\n        \"AlternatePaymentAddress2\": \"Unit C\",\n        \"AlternatePaymentCity\": \"Santa Barbara\",\n        \"AlternatePaymentState\": \"CA\",\n        \"AlternatePaymentPostalCode\": \"93117\",\n        \"AlternatePaymentCountryCode\": \"US\",\n        \"EmailEcheckReceipt\": false,\n        \"HoldPayments\": true\n     }'\n"}],"requestBody":{"description":"Owner object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Owner.Create"},"example":{"Address1":"123 Alpine St","Address2":"Unit A","City":"Santa Barbara","State":"CA","Zip":"93101","CountryCode":"US","FirstName":"Joe","LastName":"Owner","CompanyName":"OwnerComp","Email":"joe@owners.com","PhoneNumber":"(310) 555-0194","OwnerPaidByACH":true,"UseOnlinePayables":true,"BankAccountRoutingNumber":"121042882","BankAccountNumber":"23438791498723","SavingsAccount":true,"TaxpayerName":"OwnerComp","TaxpayerId":"999-99-9999","Send1099":true,"OwnerConsentedToReceiveElectronic1099":false,"Sending1099Preference":"Paper","PhoneNumbers":[{"Number":"555-123-4567","Label":"Mobile","AdditionalDetails":"Primary contact number","IsPrimary":true}],"Emails":[{"EmailAddress":"john.doe@example.com","IsPrimary":true}],"Addresses":[{"Address1":"123 Main St","Address2":"Apt 1","City":"Anytown","State":"CA","PostalCode":"12345","CountryCode":"US","IsPrimary":true}],"Tags":["Tag Name"],"UseAlternatePayee":true,"AlternatePayeeName":"John Smith","AlternatePaymentAddress1":"123 Highland Avenue","AlternatePaymentAddress2":"Unit C","AlternatePaymentCity":"Santa Barbara","AlternatePaymentState":"CA","AlternatePaymentPostalCode":"93117","AlternatePaymentCountryCode":"US","EmailEcheckReceipt":false,"HoldPayments":true}}}},"responses":{"201":{"description":"Created a Owner","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the created owner","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/owners/{ownerId}":{"get":{"operationId":"getOwner","summary":"Fetch an Owner by ID","description":"Returns the owner","tags":["Owners"],"parameters":[{"name":"ownerId","in":"path","required":true,"description":"Unique identifier of the owner to fetch. Filter the results based on a single value.","schema":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","format":"uuid"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/owners/1abcde23-c543-456e-abc9-123456789cba' \\\n     --header 'Authorization: Basic {Auth}'\n"}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnerById"}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested Owner not found."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}},"patch":{"operationId":"updateOwner","summary":"Update Owner","description":"Update a Owner","tags":["Owners"],"parameters":[{"name":"ownerId","in":"path","description":"Unique identifier of the owner to update","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/owners/ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"Address1\": \"123 Alpine St\",\n        \"Address2\": \"Unit A\",\n        \"City\": \"Santa Barbara\",\n        \"State\": \"CA\",\n        \"Zip\": \"93101\",\n        \"CountryCode\": \"US\",\n        \"Email\": \"joe@owners.com\",\n        \"FirstName\": \"Joe\",\n        \"LastName\": \"Owner\",\n        \"CompanyName\": \"OwnerComp\",\n        \"PhoneNumber\": \"(310) 555-0194\",\n        \"OwnerPaidByACH\": true,\n        \"UseOnlinePayables\": true,\n        \"BankAccountRoutingNumber\": \"121042882\",\n        \"BankAccountNumber\": \"23438791498723\",\n        \"SavingsAccount\": true,\n        \"TaxpayerName\": \"OwnerComp\",\n        \"TaxpayerId\": \"999-99-9999\",\n        \"Send1099\": true,\n        \"OwnerConsentedToReceiveElectronic1099\": false,\n        \"Sending1099Preference\": \"Paper\",\n        \"PhoneNumbers\": [\n          {\n            \"Number\": \"555-123-4567\",\n            \"Label\": \"Mobile\",\n            \"AdditionalDetails\": \"Primary contact number\",\n            \"IsPrimary\": true\n          }\n        ],\n        \"Emails\": [\n          {\n            \"EmailAddress\": \"john.doe@example.com\",\n            \"IsPrimary\": true\n          }\n        ],\n        \"Addresses\": [\n          {\n            \"Address1\": \"123 Main St\",\n            \"Address2\": \"Apt 1\",\n            \"City\": \"Anytown\",\n            \"State\": \"CA\",\n            \"PostalCode\": \"12345\",\n            \"CountryCode\": \"US\",\n            \"IsPrimary\": true\n          }\n        ],\n        \"Tags\": [\"Tag Name\"],\n        \"UseAlternatePayee\": true,\n        \"AlternatePayeeName\": \"John Smith\",\n        \"AlternatePaymentAddress1\": \"123 Highland Avenue\",\n        \"AlternatePaymentAddress2\": \"Unit C\",\n        \"AlternatePaymentCity\": \"Santa Barbara\",\n        \"AlternatePaymentState\": \"CA\",\n        \"AlternatePaymentPostalCode\": \"93117\",\n        \"AlternatePaymentCountryCode\": \"US\",\n        \"EmailEcheckReceipt\": false,\n        \"HoldPayments\": true,\n        \"CustomFields\": {\n         \"a965e7d8-a17d-11ec-b909-0242ac120002\": \"a new value\",\n         \"454d8635-521e-4864-99fb-0bd6200d3a0f\": true,\n         \"c80d3dd1-9eba-45aa-803c-666280b8ff24\": 87.40,\n         \"3277c366-1783-42a9-b925-0bca2afbe391\": \"0e9a7b18-1778-4a03-bc1c-f913aeaef6bc\",\n         \"4f83a1bf-4e49-4463-8113-15c52f79243a\": [\"3f41feb4-413b-4a83-a58a-fdb4ad0d6205\", \"9bf83fd8-a20a-4c22-97d0-bf35173694b7\"]\n       }\n     }'\n"}],"requestBody":{"description":"Owner object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Owner.Update"},"example":{"Address1":"123 Alpine St","Address2":"Unit A","City":"Santa Barbara","State":"CA","Zip":"93101","CountryCode":"US","FirstName":"Joe","LastName":"Owner","CompanyName":"OwnerComp","Email":"joe@owners.com","PhoneNumber":"(310) 555-0194","OwnerPaidByACH":true,"UseOnlinePayables":true,"BankAccountRoutingNumber":"121042882","BankAccountNumber":"23438791498723","SavingsAccount":true,"TaxpayerName":"OwnerComp","TaxpayerId":"999-99-9999","Send1099":true,"OwnerConsentedToReceiveElectronic1099":false,"Sending1099Preference":"Paper","PhoneNumbers":[{"Number":"555-123-4567","Label":"Mobile","AdditionalDetails":"Primary contact number","IsPrimary":true}],"Emails":[{"EmailAddress":"john.doe@example.com","IsPrimary":true}],"Addresses":[{"Address1":"123 Main St","Address2":"Apt 1","City":"Anytown","State":"CA","PostalCode":"12345","CountryCode":"US","IsPrimary":true}],"Tags":["Tag Name"],"UseAlternatePayee":true,"AlternatePayeeName":"John Smith","AlternatePaymentAddress1":"123 Highland Avenue","AlternatePaymentAddress2":"Unit C","AlternatePaymentCity":"Santa Barbara","AlternatePaymentState":"CA","AlternatePaymentPostalCode":"93117","AlternatePaymentCountryCode":"US","EmailEcheckReceipt":false,"HoldPayments":true,"CustomFields":{"a965e7d8-a17d-11ec-b909-0242ac120002":"a new value","454d8635-521e-4864-99fb-0bd6200d3a0f":true,"c80d3dd1-9eba-45aa-803c-666280b8ff24":87.4,"3277c366-1783-42a9-b925-0bca2afbe391":"0e9a7b18-1778-4a03-bc1c-f913aeaef6bc","4f83a1bf-4e49-4463-8113-15c52f79243a":["3f41feb4-413b-4a83-a58a-fdb4ad0d6205","9bf83fd8-a20a-4c22-97d0-bf35173694b7"]}}}}},"responses":{"200":{"description":"Updated a Owner","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated owner","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/owners/bulk":{"post":{"operationId":"bulkCreateOwners","summary":"Bulk Create Owners","description":"Create owners in bulk","tags":["Owners"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/owners/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"ReferenceId\": \"1\",\n            \"FirstName\": \"Joe\",\n            \"LastName\": \"Owner\",\n            \"CompanyName\": \"OwnerComp\",\n            \"OwnerPaidByACH\": true,\n            \"UseOnlinePayables\": true,\n            \"BankAccountRoutingNumber\": \"121042882\",\n            \"BankAccountNumber\": \"23438791498723\",\n            \"SavingsAccount\": true,\n            \"TaxpayerName\": \"OwnerComp\",\n            \"TaxpayerId\": \"999-99-9999\",\n            \"Send1099\": true,\n            \"OwnerConsentedToReceiveElectronic1099\": false,\n            \"Sending1099Preference\": \"Paper\",\n            \"PhoneNumbers\": [\n              {\n                \"Number\": \"555-123-4567\",\n                \"Label\": \"Mobile\",\n                \"AdditionalDetails\": \"Primary contact number\",\n                \"IsPrimary\": true\n              }\n            ],\n            \"Emails\": [\n              {\n                \"EmailAddress\": \"john.doe@example.com\",\n                \"IsPrimary\": true\n              }\n            ],\n            \"Addresses\": [\n              {\n                \"Address1\": \"123 Main St\",\n                \"Address2\": \"Apt 1\",\n                \"City\": \"Anytown\",\n                \"State\": \"CA\",\n                \"PostalCode\": \"12345\",\n                \"CountryCode\": \"US\",\n                \"IsPrimary\": true\n              }\n            ],\n            \"Tags\": [\"Tag Name\"],\n            \"UseAlternatePayee\": true,\n            \"AlternatePayeeName\": \"John Smith\",\n            \"AlternatePaymentAddress1\": \"123 Highland Avenue\",\n            \"AlternatePaymentAddress2\": \"Unit C\",\n            \"AlternatePaymentCity\": \"Santa Barbara\",\n            \"AlternatePaymentState\": \"CA\",\n            \"AlternatePaymentPostalCode\": \"93117\",\n            \"AlternatePaymentCountryCode\": \"US\",\n            \"EmailEcheckReceipt\": false,\n            \"HoldPayments\": true,\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Owner objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Owner.BulkCreate"}}}},"example":{"data":[{"ReferenceId":"1","FirstName":"Joe","LastName":"Owner","CompanyName":"OwnerComp","OwnerPaidByACH":true,"UseOnlinePayables":true,"BankAccountRoutingNumber":"121042882","BankAccountNumber":"23438791498723","SavingsAccount":true,"TaxpayerName":"OwnerComp","TaxpayerId":"999-99-9999","Send1099":true,"OwnerConsentedToReceiveElectronic1099":false,"Sending1099Preference":"Paper","PhoneNumbers":[{"Number":"555-123-4567","Label":"Mobile","AdditionalDetails":"Primary contact number","IsPrimary":true}],"Emails":[{"EmailAddress":"john.doe@example.com","IsPrimary":true}],"Addresses":[{"Address1":"123 Main St","Address2":"Apt 1","City":"Anytown","State":"CA","PostalCode":"12345","CountryCode":"US","IsPrimary":true}],"Tags":["Tag Name"],"UseAlternatePayee":true,"AlternatePayeeName":"John Smith","AlternatePaymentAddress1":"123 Highland Avenue","AlternatePaymentAddress2":"Unit C","AlternatePaymentCity":"Santa Barbara","AlternatePaymentState":"CA","AlternatePaymentPostalCode":"93117","AlternatePaymentCountryCode":"US","EmailEcheckReceipt":false,"HoldPayments":true}]}}}},"responses":{"202":{"description":"Owners accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk creation of owners"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted owner creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"FirstName, LastName or CompanyName","message":"Required parameter FirstName and LastName or CompanyName is missing."}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/owners/{OwnerId}/attachments":{"post":{"operationId":"createOwnerAttachment","summary":"Create Owner Attachment","description":"Upload an attachment to an owner","tags":["Owners"],"parameters":[{"name":"OwnerId","in":"path","description":"The owner to which the file will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/owners/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/attachments' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --form 'File=@\"/path/to/file.pdf\"'\n"}],"requestBody":{"description":"Attachment object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"},"FolderId":{"type":"string","format":"uuid","description":"Unique identifier of the folder to file the attachment under"}}},"example":{"File":"/path/to/file.pdf"}}}},"responses":{"201":{"description":"Uploaded an attachment","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the owner attachment","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/owners/attachments":{"get":{"operationId":"listOwnerAttachments","summary":"List All Owner Attachments","description":"Returns all attachments associated with an owner","tags":["Owners"],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for owners. All GET requests must include a filter for `[OwnerId]`, or `[CreatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"CreatedAtFrom":{"type":"string","format":"date-time","description":"Example: filters[CreatedAtFrom]=2021-12-15T16:30:46Z \u003cbr\u003e Returns attachments created on or after the specified date. The value must adhere to the ISO 8601 format YYYY-MM-DDThh:mm:ssZ and the default time zone is Coordinated Universal Time (UTC)."},"OwnerId":{"type":"string","description":"filters[OwnerId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the owner associated with the attachment. Can only filter by one owner at a time.","format":"uuid"}}},"required":false}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/owners/attachments?page[size]=10\u0026page[number]=2\u0026filters[OwnerId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[CreatedAtFrom]=2020-12-14T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Owner.Attachments"}}}}}}},"/owners/notes":{"get":{"operationId":"getOwnersNotes","summary":"List All Owners Notes","description":"Returns all owner's notes that meet the filter criteria","tags":["Owners"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/owners/notes?filters[OwnerId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for owner notes. All GET requests must include a filter for `[OwnerId]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"OwnerId":{"description":"Example: `filters[OwnerId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the owner. Filter the results based on a single value.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns owner note records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Owners.Notes"}}}}}}},"/owners/{OwnerId}/notes":{"post":{"operationId":"createOwnerNote","summary":"Create Owner Note","description":"Add a note to an owner","tags":["Owners"],"parameters":[{"name":"OwnerId","in":"path","description":"The owner to which the note will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/owners/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for owner\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the owner note. An owner note cannot exceed `65,535` characters."}}},"example":{"Body":"This owner have scheduled a cleaning service on 11/11/2023"}}}},"responses":{"201":{"description":"Created a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the owner note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/owners/{OwnerId}/notes/{Id}":{"patch":{"operationId":"updateOwnerNote","summary":"Update Owner Note","description":"Update a note to an owner","tags":["Owners"],"parameters":[{"name":"OwnerId","in":"path","description":"The owner to which the note will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d9"}},{"name":"Id","in":"path","description":"Unique identifier of the note to update","required":true,"schema":{"type":"string","format":"uuid","example":"45e04805-01c4-4e39-adc9-c75ff9ddc8d7"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/owners/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes/632b920c-e048-4a7b-b1f6-eddb6ad6d23c' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for owner - updating\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the owner note. An owner note cannot exceed `65,535` characters."}}},"example":{"Body":"This owner have scheduled a cleaning service on 11/30/2022 - Updated"}}}},"responses":{"200":{"description":"Updated a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated owner note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular note."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (Owner Id or Note Id) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Required parameter Body is missing."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/owner_groups":{"get":{"operationId":"getOwnerGroups","summary":"List All Owner Groups","description":"Returns all property owner groups that meet the filter criteria","tags":["Owner Groups"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/owner_groups?filters[PropertyId]=bfcb95e8-d5fb-448c-b811-88d9f832e79c' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for owner groups. All GET requests must include a filter for `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","required":["LastUpdatedAtFrom"],"properties":{"Current":{"description":"Example: `filters[Current]=true` \u003cbr\u003e Indicates whether or not the owner currently owns the property","type":"boolean"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z` \u003cbr\u003e Returns owner group records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"},"PropertyId":{"description":"Example: `filters[PropertyId]=eea5de23-c543-456e-abc9-123456789cba,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique identifier of the property associated with the owner(s) within the owner group. Filter the results based on one or more PropertyIds. Multiple values should be separated by commas.","type":"string","format":"uuid"},"Id":{"description":"Example: `filters[Id]=eea5de23-c543-456e-abc9-123456789cba,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique identifier of the owner group. Filter the results based on one or more ids. Multiple values should be separated by commas.","type":"string","format":"uuid"}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Invalid value was passed. filters[PropertyId] must be in UUID format."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnerGroups"}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}},"post":{"operationId":"createOwnerGroup","summary":"Create Owner Group","description":"Create a Owner Group","tags":["Owner Groups"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/owner_groups' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"StartDate\": \"2022-02-01\",\n        \"FiscalYearEnd\": 2,\n        \"ReserveFunds\": \"5000.00\",\n        \"PropertyId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"PaymentType\": \"Flat\",\n        \"PaymentAmount\": \"1125.31\",\n        \"OwnerPacketBasis\": \"Accrual\",\n        \"Owners\": [\n          {\n            \"PercentOwned\": 45.50,\n            \"OwnerId\": \"91c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"ContractExpiration\": \"2023-01-25\"\n          },\n          {\n            \"PercentOwned\": 54.50,\n            \"OwnerId\": \"d9009724-9f37-11fd-bh31-d45a967b9b10\",\n            \"ContractExpiration\": \"2023-02-01\"\n          }\n        ]\n     }'\n"}],"requestBody":{"description":"Owner Group object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnerGroup.Create"},"example":{"StartDate":"2022-02-01","FiscalYearEnd":2,"ReserveFunds":5000.0,"PropertyId":"71c5cb28-547f-11ec-bfa5-02975b268737","PaymentType":"Flat","PaymentAmount":2300.0,"OwnerPacketBasis":"Cash","Owners":[{"PercentOwned":"45.50","OwnerId":"91c5cb28-547f-11ec-bfa5-02975b268737","ContractExpiration":"2023-01-25"},{"PercentOwned":"54.50","OwnerId":"d9009724-9f37-11fd-bh31-d45a967b9b10","ContractExpiration":"2023-02-01"}]}}}},"responses":{"201":{"description":"Created an Owner Group","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the created owner group","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Invalid values passed. PercentOwned total does not equal 100"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/owner_groups/{id}":{"patch":{"operationId":"updateOwnerGroup","summary":"Update Owner Group","description":"Update an existing Owner Group","tags":["Owner Groups"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/owner_groups/ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"FiscalYearEnd\": 4,\n        \"ReserveFunds\": \"2000.55\",\n        \"PaymentType\": \"Flat\",\n        \"PaymentAmount\": \"1000.00\",\n        \"OwnerPacketBasis\": \"Cash\",\n        \"StartDate\": \"2021-09-01\"\n     }'\n"}],"parameters":[{"name":"id","in":"path","description":"Unique identifier of the owner group to update","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"description":"Owner Group update parameters","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OwnerGroup.Update"},"example":{"FiscalYearEnd":4,"ReserveFunds":"2000.55","PaymentType":"Flat","PaymentAmount":"1000.00","OwnerPacketBasis":"Cash","StartDate":"2021-09-01"}}}},"responses":{"200":{"description":"Successfully updated the Owner Group","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated owner group","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (OwnerGroupId) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Ownership group specified, but no parameter to update was passed."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/payables":{"get":{"operationId":"getPayables","summary":"List All Payables","description":"Returns all payable bills that meet the filter criteria","tags":["Payables"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/payables?filters[CreatedAt]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"filters","in":"query","description":"Filters for payables","style":"deepObject","schema":{"type":"object","required":["CreatedAt"],"properties":{"CreatedAt":{"description":"Example: `filters[CreatedAt]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns payables created on or after the specified date. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":true},{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Payables"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/prepayments/bulk":{"post":{"operationId":"bulkCreatePrepayments","summary":"Bulk Create Prepayments","description":"Create prepayments in bulk","tags":["Prepayments"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/prepayments/bulk' \\ \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"ReferenceId\": \"1701f004-f3e2-4896-930e-b58bbf06976b\",\n            \"Amount\": 634.33,\n            \"GlAccountApplyOption\": \"af1f7784-e8c7-4162-9447-826629b97e0c\",\n            \"OccupancyId\": \"6c27db25-44d8-4706-a7e1-6c6e64feca7d\",\n            \"Remarks\": \"Payment submitted via check\",\n            \"Reference\": \"21\",\n            \"PrepaymentDate\": '2025-05-16',\n            \"PrepaymentGlAccountId\": \"8b879f41-2418-47b2-b193-c497be8b3ff4\"\n          },\n          {\n            \"ReferenceId\": \"f0589a1c-d6dc-4778-a002-52ea1cb3e840\",\n            \"Amount\": 98.34,\n            \"GlAccountApplyOption\": \"none\",\n            \"OccupancyId\": \"6fabca58-ac28-4a80-99cc-0a07903bd575\",\n            \"PrepaymentDate\": '2025-02-10',\n            \"PrepaymentGlAccountId\": \"e83fe5e7-59fc-4605-9e07-2536da366e53\"\n          },\n        ]\n      }'\n"}],"requestBody":{"description":"Prepayment objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Prepayment.BulkCreate"}}}},"example":{"data":[{"ReferenceId":"1701f004-f3e2-4896-930e-b58bbf06976b","Amount":634.33,"GlAccountApplyOption":"af1f7784-e8c7-4162-9447-826629b97e0c","OccupancyId":"6c27db25-44d8-4706-a7e1-6c6e64feca7d","Remarks":"Payment submitted via check","Reference":"21","PrepaymentDate":"2025-05-16","PrepaymentGlAccountId":"8b879f41-2418-47b2-b193-c497be8b3ff4"},{"ReferenceId":"f0589a1c-d6dc-4778-a002-52ea1cb3e840","Amount":98.34,"GlAccountApplyOption":"none","OccupancyId":"6fabca58-ac28-4a80-99cc-0a07903bd575","PrepaymentDate":"2025-02-10","PrepaymentGlAccountId":"e83fe5e7-59fc-4605-9e07-2536da366e53"}]}}}},"responses":{"202":{"description":"Prepayments accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk creation of prepayments"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"PrepaymentId":{"type":"string","description":"Unique identifier of the created payment of the prepayment"},"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual prepayments in the bulk-creation of prepayments.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted prepayment creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"OccupancyId","message":"Required parameter OccupancyId is missing."},{"attribute":"PrepaymentGlAccountId","message":"is invalid"}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/prepayments/{Id}/reverse":{"post":{"operationId":"reversePrepayment","summary":"Reverse Prepayment","description":"Reverses a prepayment that was created via the API. The prepayment is un-applied and the receipt and bank deposit are reversed; the invoice is left in place so corrected data can be re-posted via POST /prepayments/bulk. Only transactions created via the API can be reversed.","tags":["Prepayments"],"parameters":[{"name":"Id","in":"path","description":"Unique identifier of the prepayment to reverse","required":true,"schema":{"type":"string","format":"uuid","example":"1701f004-f3e2-4896-930e-b58bbf06976b"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/prepayments/1701f004-f3e2-4896-930e-b58bbf06976b/reverse' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"responses":{"204":{"description":"The prepayment was reversed successfully. No content will be included in the response payload.","content":{"application/json":{"example":{}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Prepayment not found"}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Prepayment cannot be reversed. It may already be reversed or fall in a locked period."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/portfolios":{"get":{"operationId":"getPortfolios","summary":"List All Portfolios","description":"Returns all portfolios that meet the filter criteria","tags":["Portfolios"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/portfolios?filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for portfolios. All GET requests must include a filter for `[Id]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"description":"Example: `filters[Id]=234abcde-c543-456e-abc9-123456789abc,1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the portfolio. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns portfolio records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Portfolios"}}}}}}},"/portfolios/{portfolioId}":{"patch":{"operationId":"updatePortfolio","summary":"Update a Portfolio","description":"Update a portfolio","tags":["Portfolios"],"parameters":[{"name":"portfolioId","in":"path","description":"Unique identifier of the portfolio to update","required":true,"schema":{"type":"string","example":"9933b9bc-3910-417d-bdf2-8884b63ccf97","format":"uuid"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/portfolios/2e67d04f-e02f-449a-9b61-694636189c04' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"Name\": \"Updated Portfolio Name\",\n        \"PropertyIds\": [\"96d90af9-15be-4139-b43e-3390358d2602\", \"5683df20-b606-4138-8ec4-d9737f7c12bb\", \"4d53faad-dbf6-4754-a23e-f5c486139e85\"]\n     }'\n"}],"requestBody":{"description":"Portfolio object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Portfolio.Update"},"example":{"Name":"Updated Portfolio Name","PropertyIds":["96d90af9-15be-4139-b43e-3390358d2602","5683df20-b606-4138-8ec4-d9737f7c12bb","4d53faad-dbf6-4754-a23e-f5c486139e85"]}}}},"responses":{"200":{"description":"Updated a Portfolio","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated portfolio","type":"string","example":"2e67d04f-e02f-449a-9b61-694636189c04","format":"uuid"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Property Ids not found: 96d90af9-15be-4139-b43e-3390358d2602"}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/properties":{"get":{"operationId":"getProperties","summary":"List All Properties","description":"Returns all properties that meet the filter criteria","tags":["Properties"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/properties?filters[Id]=1abcde234-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z\u0026filters[PropertyType]=Single-Family,Multi-Family,Commercial' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for properties. All GET requests must include a filter for `[Id]` (if available), or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"description":"Example: `filters[Id]=234abcde-c543-456e-abc9-123456789abc,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique identifier of the properties that are sought for retrieval. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","format":"uuid"},"IncludeHidden":{"description":"Example: `filters[IncludeHidden]=true` \u003cbr\u003e Indicates whether or not to include properties hidden by an AppFolio Property Manager user in the response","type":"boolean"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns property records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"},"PropertyType":{"description":"Example: `filters[PropertyType]=Single-Family,Multi-Family,Commercial` \u003cbr\u003e Returns property records that match one or more of the specified property types. Multiple values should be separated by commas. Acceptable values are: Commercial, Manufactured-Housing, Mixed-Use, Multi-Family, Self-Storage, Single-Family, Student-Housing or Vacation","type":"string"}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Properties"}}}}}}},"/properties/bulk":{"post":{"operationId":"bulkCreateProperties","summary":"Bulk Create Properties","description":"Create properties in bulk","tags":["Properties"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/properties/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"Name\": \"Property A\",\n            \"ReferenceId\": \"1\",\n            \"AdditionalCashAccounts\": [\n              {\n                \"BankAccountId\": \"5984b1c1-88ac-11ee-812b-0278f7800139\",\n                \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\"\n              },\n              {\n                \"BankAccountId\": \"80c5cb28-547f-11ec-bfa5-02975b268737\",\n                \"GlAccountId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\"\n              }\n            ],\n            \"AdminFee\": 50.00,\n            \"Amenities\": [\"washer and dryer\", \"balcony\", \"rooftop area\"],\n            \"CatsAllowed\": \"Yes\",\n            \"Class\": \"A-\",\n            \"CurrentManagementFeePolicy\": {\n              \"FeeType\": \"Flat\",\n              \"FlatAmount\": 100.99,\n              \"StartDate\": \"2025-01-01\",\n              \"WaiveWhenVacant\": false\n            },\n            \"DogsAllowed\": \"Large \u0026 Small\",\n            \"InsuranceExpiration\": \"2025-09-15\",\n            \"MaintenanceLimit\": 1050.25,\n            \"MaintenanceNotes\": \"Take extra care with electrical at this property\",\n            \"ManagementEndDate\": \"2026-08-26\",\n            \"ManagementEndReason\": \"Maintenance\",\n            \"ManagementStartDate\": \"2006-08-26\",\n            \"NsfFee\": 25.43,\n            \"PropertyType\": \"Single-Family\",\n            \"UnitEntryPreAuthorized\": true,\n            \"YearBuilt\": 2006,\n            \"Address1\": \"123 Highland Avenue\",\n            \"Address2\": \"unit c\",\n            \"City\": \"Santa Barbara\",\n            \"State\": \"CA\",\n            \"Zip\": \"93117\",\n            \"SiteManager\": {\n              \"FirstName\": \"John\",\n              \"LastName\": \"Smith\",\n              \"Salutation\": \"Mr.\",\n              \"PhoneNumber\": \"555-555-5555\"\n            },\n            \"OperatingCashBankAccountId\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\",\n            \"EscrowCashBankAccountId\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\",\n            \"ExpensesCashBankAccountId\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\",\n            \"EscrowCashBankAccountId\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\"\n            \"LeaseFeePolicy\": {\n              \"FeeType\": \"Flat\",\n              \"FlatAmount\": 10.00\n            },\n          },\n          {\n            \"Name\": \"Property B\",\n            \"ReferenceId\": \"2\",\n            \"AdditionalCashAccounts\": [\n              {\n                \"BankAccountId\": \"5984b1c1-88ac-11ee-812b-0278f7800139\",\n                \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\"\n              }\n            ],\n            \"AdminFee\": 32.00,\n            \"Amenities\": [\"gym\", \"covered parking\"],\n            \"CatsAllowed\": \"No\",\n            \"Class\": \"A\",\n            \"CurrentManagementFeePolicy\": {\n              \"FeeType\": \"Flat\",\n              \"FlatAmount\": 100.99,\n              \"StartDate\": \"2025-01-01\",\n              \"WaiveWhenVacant\": false\n            },\n            \"DogsAllowed\": \"Small Only\",\n            \"InsuranceExpiration\": \"2026-11-21\",\n            \"MaintenanceLimit\": 300,\n            \"MaintenanceNotes\": \"Mostly uses in house team\",\n            \"ManagementStartDate\": \"2018-06-18\",\n            \"NsfFee\": 25.43,\n            \"PropertyType\": \"Multi-Family\",\n            \"UnitEntryPreAuthorized\": false,\n            \"YearBuilt\": 2015,\n            \"Address1\": \"123 State St\",\n            \"Address2\": \"unit c\",\n            \"City\": \"Santa Barbara\",\n            \"State\": \"CA\",\n            \"Zip\": \"93117\",\n            \"SiteManager\": {\n              \"FirstName\": \"John\",\n              \"LastName\": \"Smith\",\n              \"Salutation\": \"Mr.\",\n              \"PhoneNumber\": \"555-555-5555\"\n            },\n            \"OperatingCashBankAccountId\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\",\n            \"EscrowCashBankAccountId\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\",\n            \"LeaseFeePolicy\": {\n              \"FeeType\": \"Percent\",\n              \"Percentage\": 43.12\n            },\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Property objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Property.BulkCreate"}}}},"example":{"data":[{"Name":"Property A","ReferenceId":"1","AdditionalCashAccounts":[{"BankAccountId":"5984b1c1-88ac-11ee-812b-0278f7800139","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08"},{"BankAccountId":"80c5cb28-547f-11ec-bfa5-02975b268737","GlAccountId":"71c5cb28-547f-11ec-bfa5-02975b268737"}],"AdminFee":50.0,"Amenities":["washer and dryer","balcony","rooftop area"],"CatsAllowed":"Yes","Class":"A-","CurrentManagementFeePolicy":{"FeeType":"Flat","FlatAmount":100.99,"StartDate":"2025-01-01","WaiveWhenVacant":false},"DogsAllowed":"Large \u0026 Small","InsuranceExpiration":"2025-09-15","LeaseFeePolicy":{"FeeType":"Flat","FlatAmount":10.0},"MaintenanceLimit":1050.25,"MaintenanceNotes":"Take extra care with electrical at this property","ManagementEndDate":"2026-08-26","ManagementEndReason":"Maintenance","ManagementStartDate":"2006-08-26","NsfFee":25.43,"PropertyType":"Single-Family","UnitEntryPreAuthorized":true,"YearBuilt":2006,"Address1":"123 Highland Avenue","Address2":"unit c","City":"Santa Barbara","State":"CA","Zip":"93117","SiteManager":{"FirstName":"John","LastName":"Smith","Salutation":"Mr.","PhoneNumber":"555-555-5555"},"OperatingCashBankAccountId":"1bc8de4e-db50-4463-85fc-3a381f3d3e51","EscrowCashBankAccountId":"1bc8de4e-db50-4463-85fc-3a381f3d3e51","ExpensesCashBankAccountId":"1bc8de4e-db50-4463-85fc-3a381f3d3e51"}]}}}},"responses":{"201":{"description":"Statuses created","content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"properties":{"PropertyId":{"type":"string","description":"Unique identifier of the created property","example":"71c5cb28-547f-11ec-bfa5-02975b268737"},"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual properties in the bulk-creation of properties.","example":"71c5cb28-547f-11ec-bfa5-02975b268737"}}}}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual properties in the bulk-creation of properties.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted property creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"Address1","message":"Required parameter Address1 is missing."},{"attribute":"State","message":"is invalid"}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/properties/amenity_pricings/bulk":{"put":{"operationId":"bulkUpdateAmenityPricings","summary":"Bulk Update Amenity Pricings","description":"Set amenity pricing for properties in bulk","tags":["Properties"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PUT 'https://api.appfolio.com/api/v0/properties/amenity_pricings/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"PropertyId\": \"6c27db25-44d8-4706-a7e1-6c6e64feca7d\",\n            \"AmenityPricings\": [\n              { \"Name\": \"Parking\", \"Price\": 50 },\n              { \"Name\": \"Storage\", \"Price\": 25 }\n            ]\n          },\n          {\n            \"PropertyId\": \"446d4854-60cc-4e60-a0a6-9c617723eda4\",\n            \"AmenityPricings\": [\n              { \"Name\": \"Pool\", \"Price\": 100 }\n            ]\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Amenity pricing objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AmenityPricing.BulkUpdate"}}}},"example":{"data":[{"PropertyId":"6c27db25-44d8-4706-a7e1-6c6e64feca7d","AmenityPricings":[{"Name":"Parking","Price":50},{"Name":"Storage","Price":25}]},{"PropertyId":"446d4854-60cc-4e60-a0a6-9c617723eda4","AmenityPricings":[{"Name":"Pool","Price":100}]}]}}}},"responses":{"202":{"description":"Amenity Pricings accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk amenity pricing update"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"PropertyId":{"type":"string","format":"uuid","description":"UUID of the property whose item failed validation"},"successful":{"description":"Indication of successful update","type":"boolean"},"errors":{"description":"Errors associated with attempted amenity pricing update","type":"array"}}}}}},"example":{"errors":[{"PropertyId":"6c27db25-44d8-4706-a7e1-6c6e64feca7d","successful":false,"errors":[{"attribute":"AmenityPricings","message":"Required parameter AmenityPricings is missing."}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/properties/{propertyId}":{"patch":{"operationId":"updateProperty","summary":"Update Property","description":"Update a property","tags":["Properties"],"parameters":[{"name":"propertyId","in":"path","description":"Unique identifier of the property to update","required":true,"schema":{"type":"string","example":"9933b9bc-3910-417d-bdf2-8884b63ccf97","format":"uuid"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/properties/2e67d04f-e02f-449a-9b61-694636189c04' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"Name\": \"Property A\",\n        \"InsuranceExpiration\": \"2025-07-22\",\n        \"MaintenanceNotes\": \"Gardening done by Sunset Landscaping\",\n        \"MaintenanceLimit\": 3000,\n        \"ManagementEndDate\": \"2027-03-08\",\n        \"ManagementEndReason\": \"Owner Self-Managing\",\n        \"ManagementStartDate\": \"2007-09-27\",\n        \"NsfFee\": 33.50,\n        \"PropertyType\": \"Multi-Family\",\n        \"UnitEntryPreAuthorized\": false,\n        \"YearBuilt\": 2007,\n        \"Address1\": \"123 Highland Avenue\",\n        \"Address2\": \"Unit c\",\n        \"City\": \"Santa Barbara\",\n        \"State\": \"CA\",\n        \"Zip\": \"93117\",\n        \"SiteManager\": {\n          \"FirstName\": \"John\",\n          \"LastName\": \"Smith\",\n          \"Salutation\": \"Mr.\",\n          \"PhoneNumber\": \"555-555-5555\"\n        },\n        \"CurrentManagementFeePolicy\": {\n          \"FeeType\": 'Percent',\n          \"Percentage\": 8,\n          \"Minimum\": 100,\n          \"Maximum\": 1000,\n          \"StartDate\": '2025-01-01',\n          \"WaiveWhenVacant\": true\n        },\n        \"LeaseFeePolicy\": {\n          \"FeeType\": \"Percent\",\n          \"Percentage\": 30.50\n        },\n       \"PostedToInternet\": true,\n       \"PostedToWebsite\": true,\n       \"CustomFields\": {\n         \"a965e7d8-a17d-11ec-b909-0242ac120002\": \"a new value\",\n         \"454d8635-521e-4864-99fb-0bd6200d3a0f\": true,\n         \"c80d3dd1-9eba-45aa-803c-666280b8ff24\": 87.40,\n         \"3277c366-1783-42a9-b925-0bca2afbe391\": \"0e9a7b18-1778-4a03-bc1c-f913aeaef6bc\",\n         \"4f83a1bf-4e49-4463-8113-15c52f79243a\": [\"3f41feb4-413b-4a83-a58a-fdb4ad0d6205\", \"9bf83fd8-a20a-4c22-97d0-bf35173694b7\"]\n       }\n     }'\n"}],"requestBody":{"description":"Property object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Property.Update"},"example":{"Name":"Property A","AdminFee":45.15,"Amenities":["washer and dryer","balcony"],"CatsAllowed":"No","Class":"B+","DogsAllowed":"No","InsuranceExpiration":"2025-07-22","MaintenanceLimit":3000,"MaintenanceNotes":"Gardening done by Sunset Landscaping","ManagementEndDate":"2027-03-08","ManagementEndReason":"Owner Self-Managing","ManagementStartDate":"2007-09-27","NsfFee":33.5,"PropertyType":"Multi-Family","UnitEntryPreAuthorized":false,"YearBuilt":2007,"Address1":"123 Highland Avenue","Address2":"Unit c","City":"Santa Barbara","State":"CA","Zip":"93117","SiteManager":{"FirstName":"Josh","LastName":"Wilkinson","Salutation":"Mr.","PhoneNumber":"555-555-5555"},"CurrentManagementFeePolicy":{"FeeType":"Percent","Percentage":5,"Minimum":100,"Maximum":150,"StartDate":"2025-01-01","WaiveWhenVacant":true},"LeaseFeePolicy":{"FeeType":"Percent","Percentage":30.5},"PostedToInternet":true,"PostedToWebsite":true,"CustomFields":{"a965e7d8-a17d-11ec-b909-0242ac120002":"a new value","454d8635-521e-4864-99fb-0bd6200d3a0f":true,"c80d3dd1-9eba-45aa-803c-666280b8ff24":87.4,"3277c366-1783-42a9-b925-0bca2afbe391":"0e9a7b18-1778-4a03-bc1c-f913aeaef6bc","4f83a1bf-4e49-4463-8113-15c52f79243a":["3f41feb4-413b-4a83-a58a-fdb4ad0d6205","9bf83fd8-a20a-4c22-97d0-bf35173694b7"]}}}}},"responses":{"200":{"description":"Updated a Property","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated property","type":"string","example":"2e67d04f-e02f-449a-9b61-694636189c04","format":"uuid"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"State is invalid."}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/properties/attachments":{"get":{"operationId":"listPropertyAttachments","summary":"List All Property Attachments","description":"Returns all attachments associated with a property","tags":["Properties"],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for properties. All GET requests must include a filter for `[PropertyId]`, or `[CreatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"CreatedAtFrom":{"type":"string","format":"date-time","description":"Example: filters[CreatedAtFrom]=2021-12-15T16:30:46Z \u003cbr\u003e Returns attachments created on or after the specified date. The value must adhere to the ISO 8601 format YYYY-MM-DDThh:mm:ssZ and the default time zone is Coordinated Universal Time (UTC)."},"PropertyId":{"type":"string","description":"filters[PropertyId]=2e67d04f-e02f-449a-9b61-694636189c04` \u003cbr\u003e Unique identifier of the property associated with the attachment. Can only filter by one property at a time.","format":"uuid"}}},"required":false}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/properties/attachments?page[size]=10\u0026page[number]=2\u0026filters[PropertyId]=2e67d04f-e02f-449a-9b61-694636189c04\u0026filters[CreatedAtFrom]=2020-12-14T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Properties.Attachments"}}}}}}},"/properties/{PropertyId}/attachments":{"post":{"operationId":"createPropertyAttachment","summary":"Create Property Attachment","description":"Upload an attachment to a property","tags":["Properties"],"parameters":[{"name":"PropertyId","in":"path","description":"The property to which the file will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/properties/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/attachments' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --form 'File=@\"/path/to/file.pdf\"'\n"}],"requestBody":{"description":"Attachment object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"},"FolderId":{"type":"string","format":"uuid","description":"Unique identifier of the folder to file the attachment under"}}},"example":{"File":"/path/to/file.pdf"}}}},"responses":{"201":{"description":"Uploaded an attachment","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the property attachment","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/properties/notes":{"get":{"operationId":"getPropertiesNotes","summary":"List All Properties Notes","description":"Returns all properties' notes that meet the filter criteria","tags":["Properties"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/properties/notes?filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for property notes. All GET requests must include a filter for `[PropertyId]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"PropertyId":{"description":"Example: `filters[propertyId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the property. Filter the results based on a single value.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns property note records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Properties.Notes"}}}}}}},"/properties/{PropertyId}/notes":{"post":{"operationId":"createpropertyNote","summary":"Create Property Note","description":"Add a note to a property","tags":["Properties"],"parameters":[{"name":"PropertyId","in":"path","description":"The property to which the note will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/properties/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for property\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the property note. A property note cannot exceed `65,535` characters."}}},"example":{"Body":"This property has a scheduled cleaning service on 11/11/2023"}}}},"responses":{"201":{"description":"Created a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the property note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/properties/{PropertyId}/notes/{Id}":{"patch":{"operationId":"updatepropertyNote","summary":"Update Property Note","description":"Update a property note","tags":["Properties"],"parameters":[{"name":"PropertyId","in":"path","description":"The property to which the note will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d9"}},{"name":"Id","in":"path","description":"Unique identifier of the note to update","required":true,"schema":{"type":"string","format":"uuid","example":"45e04805-01c4-4e39-adc9-c75ff9ddc8d7"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/properties/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes/632b920c-e048-4a7b-b1f6-eddb6ad6d23c' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for property - updating\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the property note. A property note cannot exceed `65,535` characters."}}},"example":{"Body":"This property has a scheduled cleaning service on 11/30/2022 - Updated"}}}},"responses":{"200":{"description":"Updated a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated property note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular note."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (property Id or Note Id) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Required parameter Body is missing."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/properties/marketing_photos":{"get":{"operationId":"getPropertiesMarketingPhotos","summary":"List All Properties Marketing Photos","description":"Returns all multi-family residential properties' marketing photos that meet the specified filter criteria. Marketing photos are not available for single-family residential properties.","tags":["Properties"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/properties/marketing_photos?filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cba' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for property photos. All GET requests must include a filter for `[PropertyId]`.","style":"deepObject","schema":{"type":"object","required":["PropertyId"],"properties":{"PropertyId":{"description":"Example: `filters[propertyId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the property. Filter the results based on one or more PropertyIds. Multiple values should be separated by commas.","type":"string","format":"uuid"}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Properties.MarketingPhotos"}}}}}}},"/properties/{PropertyId}/marketing_photos/{MarketingPhotoId}":{"patch":{"operationId":"updatePropertyMarketingPhoto","summary":"Update Property Marketing Photo","description":"Update a property marketing photo","tags":["Properties"],"parameters":[{"name":"PropertyId","in":"path","description":"The property to which the marketing photo is attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d9"}},{"name":"MarketingPhotoId","in":"path","description":"Unique identifier of the marketing photo to update","required":true,"schema":{"type":"string","format":"uuid","example":"45e04805-01c4-4e39-adc9-c75ff9ddc8d7"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/properties/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/marketing_photos/632b920c-e048-4a7b-b1f6-eddb6ad6d23c' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Position\": 1\n     }'\n"}],"requestBody":{"description":"Marketing Photo object","required":true,"content":{"application/json":{"schema":{"properties":{"Position":{"type":"string","description":"The position of the marketing photo in the property marketing photo gallery. The position must be a positive integer. The other marketing photos in the gallery will be shifted to accommodate the new position."}}},"example":{"Position":1}}}},"responses":{"200":{"description":"Updated a marketing photo","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated property marketing photo","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular marketing photo."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (Marketing Photo Id) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Required parameter Position is missing."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}},"delete":{"operationId":"deletePropertyMarketingPhoto","summary":"Delete Property Marketing Photo","description":"Delete a marketing photo from a property","tags":["Properties"],"parameters":[{"name":"PropertyId","in":"path","description":"Unique identifier of the property that contains the marketing photo to be deleted","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}},{"name":"MarketingPhotoId","in":"path","description":"Unique identifier of the marketing photo to be deleted from the property","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-11c5-4e27-adc9-c75ff9ddc9d9"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request DELETE 'https://api.appfolio.com/api/v0/properties/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/marketing_photos/57e04805-11c5-4e27-adc9-c75ff9ddc9d9' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"responses":{"204":{"description":"The request was successful. No content will be included in the response payload.","content":{"application/json":{"example":{}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to delete the marketing photo."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"The PropertyId or MarketingPhotoId (or both) provided were not found. Please verify the PropertyId and MarketingPhotoId and try again."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/properties/photos":{"get":{"operationId":"getPropertiesPhotos","summary":"List All Properties Photos","description":"Returns all properties' photos that meet the filter criteria","tags":["Properties"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/properties/photos?filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cba' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for property photos. All GET requests must include a filter for `[PropertyId]`.","style":"deepObject","schema":{"type":"object","required":["PropertyId"],"properties":{"PropertyId":{"description":"Example: `filters[propertyId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the property. Filter the results based on one or more PropertyIds. Multiple values should be separated by commas.","type":"string","format":"uuid"}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Properties.Photos"}}}}}}},"/properties/{PropertyId}/marketing_photos":{"post":{"operationId":"createPropertyMarketingPhoto","summary":"Create Property Marketing Photo","description":"Upload a marketing photo to a multi-family residential property. Marketing photos are not available for single-family residential properties.","tags":["Properties"],"parameters":[{"name":"PropertyId","in":"path","description":"The property to which the marketing photo will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/properties/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/marketing_photos' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --form 'File=@\"/path/to/file.pdf\"'\n"}],"requestBody":{"description":"Marketing photo object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"},"Position":{"type":"integer","description":"The position of the photo in the property marketing photo gallery. The position must be a non-negative integer. If multiple photos are associated with a property, the order of the remaining photos (positions 1 and above) will not change automatically if some photos are deleted. For example, if there are photos in positions 1, 2, 3, and 4, and photos 1 and 3 are deleted, the remaining photos will retain their original positions of 2 and 4"},"MarketingCategory":{"type":"string","description":"The type of marketing photo"}}},"example":{"File":"/path/to/file.pdf","Position":1}}}},"responses":{"201":{"description":"Uploaded a photo","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the property marketing photo","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/properties/{PropertyId}/photos":{"post":{"operationId":"createPropertyPhoto","summary":"Create Property Photo","description":"Upload a photo to a property","tags":["Properties"],"parameters":[{"name":"PropertyId","in":"path","description":"The property to which the photo will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/properties/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/photos' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --form 'File=@\"/path/to/file.pdf\"'\n"}],"requestBody":{"description":"Photo object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"}}},"example":{"File":"/path/to/file.pdf"}}}},"responses":{"201":{"description":"Uploaded a photo","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the property photo","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/properties/{PropertyId}/photos/{PhotoId}":{"patch":{"operationId":"updatepropertyPhoto","summary":"Update Property Photo","description":"Update a property photo","tags":["Properties"],"parameters":[{"name":"PropertyId","in":"path","description":"The property to which the photo is attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d9"}},{"name":"PhotoId","in":"path","description":"Unique identifier of the photo to update","required":true,"schema":{"type":"string","format":"uuid","example":"45e04805-01c4-4e39-adc9-c75ff9ddc8d7"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/properties/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/photos/632b920c-e048-4a7b-b1f6-eddb6ad6d23c' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Position\": 1\n     }'\n"}],"requestBody":{"description":"Photo object","required":true,"content":{"application/json":{"schema":{"properties":{"Position":{"type":"string","description":"The position of the photo in the property photo gallery. The position must be a non-negative integer. If multiple photos are associated with a property, the order of the remaining photos (positions 1 and above) will not change automatically if some photos are deleted. For example, if there are photos in positions 1, 2, 3, and 4, and photos 1 and 3 are deleted, the remaining photos will retain their original positions of 2 and 4"}}},"example":{"Position":1}}}},"responses":{"200":{"description":"Updated a photo","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated property photo","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular photo."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (Property Id or Photo Id) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Required parameter Position is missing."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}},"delete":{"operationId":"deletePropertyPhoto","summary":"Delete Property Photo","description":"Delete a photo from a property","tags":["Properties"],"parameters":[{"name":"PropertyId","in":"path","description":"Unique identifier of the property that contains the photo to be deleted","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}},{"name":"PhotoId","in":"path","description":"Unique identifier of the photo to be deleted from the property","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-11c5-4e27-adc9-c75ff9ddc9d9"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request DELETE 'https://api.appfolio.com/api/v0/properties/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/photos/57e04805-11c5-4e27-adc9-c75ff9ddc9d9' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"responses":{"204":{"description":"The request was successful. No content will be included in the response payload.","content":{"application/json":{"example":{}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to delete the photo."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"The PropertyId or PhotoId (or both) provided were not found. Please verify the PropertyId and PhotoId and try again."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/property_groups":{"get":{"operationId":"getPropertyGroups","summary":"List All Property Groups","description":"Returns all property groups that meet the filter criteria","tags":["Property Groups"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/property_groups?filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for property groups. All GET requests must include a filter for `[Id]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"description":"Example: `filters[Id]=234abcde-c543-456e-abc9-123456789abc,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique identifier of the property group. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns property group records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyGroups"}}}}}}},"/property_groups/{propertyGroupId}":{"patch":{"operationId":"updatePropertyGroup","summary":"Update a Property Group","description":"Update a property group","tags":["Property Groups"],"parameters":[{"name":"propertyGroupId","in":"path","description":"Unique identifier of the property group to update","required":true,"schema":{"type":"string","example":"9933b9bc-3910-417d-bdf2-8884b63ccf97","format":"uuid"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/property_groups/2e67d04f-e02f-449a-9b61-694636189c04' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"PropertyIds\": [\"96d90af9-15be-4139-b43e-3390358d2602\", \"5683df20-b606-4138-8ec4-d9737f7c12bb\", \"4d53faad-dbf6-4754-a23e-f5c486139e85\"]\n     }'\n"}],"requestBody":{"description":"Property Group object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyGroup.Update"},"example":{"PropertyIds":["96d90af9-15be-4139-b43e-3390358d2602","5683df20-b606-4138-8ec4-d9737f7c12bb","4d53faad-dbf6-4754-a23e-f5c486139e85"]}}}},"responses":{"200":{"description":"Updated a Property Group","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated property group","type":"string","example":"2e67d04f-e02f-449a-9b61-694636189c04","format":"uuid"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Property Ids not found: 96d90af9-15be-4139-b43e-3390358d2602"}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/purchase_orders":{"get":{"operationId":"getPurchaseOrders","summary":"List All Purchase Orders","description":"Returns all purchase orders that meet the filter criteria","tags":["Purchase Orders"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/purchase_orders?filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"filters","in":"query","description":"Filters for Purchase Orders. All GET requests must include a filter for `[Id]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the purchase order to filter by. Filter the results based on one or more Ids. Multiple values should be separated by commas.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns purchase order records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"},"Approved":{"description":"Example: `filters[Approved]=true` \u003cbr\u003e When `true`, returns purchase orders that are approved or exempt from approval — exempt purchase orders appear in the response with `ApprovalStatus: In Progress`, so not every returned row will read as `Approved`. When `false` or omitted, no approval-status filter is applied and purchase orders in all approval statuses are returned.","type":"boolean"},"Canceled":{"description":"Example: `filters[Canceled]=true` \u003cbr\u003e When `true`, canceled purchase orders are returned alongside active ones — each row exposes a `Canceled` boolean so the two can be distinguished. When `false` or omitted, only active (non-canceled) purchase orders are returned.","type":"boolean"}}},"required":true},{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseOrders"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/recurring_charges":{"get":{"operationId":"getRecurringCharges","summary":"List All Recurring Charges","description":"Returns all recurring charges that meet the filter criteria","tags":["Recurring Charges"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/recurring_charges?filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for recurring charges. All GET requests must include a filter for `[OccupancyId]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"OccupancyId":{"description":"Example: `filters[OccupancyId]=234abcde-c543-456e-abc9-123456789abc,1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the occupancy. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns recurring charge records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecurringCharges"}}}}}},"post":{"operationId":"createRecurringCharges","summary":"Create Recurring Charges","description":"Create a recurring charge","tags":["Recurring Charges"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/recurring_charges' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"Amount\": \"235.79\",\n        \"Description\": \"Sample description of the recurring charge\",\n        \"Frequency\": \"Monthly\",\n        \"StartDate\": \"2022-12-15\",\n        \"EndDate\": \"2023-12-15\",\n        \"ProrateFirstMonth\": false,\n        \"ProrateLastMonth\": false,\n        \"OccupancyId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\"\n     }'\n"}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the created recurring charge","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}}},"requestBody":{"description":"Recurring Charge object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecurringCharge.Create"},"example":{"Amount":"235.79","Description":"Sample description of the recurring charge","Frequency":"Monthly","StartDate":"2022-12-25","EndDate":"2023-12-25","ProrateFirstMonth":false,"ProrateLastMonth":false,"OccupancyId":"71c5cb28-547f-11ec-bfa5-02975b268737","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08"}}}}}},"/recurring_charges/bulk":{"post":{"operationId":"bulkCreateRecurringCharges","summary":"Bulk Create Recurring Charges","description":"Create multiple recurring charges in bulk","tags":["Recurring Charges"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/recurring_charges/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"Amount\": \"235.79\",\n            \"Description\": \"Monthly rent\",\n            \"Frequency\": \"Monthly\",\n            \"StartDate\": \"2022-12-15\",\n            \"EndDate\": \"2023-12-15\",\n            \"ProrateFirstMonth\": false,\n            \"ProrateLastMonth\": false,\n            \"OccupancyId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n            \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\",\n            \"ReferenceId\": \"ref-001\"\n          },\n          {\n            \"Amount\": \"150.00\",\n            \"Description\": \"Parking fee\",\n            \"Frequency\": \"Monthly\",\n            \"StartDate\": \"2022-12-15\",\n            \"ProrateFirstMonth\": false,\n            \"ProrateLastMonth\": false,\n            \"OccupancyId\": \"81c5cb28-547f-11ec-bfa5-02975b268738\",\n            \"GlAccountId\": \"e9009724-9f32-11ec-bc31-d46a96ab9b09\",\n            \"ReferenceId\": \"ref-002\"\n          }\n        ]\n     }'\n"}],"requestBody":{"description":"Recurring Charge objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RecurringCharge.BulkCreate"}}}},"example":{"data":[{"Amount":"235.79","Description":"Monthly rent","Frequency":"Monthly","StartDate":"2022-12-15","EndDate":"2023-12-15","ProrateFirstMonth":false,"ProrateLastMonth":false,"OccupancyId":"71c5cb28-547f-11ec-bfa5-02975b268737","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","ReferenceId":"ref-001"},{"Amount":"150.00","Description":"Parking fee","Frequency":"Monthly","StartDate":"2022-12-15","ProrateFirstMonth":false,"ProrateLastMonth":false,"OccupancyId":"81c5cb28-547f-11ec-bfa5-02975b268738","GlAccountId":"e9009724-9f32-11ec-bc31-d46a96ab9b09","ReferenceId":"ref-002"}]}}}},"responses":{"202":{"description":"Recurring charges accepted for processing","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","description":"Unique identifier for the asynchronous job","example":"71c5cb28-547f-11ec-bfa5-02975b268737"}}}}}},"422":{"description":"Unprocessable Entity - Validation errors occurred","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","description":"Array of validation errors","items":{"properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer."},"successful":{"description":"Always false for error responses","type":"boolean","example":false},"errors":{"type":"array","description":"Array of error details for this recurring charge","items":{"properties":{"attribute":{"type":"string","description":"Attribute containing the error"},"message":{"type":"string","description":"Error description"}}}}}}}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/recurring_charges/{recurringChargeId}":{"patch":{"operationId":"updateRecurringCharge","summary":"Update Recurring Charges","description":"Update a recurring charge","tags":["Recurring Charges"],"parameters":[{"name":"recurringChargeId","in":"path","description":"Unique identifier of the recurring charge to update","required":true,"schema":{"type":"string","example":"cc113767-a69e-11ea-abac-0a41ffc49f5e","format":"uuid"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/recurring_charges/2e67d04f-e02f-449a-9b61-694636189c04' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"Amount\": \"222.55\",\n        \"Description\": \"Sample description of the recurring charge\",\n        \"Frequency\": \"Monthly\",\n        \"StartDate\": \"2022-12-15\",\n        \"EndDate\": \"2023-12-15\",\n        \"ProrateFirstMonth\": false,\n        \"ProrateLastMonth\": false,\n        \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\"\n     }'\n"}],"requestBody":{"description":"Recurring Charge object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecurringCharge.Update"},"example":{"Amount":"222.55","Description":"Sample description of the recurring charge","Frequency":"Monthly","StartDate":"2022-12-25","EndDate":"2023-12-25","ProrateFirstMonth":false,"ProrateLastMonth":false,"GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08"}}}},"responses":{"200":{"description":"Updated a Recurring Charge","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated recurring charge","type":"string","example":"ac32dc0a-9f44-42f7-b01f-cfb2ec929e19","format":"uuid"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The specified GL account is invalid. The GL account must exist, must not be a cash account type, and must not be a corporate account."}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/recurring_journal_entries":{"get":{"operationId":"getRecurringJournalEntries","summary":"List All Recurring Journal Entries","description":"Returns all recurring journal entries that meet the filter criteria","tags":["Recurring Journal Entries"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/recurring_journal_entries?filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for recurring journal entries. All GET requests must include a filter for `[Id]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the recurring journal entries to retrieve. Multiple values should be separated by commas."},"LastUpdatedAtFrom":{"type":"string","format":"date-time","description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns recurring journal entry records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC)."},"PropertyId":{"type":"string","format":"uuid","description":"Example: `filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of a property. Returns recurring journal entries belonging to that property. Cannot be combined with `PropertyGroupId`."},"PropertyGroupId":{"type":"string","format":"uuid","description":"Example: `filters[PropertyGroupId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of a property group. Returns recurring journal entries belonging to that property group. Cannot be combined with `PropertyId`."}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecurringJournalEntries"}}}}}}},"/recurring_journal_entries/bulk":{"post":{"operationId":"bulkCreateRecurringJournalEntries","summary":"Bulk Create Recurring Journal Entries","description":"Create recurring journal entries in bulk. Returns a 202 with a job_id; poll the Jobs endpoint for completion.","tags":["Recurring Journal Entries"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/recurring_journal_entries/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"data\": [\n         {\n           \"ReferenceId\": \"ref-001\",\n           \"PropertyId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n           \"StartDate\": \"2024-01-01\",\n           \"Recurring\": true,\n           \"PostDay\": 1,\n           \"Months\": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],\n           \"LineItems\": [\n             { \"Debit\": \"100.00\", \"Credit\": null, \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\", \"Description\": \"debit line\" },\n             { \"Credit\": \"100.00\", \"Debit\": null, \"GlAccountId\": \"e1009724-9f32-11ec-bc31-d46a96ab9b09\", \"Description\": \"credit line\" }\n           ]\n         },\n         {\n           \"ReferenceId\": \"ref-002\",\n           \"PropertyId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n           \"StartDate\": \"2024-01-01\",\n           \"Recurring\": false,\n           \"LineItems\": [\n             { \"Debit\": \"50.00\", \"Credit\": null, \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\", \"Description\": \"debit line\" },\n             { \"Credit\": \"50.00\", \"Debit\": null, \"GlAccountId\": \"e1009724-9f32-11ec-bc31-d46a96ab9b09\", \"Description\": \"credit line\" }\n           ]\n         }\n       ]\n     }'\n"}],"requestBody":{"description":"Array of recurring journal entry objects to create","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RecurringJournalEntry.BulkCreate"}}}}}}},"responses":{"202":{"description":"Bulk create job accepted. Poll the Jobs endpoint with the returned JobId to check completion.","content":{"application/json":{"schema":{"properties":{"JobId":{"description":"Unique identifier of the background job","type":"string","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/rental_applications/{RentalApplicationId}/attachments":{"post":{"operationId":"createRentalApplicationAttachment","summary":"Create Rental Application Attachment","description":"Add an attachment to a rental application","tags":["Rental Applications"],"parameters":[{"name":"RentalApplicationId","in":"path","description":"The rental application to which the file will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/rental_applications/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/attachments' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --form 'File=@\"/path/to/file.pdf\"'\n"}],"requestBody":{"description":"Attachment object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"}}},"example":{"File":"/path/to/file.pdf"}}}},"responses":{"201":{"description":"Uploaded an attachment","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the rental application attachment","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/rental_applications":{"get":{"operationId":"getRentalApplications","summary":"List All Rental Applications","description":"Returns all rental applications that meet the filter criteria","tags":["Rental Applications"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/rental_applications?filters[Id]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[PropertyId]=1abcde23-c543-456e-abc9-123456689cba\u0026filters[UnitId]=1abcde23-c543-456e-abc9-123455789cba\u0026filters[SubmittedAtFrom]=2020-12-15' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for rental applications. All GET requests must include a filter for `[Id]`, `[PropertyId]`, `[UnitId]`, `[GroupId]`, `[ScreeningId]`, or `[SubmittedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cee,1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the rental application. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc","format":"uuid"},"PropertyId":{"description":"Example: `filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cee,1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the property for which rental applications will be retrieved. Filter the results based on one or more `PropertyId`s. Multiple values should be separated by commas.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc","format":"uuid"},"UnitId":{"description":"Example: `filters[UnitId]=1abcde23-c543-456e-abc9-123456789cee,1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the unit for which rental applications will be retrieved. Filter the results based on one or more `UnitId`s. Multiple values should be separated by commas","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc","format":"uuid"},"GroupId":{"description":"Example: `filters[GroupId]=1abcde23-c543-456e-abc9-123456789cee,1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the application group to filter by. Filter the results based on one or more `GroupId`s. Multiple values should be separated by commas.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc","format":"uuid"},"ScreeningId":{"description":"Example: `filters[ScreeningId]=1abcde23-c543-456e-abc9-123456789cee,1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the screening to filter by. Filter the results based on one or more `ScreeningId`s. Multiple values should be separated by commas.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc","format":"uuid"},"SubmittedAtFrom":{"description":"Example: `filters[SubmittedAtFrom]=2021-15-15T16:30:46Z` \u003cbr\u003e Returns rental application records that were created after the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC)..","type":"string","format":"date-time","example":"2021-12-15T16:30:46Z"}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalApplications"}}}}}}},"/rental_applications/{rentalApplicationId}":{"patch":{"operationId":"updateRentalApplication","summary":"Update Rental Application","description":"Update a rental application","tags":["Rental Applications"],"parameters":[{"name":"rentalApplicationId","in":"path","description":"Unique identifier of the rental application to update","required":true,"schema":{"type":"string","example":"7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalApplication.Update"},"example":{"Status":"canceled","StatusReason":"The reason why the rental application is canceled"}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/rental_applications/7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"Status\": \"canceled\",\n        \"StatusReason\": \"The reason why the rental application is canceled\"\n     }'\n"}],"responses":{"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"Updated a Rental Application","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated rental application","type":"string","example":"7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular rental application."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (RentalApplicationId) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Status Reason can't be blank."}}}}}}},"/rental_applications/notes":{"get":{"operationId":"getRentalApplicationsNotes","summary":"List All Rental Applications Notes","description":"Returns all rental applications notes that meet the filter criteria","tags":["Rental Applications"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/rental_applications/notes?filters[RentalApplicationId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for rental application notes. All GET requests must include a filter for `[RentalApplicationId]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"RentalApplicationId":{"description":"Example: `filters[RentalApplicationId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the rental application. Filter the results based on a single value.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns rental application note records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RentalApplications.Notes"}}}}}}},"/rental_applications/{RentalApplicationId}/notes":{"post":{"operationId":"createRentalApplicationNote","summary":"Create Rental Application Note","description":"Add a note to a rental application","tags":["Rental Applications"],"parameters":[{"name":"RentalApplicationId","in":"path","description":"The rental application to which the note will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/rental_applications/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for rental application\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the rental applications note. A rental applications note cannot exceed `65,535` characters."}}},"example":{"Body":"This rental application has been submitted on 11/11/2023"}}}},"responses":{"201":{"description":"Created a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the rental applications note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/rental_applications/{RentalApplicationId}/notes/{Id}":{"patch":{"operationId":"updateRentalApplicationNote","summary":"Update Rental Application Note","description":"Update a note to a rental application","tags":["Rental Applications"],"parameters":[{"name":"RentalApplicationId","in":"path","description":"The rental application to which the note will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d9"}},{"name":"Id","in":"path","description":"Unique identifier of the note to update","required":true,"schema":{"type":"string","format":"uuid","example":"45e04805-01c4-4e39-adc9-c75ff9ddc8d7"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/rental_applications/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes/632b920c-e048-4a7b-b1f6-eddb6ad6d23c' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for rental application - updating\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the rental application note. A rental application note cannot exceed `65,535` characters."}}},"example":{"Body":"This rental application has been submitted on 11/11/2023"}}}},"responses":{"200":{"description":"Updated a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated rental application note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular note."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (RentalApplication Id or Note Id) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Required parameter Body is missing."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/security_deposits/bulk":{"post":{"operationId":"bulkCreateSecurityDeposits","summary":"Bulk Create Security Deposits","description":"Create security_deposits in bulk","tags":["Security Deposits"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/security_deposits/bulk' \\ \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"ReferenceId\": \"deposit1\",\n            \"Amount\": 450.45,\n            \"OccupancyId\": \"6c27db25-44d8-4706-a7e1-6c6e64feca7d\",\n            \"Remarks\": \"Deposit submitted via check\",\n            \"Reference\": \"21\",\n            \"SecurityDepositDate\": '2025-03-03',\n            \"SecurityDepositGlAccountId\": \"8b879f41-2418-47b2-b193-c497be8b3ff4\"\n          },\n          {\n            \"ReferenceId\": \"deposit2\",\n            \"Amount\": 450.45,\n            \"OccupancyId\": \"b471d193-d6f5-4962-929c-68e115739300\",\n            \"SecurityDepositDate\": '2025-03-15',\n            \"SecurityDepositGlAccountId\": \"8b879f41-2418-47b2-b193-c497be8b3ff4\"\n          },\n        ]\n      }'\n"}],"requestBody":{"description":"Security deposit objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SecurityDeposit.BulkCreate"}}}},"example":{"data":[{"ReferenceId":"deposit1","Amount":450.45,"OccupancyId":"6c27db25-44d8-4706-a7e1-6c6e64feca7d","Remarks":"Deposit submitted via check","Reference":"21","SecurityDepositDate":"2025-03-03","SecurityDepositGlAccountId":"8b879f41-2418-47b2-b193-c497be8b3ff4"},{"ReferenceId":"deposit2","Amount":450.45,"OccupancyId":"b471d193-d6f5-4962-929c-68e115739300","SecurityDepositDate":"2025-03-15","SecurityDepositGlAccountId":"8b879f41-2418-47b2-b193-c497be8b3ff4"}]}}}},"responses":{"202":{"description":"Security deposits accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk creation of security deposits"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"SecurityDepositId":{"type":"string","description":"Unique identifier of the created payment of the security deposit"},"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual security deposits in the bulk-creation of security deposits.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted security deposit creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"OccupancyId","message":"Required parameter OccupancyId is missing."},{"attribute":"SecurityDepositGlAccountId","message":"is invalid"}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/security_deposits/{SecurityDepositId}/reverse":{"post":{"operationId":"reverseSecurityDeposit","summary":"Reverse Security Deposit","description":"Reverse a security deposit created via the API. Reversing a security deposit zeroes out the full transaction: the security deposit invoice, receipt, bank deposit, and balance-forward journal entry. Corrected data can then be re-posted through the bulk create endpoint.","tags":["Security Deposits"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/security_deposits/57e04805-01c4-4e39-adc9-c74ff9ddc8d8/reverse' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"SecurityDepositId","in":"path","description":"Unique identifier of the security deposit to reverse","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"responses":{"204":{"description":"Security deposit reversed successfully"},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/showings":{"get":{"operationId":"getShowings","summary":"List All Showings","description":"Returns all showings that meet the filter criteria","tags":["Showings"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/showings?page[size]=10\u0026page[number]=2\u0026filters[Id]=7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":500}},"required":false},{"name":"filters","in":"query","description":"Filters for showings. All GET requests must include a filter for `[Id]` (if available), or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"type":"string","description":"Example: `filters[Id]=7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e, 6g3230dc-5c1a-56ab-5c2a-55781b1dba9h` \u003cbr\u003e Unique identifier of the showing. Filter the results based on one or more Ids. Multiple values should be separated by commas","format":"uuid"},"LastUpdatedAtFrom":{"type":"string","format":"date-time","description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns AppFolio Property Manager showing records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).."}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Showings"}}}}}},"post":{"operationId":"createShowing","summary":"Create Showings","description":"Create a showing","tags":["Showings"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/showings' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"AssignedUserId\": \"80c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"EndAt\": \"2022-02-08T18:45:00Z\",\n        \"LeadId\": \"71c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"Notes\": \"Prospect was very excited about the unit.\",\n        \"StartAt\": \"2022-02-08T18:30:00Z\",\n        \"UnitId\": \"91c5cb28-547f-11ec-bfa5-02975b268737\"\n     }'\n"}],"responses":{"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"201":{"description":"Created","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the created showing","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}}},"requestBody":{"description":"Showing object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Showing.Create"},"example":{"AssignedUserId":"80c5cb28-547f-11ec-bfa5-02975b268737","EndAt":"2022-02-08T18:45:00Z","LeadId":"71c5cb28-547f-11ec-bfa5-02975b268737","Notes":"Prospect was very excited about the unit.","StartAt":"2022-02-08T18:30:00Z","UnitId":"91c5cb28-547f-11ec-bfa5-02975b268737"}}}}}},"/showings/{showingId}":{"patch":{"operationId":"updateShowing","summary":"Update Showing","description":"Update a showing","tags":["Showings"],"parameters":[{"name":"showingId","in":"path","description":"Unique identifier of the showing to update","required":true,"schema":{"type":"string","example":"7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Showing.Update"},"example":{"AssignedUserId":"f6b42b23-85e1-4a8a-a581-ceab1055e310","EndAt":"2022-02-08T18:45:00Z","Notes":"Prospect wants to see the unit.","StartAt":"2022-02-08T18:30:00Z","Status":"canceled"}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/showings/7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"AssignedUserId\": \"80c5cb28-547f-11ec-bfa5-02975b268737\",\n        \"EndAt\": \"2022-02-08T18:45:00Z\",\n        \"Notes\": \"Prospect wants to see the unit.\",\n        \"StartAt\": \"2022-02-08T18:30:00Z\",\n        \"Status\": \"canceled\"\n     }'\n"}],"responses":{"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"Updated a Showing","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated showing","type":"string","example":"7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular showing."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (Showing Id) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"User not found."}}}}}}},"/tenants":{"get":{"operationId":"getTenants","summary":"List All Tenants","description":"Returns all tenants that meet the filter criteria","tags":["Tenants"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/tenants?filters[Id]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[UnitId]=1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc\u0026filters[MoveInOnFrom]=2020-12-15T16:30:46Z\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z\u0026filters[Status]=Current' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for tenants. All GET requests must include a filter for `[Id]` (if available), or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the tenant(s). Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","format":"uuid"},"IncludeHidden":{"description":"Example: `filters[IncludeHidden]=true` \u003cbr\u003e Indicates whether or not to include inactive tenants from the list of tenants","type":"boolean"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns tenant records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"},"MoveInOnFrom":{"description":"Example: `filters[MoveInOnFrom]=2021-10-01` \u003cbr\u003e The move-in date range from the date stipulated","type":"string","format":"date"},"MoveInOnTo":{"description":"Example: `filters[MoveInOnTo]=2021-10-31` \u003cbr\u003e The move-in date range to the date stipulated","type":"string","format":"date"},"MoveOutOnFrom":{"description":"Example: `filters[MoveOutOnFrom]=2021-10-01` \u003cbr\u003e The move-out date range from the date stipulated","type":"string","format":"date"},"MoveOutOnTo":{"description":"Example: `filters[MoveOutOnTo]=2021-10-31` \u003cbr\u003e The move-out date range to the date stipulated","type":"string","format":"date"},"OccupancyId":{"description":"Example: `filters[OccupancyId]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the occupancy where the tenant(s) reside. Filter the results based on one or more `OccupancyId`s. Multiple values should be separated by commas.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc","format":"uuid"},"PropertyId":{"description":"Example: `filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the property the tenant occupies. Filter the results based on one or more `PropertyId`s. Multiple values should be separated by commas.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc","format":"uuid"},"Status":{"example":"Current,Evict,Past","description":"Example: `filters[Status]=Current` \u003cbr\u003e Filter the results based on one or more statuses. If multiple comma-separated statuses passed in, they will be chained with OR. \u003cbr /\u003e","$ref":"#/components/schemas/Tenant.Status"},"UnitId":{"description":"Example: `filters[UnitId]=1abcde23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the unit the tenant occupies. Filter the results based on one or more `UnitId`s. Multiple values should be separated by commas.","type":"string","example":"1abcde23-c543-456e-abc9-123456789cba,234abcde-c543-456e-abc9-123456789abc","format":"uuid"},"IncludeUnassigned":{"description":"Example: `filters[IncludeUnassigned]=true` \u003cbr\u003e Indicates whether or not to include future tenants who have not yet been assigned to a unit.","type":"boolean"}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tenants"}}}}}}},"/tenants/{tenantId}":{"patch":{"operationId":"updateTenant","summary":"Update Tenant","description":"Update a Tenant","tags":["Tenants"],"parameters":[{"name":"tenantId","in":"path","description":"Unique identifier of the tenant to update","required":true,"schema":{"type":"string","example":"9933b9bc-3910-417d-bdf2-8884b63ccf97","format":"uuid"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/tenants/2e67d04f-e02f-449a-9b61-694636189c04' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"OccupancyCustomFields\": {\n          \"a965e7d8-a17d-11ec-b909-0242ac120002\": \"a new value\",\n          \"454d8635-521e-4864-99fb-0bd6200d3a0f\": true,\n          \"c80d3dd1-9eba-45aa-803c-666280b8ff24\": 87.40,\n          \"3277c366-1783-42a9-b925-0bca2afbe391\": \"0e9a7b18-1778-4a03-bc1c-f913aeaef6bc\"\n        }\n     }'\n"}],"requestBody":{"description":"Tenant object","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tenant.Update"},"example":{"OccupancyCustomFields":{"a965e7d8-a17d-11ec-b909-0242ac120002":"a new value","454d8635-521e-4864-99fb-0bd6200d3a0f":true,"c80d3dd1-9eba-45aa-803c-666280b8ff24":87.4,"3277c366-1783-42a9-b925-0bca2afbe391":"0e9a7b18-1778-4a03-bc1c-f913aeaef6bc"}}}}},"responses":{"200":{"description":"Updated a Tenant","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated tenant","type":"string","example":"2e67d04f-e02f-449a-9b61-694636189c04","format":"uuid"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"}}}},"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/tenants/notes":{"get":{"operationId":"getTenantsNotes","summary":"List All Tenants Notes","description":"Returns all tenant notes that meet the filter criteria","tags":["Tenants"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/tenants/notes?filters[TenantId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for tenant notes. All GET requests must include a filter for `[TenantId]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"TenantId":{"description":"Example: `filters[TenantId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the tenant. Filter the results based on a single value.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns tenant note records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tenants.Notes"}}}}}}},"/tenants/{TenantId}/notes":{"post":{"operationId":"createTenantNote","summary":"Create Tenant Note","description":"Add a note to a tenant","tags":["Tenants"],"parameters":[{"name":"TenantId","in":"path","description":"The tenant to which the note will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/tenants/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for tenant\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the tenant note. A tenant note cannot exceed `65,535` characters."}}},"example":{"Body":"This tenant have scheduled a cleaning service on 11/11/2023"}}}},"responses":{"201":{"description":"Created a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the tenant note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/tenants/{TenantId}/notes/{Id}":{"patch":{"operationId":"updateTenantNote","summary":"Update Tenant Note","description":"Update a note to a tenant","tags":["Tenants"],"parameters":[{"name":"TenantId","in":"path","description":"The tenant to which the note will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d9"}},{"name":"Id","in":"path","description":"Unique identifier of the note to update","required":true,"schema":{"type":"string","format":"uuid","example":"45e04805-01c4-4e39-adc9-c75ff9ddc8d7"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/tenants/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes/632b920c-e048-4a7b-b1f6-eddb6ad6d23c' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for tenant - updating\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the tenant note. A tenant note cannot exceed `65,535` characters."}}},"example":{"Body":"This tenant have scheduled a cleaning service on 11/30/2022 - Updated"}}}},"responses":{"200":{"description":"Updated a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated tenant note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular note."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (Tenant Id or Note Id) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Required parameter Body is missing."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/tenants/bulk":{"patch":{"operationId":"bulkUpdateTenants","summary":"Bulk Update Tenants","description":"Update Tenants in bulk","tags":["Tenants"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/tenants/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"Id\": \"ab0326f1-12e8-11ef-ad0b-0278f96d6853\",\n            \"FirstName\": \"John\",\n            \"LastName\": \"Doe\",\n            \"MiddleName\": \"William\",\n            \"CompanyName\": \"Doe Enterprises\",\n            \"IsCompany\": false,\n            \"MoveInOn\": \"2021-03-01\",\n            \"MoveOutOn\": \"2023-03-01\",\n            \"PrimaryTenant\": true,\n            \"TenantType\": \"Financially Responsible\",\n            \"PhoneNumbers\": [\n              {\n                \"Number\": \"555-123-4567\",\n                \"Label\": \"Mobile\",\n                \"AdditionalDetails\": \"Primary contact number\",\n                \"IsPrimary\": true\n              }\n            ],\n            \"Emails\": [\n              {\n                \"EmailAddress\": \"john.doe@example.com\",\n                \"IsPrimary\": true\n              }\n            ],\n            \"Addresses\": [\n              {\n                \"Address1\": \"123 Main St\",\n                \"Address2\": \"Apt 1\",\n                \"City\": \"Anytown\",\n                \"State\": \"CA\",\n                \"PostalCode\": \"12345\",\n                \"CountryCode\": \"US\",\n                \"IsPrimary\": true\n              }\n            ],\n            \"Pets\": [\n              {\n                \"Name\": \"Fluffy\",\n                \"Type\": \"Dog\",\n                \"Age\": 2,\n                \"Weight\": 10\n              }\n            ]\n          },\n          {\n            \"Id\": \"ab0326f1-12e8-11ef-ad0b-0278f96d6853\",\n            \"FirstName\": \"Jane\",\n            \"LastName\": \"Doe\",\n            \"MiddleName\": \"Marie\",\n            \"CompanyName\": \"Doe Enterprises\",\n            \"IsCompany\": false,\n            \"MoveInOn\": \"2021-03-01\",\n            \"MoveOutOn\": \"2023-03-01\",\n            \"PrimaryTenant\": false,\n            \"TenantType\": \"Other Occupant\",\n            \"PhoneNumbers\": [\n              {\n                \"Number\": \"555-123-4567\",\n                \"Label\": \"Mobile\",\n                \"AdditionalDetails\": \"Primary contact number\",\n                \"IsPrimary\": true\n              }\n            ],\n            \"Emails\": [\n              {\n                \"EmailAddress\": \"jane.doe@example.com\",\n                \"IsPrimary\": true\n              }\n            ],\n            \"Addresses\": [\n              {\n                \"Address1\": \"123 Main St\",\n                \"Address2\": \"Apt 1\",\n                \"City\": \"Anytown\",\n                \"State\": \"CA\",\n                \"PostalCode\": \"12345\",\n                \"CountryCode\": \"US\",\n                \"IsPrimary\": true\n              }\n            ],\n            \"Pets\": [\n              {\n                \"Name\": \"Scruffy\",\n                \"Type\": \"Dog\",\n                \"Age\": 3,\n                \"Weight\": 11.5\n              }\n            ],\n            \"Vehicles\": [\n              {\n                \"Make\": \"Toyota\",\n                \"Model\": \"Camry\",\n                \"Color\": \"Red\",\n                \"LicensePlate\": \"ABC123\",\n                \"Year\": 2020,\n                \"PermitNumber\": \"1234567890\"\n              }\n            ],\n            \"Tags\": [\"Tag Name\"],\n          },\n          {\n            \"Id\": \"cd1234f1-12e8-11ef-ad0b-0278f96d6853\",\n            \"FirstName\": \"Bob\",\n            \"LastName\": \"Williams\",\n            \"MoveOutOn\": \"2024-12-31\",\n            \"NextRentIncrease\": \"2025-06-01\"\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Tenant objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Tenant.BulkUpdate"}}}},"example":{"data":[{"Id":"ab0326f1-12e8-11ef-ad0b-0278f96d6853","FirstName":"John","LastName":"Doe","MiddleName":"William","CompanyName":"Doe Enterprises","IsCompany":false,"MoveInOn":"2021-03-01","MoveOutOn":"2023-03-01","TenantType":"Financially Responsible","PrimaryTenant":true,"PhoneNumbers":[{"Number":"555-123-4567","Label":"Mobile","AdditionalDetails":"Primary contact number","IsPrimary":true}],"Emails":[{"EmailAddress":"john.doe@example.com","IsPrimary":true}],"Addresses":[{"Address1":"123 Main St","Address2":"Apt 1","City":"Anytown","State":"CA","PostalCode":"12345","CountryCode":"US","IsPrimary":true}],"Pets":[{"Name":"Fluffy","Type":"Dog","Age":2,"Weight":10}],"Vehicles":[{"Make":"Toyota","Model":"Prius","Color":"Blue","LicensePlate":"DEF456","Year":2021,"PermitNumber":"1234567890"}],"Tags":["Tag Name"]},{"Id":"ab0326f1-12e8-11ef-ad0b-0278f96d6853","FirstName":"Jane","LastName":"Doe","MiddleName":"Marie","CompanyName":"Doe Enterprises","IsCompany":true,"MoveInOn":"2021-03-01","MoveOutOn":"2023-03-01","TenantType":"Other Occupant","PrimaryTenant":false,"PhoneNumbers":[{"Number":"555-123-4567","Label":"Mobile","AdditionalDetails":"Primary contact number","IsPrimary":true}],"Emails":[{"EmailAddress":"jane.doe@example.com","IsPrimary":true}],"Addresses":[{"Address1":"123 Main St","Address2":"Apt 1","City":"Anytown","State":"CA","PostalCode":"12345","CountryCode":"US","IsPrimary":true}],"Pets":[{"Name":"Scruffy","Type":"Dog","Age":3,"Weight":11.5}],"Vehicles":[{"Make":"Honda","Model":"Civic","Color":"Black","LicensePlate":"GHI789","Year":2022,"PermitNumber":"3214567890"}],"Tags":["Tag Name"]},{"Id":"cd1234f1-12e8-11ef-ad0b-0278f96d6853","FirstName":"Bob","LastName":"Williams","MoveOutOn":"2024-12-31","NextRentIncrease":"2025-06-01"}]}}}},"responses":{"202":{"description":"Tenants accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk update of tenants"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"Id":{"description":"Unique identifier for the tenant","type":"string"},"successful":{"description":"Indication of successful update","type":"boolean"},"errors":{"description":"Errors associated with attempted tenant update","type":"array"}}}}}},"example":{"errors":[{"Id":"ab0326f1-12e8-11ef-ad0b-0278f96d6853","successful":false,"errors":[{"attribute":"PhoneNumbers[Number]","message":"Required parameter PhoneNumbers[Number] is missing."}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/tenant_ledgers":{"get":{"operationId":"getTenantLedgers","summary":"List All Tenant Ledgers","description":"Returns all tenant ledgers that meet the filter criteria","tags":["Tenant Ledgers"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/tenant_ledgers?filters[DateFrom]=2020-12-15\u0026filters[DateTo]=2020-12-16\u0026filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cee\u0026filters[ExcludeSubsidies]=false\u0026filters[OccupancyId]=8rbcde234-c543-456e-abc9-123456789cee' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for tenant ledgers. All requests must include a filter for `[PropertyId]`, `[DateFrom]`, and `[DateTo]`.","style":"deepObject","schema":{"type":"object","required":["DateTo","DateFrom","PropertyId"],"properties":{"ExcludeSubsidies":{"description":"Default: `false` \u003cbr\u003e Example: `filters[ExcludeSubsidies]=false` \u003cbr\u003e Indicates whether or not to exclude subsidized transactions from the results","type":"boolean"},"DateFrom":{"description":"Example: `filters[DateFrom]=2021-12-15` \u003cbr\u003e Date range from the date stipulated. `DateFrom` and `DateTo` can be at most 2 years apart.","type":"string","format":"date"},"DateTo":{"description":"Example: `filters[DateTo]=2021-12-15` \u003cbr\u003e Date range to the date stipulated. `DateFrom` and `DateTo` can be at most 2 years apart.","type":"string","format":"date"},"PropertyId":{"description":"Example: `filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the property. Filter the results based on a single value.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns transaction records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"},"OccupancyId":{"description":"Example: `filters[OccupancyId]=1abcae23-c343-466e-adc9-923455789cba,1abcde43-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier of the occupancy associated with the tenant ledger. Filter the results based on one or more OccupancyIds. Multiple values should be separated by commas.","type":"string","format":"uuid"}}},"required":true}],"responses":{"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TenantLedgers"}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/units":{"get":{"operationId":"getUnits","summary":"List All Units","description":"Returns all units that meet the filter criteria","tags":["Units"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/units?filters[Id]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cee,1abcde23-c543-456e-abc9-123456789cbb\u0026filters[UnitGroupId]=abcdef23-c543-456e-abc9-123456789cba\u0026filters[LeasingType]=BedUnit\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for units. All GET requests must include a filter for `[Id]` (if available), or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"type":"string","description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cba,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique identifier of the unit(s) sought for retrieval. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","format":"uuid"},"IncludeHidden":{"type":"boolean","description":"Example: `filters[IncludeHidden]=true` \u003cbr\u003e Indicates whether or not to include units that were marked as inactive from the list of units"},"LastUpdatedAtFrom":{"type":"string","format":"date-time","description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns unit records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"LeasingType":{"$ref":"#/components/schemas/Unit.LeasingType"},"PropertyId":{"type":"string","description":"Example: `filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cba,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique identifier of the property the unit belongs to. Filter the results based on one or more PropertyIds. Multiple values should be separated by commas.","format":"uuid"},"UnitGroupId":{"type":"string","description":"Example: `filters[UnitGroupId]=d4664d1d-c212-41b4-bab1-aeadf0f92c71,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique identifier of the unit group associated with the unit. Filter the results based on one or more UnitGroupIds. Multiple values should be separated by commas.","format":"uuid"}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Units"}}}}}}},"/units/bulk":{"post":{"operationId":"bulkCreateUnits","summary":"Bulk Create Units","description":"Create units in bulk","tags":["Units"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/units/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"Name\": \"Unit A\",\n            \"PropertyId\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\",\n            \"UnitTypeId\": \"7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e\",\n            \"ReferenceId\": \"1\",\n            \"Amenities\": [\"Pool\", \"Gym\"],\n            \"ApplicationFee\": 20.23,\n            \"Bathrooms\": 2.5,\n            \"Bedrooms\": 3,\n            \"CatsAllowed\": \"Yes\",\n            \"Deposit\": 300.34,\n            \"Description\": \"Sample Description\",\n            \"DogsAllowed\": \"Large \u0026 Small\",\n            \"LastInspectedDate\": \"2021-02-15\",\n            \"MarketRent\": 1569.05,\n            \"MaintenanceNotes\": \"Sample notes\",\n            \"MarketingTitle\": \"Beautiful Unit\",\n            \"MarketingDescription\": \"Sample marketing description\",\n            \"NonRevenue\": true,\n            \"NonRevenueType\": \"Model\",\n            \"NonRevenueStart\": \"2024-01-15\",\n            \"SquareFeet\": 2000,\n            \"RentReady\": true,\n            \"Tags\": [\"TagName\"],\n            \"Address1\": \"123 Highland Avenue\",\n            \"Address2\": \"unit c\",\n            \"City\": \"Santa Barbara\",\n            \"State\": \"CA\",\n            \"Zip\": \"93117\",\n            \"AdvertiseUsingListedMarketRent\": true,\n            \"YouTubeURL\": \"https://www.youtube.com/watch?v=abc\",\n            \"AvailableOn\": \"2021-02-15\",\n          },\n          {\n            \"Name\": \"Unit B\",\n            \"PropertyId\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\",\n            \"ReferenceId\": \"1\",\n            \"ApplicationFee\": 500.00,\n            \"Bathrooms\": 2.5,\n            \"Bedrooms\": 3,\n            \"CatsAllowed\": \"No\",\n            \"Deposit\": 300.34,\n            \"Description\": \"Sample Description\",\n            \"DogsAllowed\": \"Small Only\",\n            \"LastInspectedDate\": \"2021-02-15\",\n            \"MarketRent\": 1250.00,\n            \"MaintenanceNotes\": \"Sample notes\",\n            \"MarketingTitle\": \"Beautiful Unit\",\n            \"MarketingDescription\": \"Sample marketing description\",\n            \"SquareFeet\": 5000,\n            \"RentReady\": false,\n            \"Address1\": \"123 State St\",\n            \"Address2\": \"unit c\",\n            \"City\": \"Santa Barbara\",\n            \"State\": \"CA\",\n            \"Zip\": \"93117\",\n            \"AdvertiseUsingListedMarketRent\": false,\n            \"YouTubeURL\": \"https://www.youtube.com/watch?v=zxc\",\n            \"AvailableOn\": \"2021-02-15\",\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Unit objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Unit.BulkCreate"}}}},"example":{"data":[{"Name":"Unit A","PropertyId":"1bc8de4e-db50-4463-85fc-3a381f3d3e51","UnitTypeId":"7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e","ReferenceId":"1","Amenities":["Pool","Gym"],"ApplicationFee":20.23,"Bathrooms":2.5,"Bedrooms":3,"CatsAllowed":"Yes","Deposit":300.34,"Description":"Sample Description","DogsAllowed":"Large \u0026 Small","LastInspectedDate":"2021-02-15","MarketRent":1569.05,"MaintenanceNotes":"Sample notes","MarketingTitle":"Beautiful Unit","MarketingDescription":"Sample marketing description","NonRevenue":true,"NonRevenueType":"Model","NonRevenueStart":"2024-01-15","SquareFeet":2000,"RentReady":true,"Tags":["TagName"],"Address1":"123 Highland Avenue","Address2":"unit c","City":"Santa Barbara","State":"CA","Zip":"93117","AdvertiseUsingListedMarketRent":true,"YouTubeURL":"https://www.youtube.com/watch?v=abc","AvailableOn":"2021-02-15"}]}}}},"responses":{"201":{"description":"Statuses created","content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"properties":{"UnitId":{"type":"string","description":"Unique identifier of the created unit","example":"71c5cb28-547f-11ec-bfa5-02975b268737"},"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual units in the bulk-creation of units.","example":"1"}}}}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual units in the bulk-creation of units.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted unit creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"Address1","message":"Required parameter Address1 is missing."},{"attribute":"State","message":"is invalid"},{"attribute":"PropertyId","message":"not found"}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}},"patch":{"operationId":"bulkUpdateUnits","summary":"Bulk Update Units","description":"Update units in bulk\n","tags":["Units"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/units/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"Id\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\",\n            \"Name\": \"Unit A\",\n            \"Bathrooms\": \"2.5\",\n            \"Bedrooms\": 2,\n            \"SquareFeet\": \"950\",\n            \"Description\": \"A spacious unit with modern finishes\",\n            \"MarketRent\": 1650.00,\n            \"AdvertiseUsingListedMarketRent\": false,\n            \"CatsAllowed\": \"Yes\",\n            \"DogsAllowed\": \"Small Only\",\n            \"CustomFields\": {\n              \"a965e7d8-a17d-11ec-b909-0242ac120002\": \"a new value\"\n            },\n            \"Address1\": \"123 Main St\",\n            \"Address2\": \"Apt 4\",\n            \"City\": \"Santa Barbara\",\n            \"State\": \"CA\",\n            \"Zip\": \"93101\",\n            \"MaintenanceNotes\": \"Furnace filter replaced quarterly\",\n            \"MarketingTitle\": \"Stunning 2BR with City Views\",\n            \"MarketingDescription\": \"Newly renovated unit with stainless appliances and hardwood floors.\",\n            \"NonRevenue\": false,\n            \"Deposit\": 1650.00,\n            \"ApplicationFee\": 50.00,\n            \"RentReady\": true,\n            \"Tags\": [\"Renovated\", \"Corner Unit\"],\n            \"LastInspectedDate\": \"2025-03-01\",\n            \"YouTubeURL\": \"https://www.youtube.com/watch?v=dQw4w9WgXcQ\",\n            \"PostedToInternet\": true,\n            \"PostedToWebsite\": true,\n            \"AvailableOn\": \"2025-06-01\",\n            \"ReadyForShowingOn\": \"2025-05-15\",\n            \"UnitTypeId\": \"a965e7d8-a17d-11ec-b909-0242ac120002\",\n            \"Amenities\": [\"Pool\", \"Gym\", \"Parking\"],\n            \"UtilitiesIncluded\": [\"Water\", \"Gas\"],\n            \"AppliancesIncluded\": [\"Refrigerator\", \"Dishwasher\"]\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Unit objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Unit.BulkUpdate"}}}},"example":{"data":[{"Id":"1bc8de4e-db50-4463-85fc-3a381f3d3e51","Name":"Unit A","Bathrooms":"2.5","Bedrooms":2,"SquareFeet":"950","Description":"A spacious unit with modern finishes","MarketRent":1650.0,"AdvertiseUsingListedMarketRent":false,"CatsAllowed":"Yes","DogsAllowed":"Small Only","CustomFields":{"a965e7d8-a17d-11ec-b909-0242ac120002":"a new value"},"Address1":"123 Main St","Address2":"Apt 4","City":"Santa Barbara","State":"CA","Zip":"93101","MaintenanceNotes":"Furnace filter replaced quarterly","MarketingTitle":"Stunning 2BR with City Views","MarketingDescription":"Newly renovated unit with stainless appliances and hardwood floors.","NonRevenue":false,"Deposit":1650.0,"ApplicationFee":50.0,"RentReady":true,"Tags":["Renovated","Corner Unit"],"LastInspectedDate":"2025-03-01","YouTubeURL":"https://www.youtube.com/watch?v=dQw4w9WgXcQ","PostedToInternet":true,"PostedToWebsite":true,"AvailableOn":"2025-06-01","ReadyForShowingOn":"2025-05-15","UnitTypeId":"a965e7d8-a17d-11ec-b909-0242ac120002","Amenities":["Pool","Gym","Parking"],"UtilitiesIncluded":["Water","Gas"],"AppliancesIncluded":["Refrigerator","Dishwasher"]}]}}}},"responses":{"202":{"description":"Units accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk update of units"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"UnitId":{"description":"Unique identifier of the unit that failed validation","type":"string"},"successful":{"description":"Indication of successful update","type":"boolean"},"errors":{"description":"Errors associated with the attempted unit update","type":"array"}}}}}},"example":{"errors":[{"UnitId":"71c5cb28-547f-11ec-bfa5-02975b268737","successful":false,"errors":[{"attribute":"CatsAllowed","message":"Invalid value passed. Acceptable values for CatsAllowed are: Yes or No."}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/units/pricing_matrices/bulk":{"put":{"operationId":"putBulkUnitPricingMatrix","deprecated":true,"summary":"Bulk Put Unit Pricing Matrix","description":"Manage the rent pricing structure for units. Deprecated: use **putBulkUnitPricingMatrixAsync** (`PUT /units/pricing_matrices/bulk/async`) instead.","tags":["Units"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PUT 'https://api.appfolio.com/api/v0/units/pricing_matrices/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       data: [\n         {\n           \"UnitId\": \"a965e7d8-a17d-11ec-b909-0242ac120002\",\n           \"PricingMatrix\": [\n             {\n               \"StartDate\": \"2024-09-11\",\n               \"Price\": 1200,\n               \"LeaseTerm\": 12,\n               \"ExpirationDate\": \"2025-09-01\"\n             }\n           ]\n         },\n         {\n           \"UnitId\": \"446d4854-60cc-4e60-a0a6-9c617723eda4\",\n           \"PricingMatrix\": [\n             {\n               \"StartDate\": \"2024-09-11\",\n               \"Price\": 1200,\n               \"LeaseTerm\": 12,\n               \"ExpirationDate\": \"2025-09-01\"\n             }\n           ]\n         },\n\n       ]\n     }'\n"}],"requestBody":{"description":"Unit Pricing objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"title":"Unit Pricing","required":["PricingMatrix","UnitId"],"properties":{"UnitId":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8","description":"Unique identifier of the unit associated with the rent pricing matrix entry. A unit should only be included once per call"},"PricingMatrix":{"type":"array","description":"Array of objects that defines the rent pricing structure and lease terms for a unit","items":{"required":["StartDate","Price"],"properties":{"StartDate":{"type":"string","format":"date","description":"The date when the specific rent price becomes effective for the unit"},"ExpirationDate":{"type":"string","format":"date","description":"The date when the specific rent price expires for the unit"},"Price":{"type":"integer","description":"The monthly rent amount for the unit"},"LeaseTerm":{"type":"integer","description":"The number of months for which the specified rent price applies"}}}}}}}}},"example":{"data":[{"UnitId":"1bc8de4e-db50-4463-85fc-3a381f3d3e51","PricingMatrix":[{"Price":1200,"StartDate":"2024-09-01","ExpirationDate":"2025-09-01","LeaseTerm":12}]},{"UnitId":"71c5cb28-547f-11ec-bfa5-02975b268737","PricingMatrix":[{"Price":1200,"StartDate":"2024-09-01","ExpirationDate":"2025-09-01","LeaseTerm":12}]}]}}}},"responses":{"200":{"description":"Created or updated Bulk Unit Pricing Matrix","content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"properties":{"UnitId":{"description":"Unique identifier of the unit associated with the rent pricing matrix entry","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"},"successful":{"description":"Indication of successful creation","type":"boolean"}}}}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"UnitId":{"description":"Unique identifier of the unit associated with the rent pricing matrix entry","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted unit rent matrix creation","type":"array"}}}}}},"example":{"errors":[{"UnitId":"71c5cb28-547f-11ec-bfa5-02975b268737","successful":false,"errors":[{"attribute":"PricingMatrix[Price]","message":"Invalid value passed. Value must be a positive integer for PricingMatrix[Price]."},{"attribute":"PricingMatrix[StartDate]","message":"Invalid value passed. Value must be an ISO 8601 formatted date for PricingMatrix[StartDate]."},{"attribute":"UnitId","message":"not found"}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/units/pricing_matrices/bulk/async":{"put":{"operationId":"putBulkUnitPricingMatrixAsync","summary":"Bulk Put Unit Pricing Matrix (Async)","description":"Asynchronously manage the rent pricing structure for units","tags":["Units"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PUT 'https://api.appfolio.com/api/v0/units/pricing_matrices/bulk/async' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       data: [\n         {\n           \"UnitId\": \"a965e7d8-a17d-11ec-b909-0242ac120002\",\n           \"PricingMatrix\": [\n             {\n               \"StartDate\": \"2024-09-11\",\n               \"Price\": 1200,\n               \"LeaseTerm\": 12,\n               \"ExpirationDate\": \"2025-09-01\"\n             }\n           ]\n         },\n         {\n           \"UnitId\": \"446d4854-60cc-4e60-a0a6-9c617723eda4\",\n           \"PricingMatrix\": [\n             {\n               \"StartDate\": \"2024-09-11\",\n               \"Price\": 1200,\n               \"LeaseTerm\": 12,\n               \"ExpirationDate\": \"2025-09-01\"\n             }\n           ]\n         },\n\n       ]\n     }'\n"}],"requestBody":{"description":"Unit Pricing objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"title":"Unit Pricing","required":["PricingMatrix","UnitId"],"properties":{"UnitId":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8","description":"Unique identifier of the unit associated with the rent pricing matrix entry. A unit should only be included once per call"},"PricingMatrix":{"type":"array","description":"Array of objects that defines the rent pricing structure and lease terms for a unit","items":{"required":["StartDate","Price"],"properties":{"StartDate":{"type":"string","format":"date","description":"The date when the specific rent price becomes effective for the unit"},"ExpirationDate":{"type":"string","format":"date","description":"The date when the specific rent price expires for the unit"},"Price":{"type":"integer","description":"The monthly rent amount for the unit"},"LeaseTerm":{"type":"integer","description":"The number of months for which the specified rent price applies"}}}}}}}}},"example":{"data":[{"UnitId":"1bc8de4e-db50-4463-85fc-3a381f3d3e51","PricingMatrix":[{"Price":1200,"StartDate":"2024-09-01","ExpirationDate":"2025-09-01","LeaseTerm":12}]},{"UnitId":"71c5cb28-547f-11ec-bfa5-02975b268737","PricingMatrix":[{"Price":1200,"StartDate":"2024-09-01","ExpirationDate":"2025-09-01","LeaseTerm":12}]}]}}}},"responses":{"202":{"description":"Unit Pricing Matrices accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk update of unit pricings"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"UnitId":{"description":"Unique identifier of the unit associated with the rent pricing matrix entry","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted unit rent matrix creation","type":"array"}}}}}},"example":{"errors":[{"UnitId":"71c5cb28-547f-11ec-bfa5-02975b268737","successful":false,"errors":[{"attribute":"PricingMatrix[Price]","message":"Invalid value passed. Value must be a positive integer for PricingMatrix[Price]."},{"attribute":"PricingMatrix[StartDate]","message":"Invalid value passed. Value must be an ISO 8601 formatted date for PricingMatrix[StartDate]."},{"attribute":"UnitId","message":"not found"}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/units/{unitId}":{"patch":{"operationId":"updateUnit","summary":"Update Unit","description":"Update a unit","tags":["Units"],"parameters":[{"name":"unitId","in":"path","description":"Unique identifier of the unit to update","required":true,"schema":{"type":"string","example":"198d9391-7dca-4ce4-8255-391cf7e6297a","format":"uuid"}}],"requestBody":{"description":"Update unit object","required":true,"content":{"application/json":{"schema":{"type":"object","$ref":"#/components/schemas/Unit.Update"},"example":{"Name":"Unit A","ApplicationFee":20.23,"Bathrooms":2.5,"Bedrooms":3,"CatsAllowed":"Yes","Deposit":300.34,"Description":"Sample Description","DogsAllowed":"Large \u0026 Small","LastInspectedDate":"2021-02-15","MarketRent":1569.05,"MaintenanceNotes":"Sample notes","MarketingTitle":"Beautiful Unit","MarketingDescription":"Sample marketing description","NonRevenue":false,"SquareFeet":2000,"ReadyForShowingOn":"2021-02-15","RentReady":true,"Amenities":["Pool","Gym"],"Tags":["TagName"],"UtilitiesIncluded":["Water","Gas"],"AppliancesIncluded":["Refrigerator","Dishwasher"],"Address1":"123 Highland Avenue","Address2":"unit c","City":"Santa Barbara","State":"CA","Zip":"93117","AdvertiseUsingListedMarketRent":true,"YouTubeURL":"https://www.youtube.com/watch?v=abc","AvailableOn":"2021-02-15","UnitTypeId":"7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e","HvacDetail":{"ConfirmedNoFiltersNeeded":"true"},"HvacFilters":[{"Length":"10","Width":"10","Thickness":"10","Quantity":"10","Brand":"3M","Model":"Model"}],"PostedToInternet":true,"PostedToWebsite":true,"CustomFields":{"a965e7d8-a17d-11ec-b909-0242ac120002":"a new value","454d8635-521e-4864-99fb-0bd6200d3a0f":true,"c80d3dd1-9eba-45aa-803c-666280b8ff24":87.4,"3277c366-1783-42a9-b925-0bca2afbe391":"0e9a7b18-1778-4a03-bc1c-f913aeaef6bc"}}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/units/ac00dc0a-9f44-42f7-b01f-cfb2ec929e19' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n      \"Name\": \"Unit B\",\n      \"ApplicationFee\": 500.00,\n      \"Bathrooms\": 2.5,\n      \"Bedrooms\": 3,\n      \"CatsAllowed\": \"Yes\",\n      \"Deposit\": 300.34,\n      \"Description\": \"Sample Description\",\n      \"DogsAllowed\": \"Large \u0026 Small\",\n      \"LastInspectedDate\": \"2021-02-15\",\n      \"MarketRent\": 1250.00,\n      \"MaintenanceNotes\": \"Sample notes\",\n      \"MarketingTitle\": \"Beautiful Unit\",\n      \"MarketingDescription\": \"Sample marketing description\",\n      \"NonRevenue\": false,\n      \"SquareFeet\": 5000,\n      \"RentReady\": false,\n      \"ReadyForShowingOn\": \"2021-02-15\",\n      \"Amenities\": [\"Pool\", \"Gym\"],\n      \"Tags\": [\"TagName\"],\n      \"UtilitiesIncluded\": [\"Water\", \"Gas\"],\n      \"AppliancesIncluded\": [\"Refrigerator\", \"Dishwasher\"],\n      \"Address1\": \"123 State St\",\n      \"Address2\": \"unit c\",\n      \"City\": \"Santa Barbara\",\n      \"State\": \"CA\",\n      \"Zip\": \"93117\",\n      \"AdvertiseUsingListedMarketRent\": false,\n      \"YouTubeURL\": \"https://www.youtube.com/watch?v=zxc\",\n      \"AvailableOn\": \"2021-02-15\",\n      \"UnitTypeId\": \"7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e\",\n      \"HvacDetail\": {\n        \"ConfirmedNoFiltersNeeded\": true\n      },\n      \"HvacFilters\": [\n        {\n          \"Length\": 10,\n          \"Width\": 10,\n          \"Thickness\": 10,\n          \"Quantity\": 10,\n          \"Brand\": \"3M\",\n          \"Model\": \"Model\"\n        }\n      ],\n      \"PostedToInternet\": true,\n      \"PostedToWebsite\": true,\n      \"CustomFields\": {\n        \"a965e7d8-a17d-11ec-b909-0242ac120002\": \"a new value\",\n        \"454d8635-521e-4864-99fb-0bd6200d3a0f\": true,\n        \"c80d3dd1-9eba-45aa-803c-666280b8ff24\": 87.40,\n        \"3277c366-1783-42a9-b925-0bca2afbe391\": \"0e9a7b18-1778-4a03-bc1c-f913aeaef6bc\"\n      }\n    }'\n"}],"responses":{"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Unit specified, but no parameter to update was passed."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"201":{"description":"Updated the unit","content":{"application/json":{"schema":{"properties":{"Id":{"type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec929e19","description":"Unique identifier of the updated unit","format":"uuid"}}}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (UnitId) not found."}}}}}}},"/units/{UnitId}/pricing_matrices":{"put":{"operationId":"putUnitPricingMatrix","summary":"Put Unit Pricing Matrix","description":"Manage the rent pricing structure for a specific unit","tags":["Units"],"parameters":[{"name":"UnitId","in":"path","description":"Unique identifier of the unit associated with the rent pricing matrix entry","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PUT 'https://api.appfolio.com/api/v0/units/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/pricing_matrices' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"PricingMatrix\": [\n         {\n           \"StartDate\": \"2024-09-11\",\n           \"Price\": 1200,\n           \"LeaseTerm\": 12,\n           \"ExpirationDate\": \"2025-09-01\"\n         }\n       ]\n     }'\n"}],"requestBody":{"content":{"application/json":{"schema":{"required":["PricingMatrix"],"properties":{"PricingMatrix":{"type":"array","description":"Array of objects that defines the rent pricing structure and lease terms for a unit","items":{"required":["StartDate","Price"],"properties":{"StartDate":{"type":"string","format":"date","description":"The date when the specific rent price becomes effective for the unit"},"ExpirationDate":{"type":"string","format":"date","description":"The date when the specific rent price expires for the unit"},"Price":{"type":"integer","description":"The monthly rent amount for the unit"},"LeaseTerm":{"type":"integer","description":"The number of months for which the specified rent price applies"}}}}}},"example":{"PricingMatrix":[{"Price":1200,"StartDate":"2024-09-01","ExpirationDate":"2025-09-01","LeaseTerm":12}]}}}},"responses":{"200":{"description":"Created or replaced a Unit's Pricing Matrix","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the unit associated with the rent pricing matrix entry","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/units/{UnitId}/attachments":{"post":{"operationId":"createUnitAttachment","summary":"Create Unit Attachment","description":"Upload an attachment to a unit","tags":["Units"],"parameters":[{"name":"UnitId","in":"path","description":"The unit to which the file will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/units/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/attachments' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --form 'File=@\"/path/to/file.pdf\"'\n"}],"requestBody":{"description":"Attachment object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"},"FolderId":{"type":"string","format":"uuid","description":"Unique identifier of the folder to file the attachment under"}}},"example":{"File":"/path/to/file.pdf"}}}},"responses":{"201":{"description":"Uploaded an attachment","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the unit attachment","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/units/attachments":{"get":{"operationId":"listUnitAttachments","summary":"List All Unit Attachments","description":"Returns all attachments associated with a unit","tags":["Units"],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for units. All GET requests must include a filter for `[UnitId]`, or `[CreatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"CreatedAtFrom":{"type":"string","format":"date-time","description":"Example: filters[CreatedAtFrom]=2021-12-15T16:30:46Z \u003cbr\u003e Returns attachments created on or after the specified date. The value must adhere to the ISO 8601 format YYYY-MM-DDThh:mm:ssZ and the default time zone is Coordinated Universal Time (UTC)."},"UnitId":{"type":"string","description":"filters[UnitId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the unit associated with the attachment. Can only filter by one unit at a time.","format":"uuid"}}},"required":false}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/units/attachments?page[size]=10\u0026page[number]=2\u0026filters[UnitId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[CreatedAtFrom]=2020-12-14T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unit.Attachments"}}}}}}},"/units/notes":{"get":{"operationId":"getUnitsNotes","summary":"List All Units Notes","description":"Returns all notes for a unit that meet the filter criteria","tags":["Units"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/units/notes?filters[UnitId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for unit notes. All GET requests must include a filter for `[UnitId]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"UnitId":{"description":"Example: `filters[UnitId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the unit. Filter the results based on a single value.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns unit note records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Units.Notes"}}}}}}},"/units/{UnitId}/notes":{"post":{"operationId":"createUnitNote","summary":"Create Unit Note","description":"Add a note to a unit","tags":["Units"],"parameters":[{"name":"UnitId","in":"path","description":"The unit to which the note will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/units/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for unit\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the unit note. A unit note cannot exceed `65,535` characters."}}},"example":{"Body":"This unit has a scheduled cleaning service on 11/11/2023"}}}},"responses":{"201":{"description":"Created a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the unit note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/units/{UnitId}/notes/{Id}":{"patch":{"operationId":"updateUnitNote","summary":"Update Unit Note","description":"Update a note to a unit","tags":["Units"],"parameters":[{"name":"UnitId","in":"path","description":"The unit to which the note will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d9"}},{"name":"Id","in":"path","description":"Unique identifier of the note to update","required":true,"schema":{"type":"string","format":"uuid","example":"45e04805-01c4-4e39-adc9-c75ff9ddc8d7"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/units/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes/632b920c-e048-4a7b-b1f6-eddb6ad6d23c' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for unit - updating\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the unit note. A unit note cannot exceed `65,535` characters."}}},"example":{"Body":"This unit has a scheduled cleaning service on 11/30/2022 - Updated"}}}},"responses":{"200":{"description":"Updated a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated unit note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular note."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (Unit Id or Note Id) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Required parameter Body is missing."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/units/{UnitId}/photos":{"post":{"operationId":"createUnitPhoto","summary":"Create Unit Photo","description":"Upload a photo to a unit.","tags":["Units"],"parameters":[{"name":"UnitId","in":"path","description":"The unit to which the photo will be attached. Note: Unit photos cannot be created through this endpoint if the unit belongs to a Unit Type that uses Unit Type Photos.","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/units/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/photos' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --form 'File=@\"/path/to/file.pdf\"'\n"}],"requestBody":{"description":"Photo object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"}}},"example":{"File":"/path/to/file.pdf"}}}},"responses":{"201":{"description":"Uploaded a photo","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the unit photo","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/units/{UnitId}/photos/{PhotoId}":{"patch":{"operationId":"updateUnitPhoto","summary":"Update Unit Photo","description":"Update a unit photo","tags":["Units"],"parameters":[{"name":"UnitId","in":"path","description":"The unit to which the photo is attached. Note: Photos cannot be updated through this endpoint if the unit is using Unit Type photos.","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d9"}},{"name":"PhotoId","in":"path","description":"Unique identifier of the photo to update","required":true,"schema":{"type":"string","format":"uuid","example":"45e04805-01c4-4e39-adc9-c75ff9ddc8d7"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/units/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/photos/632b920c-e048-4a7b-b1f6-eddb6ad6d23c' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Position\": 1\n     }'\n"}],"requestBody":{"description":"Photo object","required":true,"content":{"application/json":{"schema":{"properties":{"Position":{"type":"string","description":"The position of the photo in the unit photo gallery. The position must be a non-negative integer. If multiple photos are associated with a unit, the order of the remaining photos (positions 1 and above) will not change automatically if some photos are deleted. For example, if there are photos in positions 1, 2, 3, and 4, and photos 1 and 3 are deleted, the remaining photos will retain their original positions of 2 and 4"}}},"example":{"Position":1}}}},"responses":{"200":{"description":"Updated a photo","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated unit photo","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular photo."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (Property Id or Photo Id) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Required parameter Position is missing."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}},"delete":{"operationId":"deleteUnitPhoto","summary":"Delete Unit Photo","description":"Delete a photo from a unit","tags":["Units"],"parameters":[{"name":"UnitId","in":"path","description":"Unique identifier of the unit that contains the photo to be deleted. Note: Photos cannot be deleted through this endpoint if the unit is using Unit Type photos.","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}},{"name":"PhotoId","in":"path","description":"Unique identifier of the photo to be deleted","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-11c5-4e27-adc9-c75ff9ddc9d9"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request DELETE 'https://api.appfolio.com/api/v0/units/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/photos/57e04805-11c5-4e27-adc9-c75ff9ddc9d9' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"responses":{"204":{"description":"The request was successful. No content will be included in the response payload.","content":{"application/json":{"example":{}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to delete the photo."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"The PhotoId provided were not found. Please verify the PhotoId and try again."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/units/photos":{"get":{"operationId":"getUnitsPhotos","summary":"List All Units Photos","description":"Returns all Multi-Family Unit photos that meet the filter criteria. For Single-Family property photos see /Properties/Photos. Photos may be attached directly to a unit or inherited from the unit's unit type — when inherited, `UnitTypeId` will be populated and the photo cannot be created, updated, or deleted via these endpoints.","tags":["Units"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/units/photos?filters[UnitId]=1abcde23-c543-456e-abc9-123456789cba' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for unit photos. All GET requests must include a filter for `[UnitId]`.","style":"deepObject","schema":{"type":"object","required":["UnitId"],"properties":{"UnitId":{"description":"Example: `filters[unitId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the unit. Filter the results based on one or more UnitIds. Multiple values should be separated by commas.","type":"string","format":"uuid"}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"For single-family properties, use the property instead of the unit"}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Units.Photos"}}}}}}},"/unit_types":{"get":{"operationId":"getUnitTypes","summary":"List All Unit Types","description":"Returns all unit types that meet the filter criteria","tags":["Unit Types"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/unit_types?filters[Id]=fabcde23-c543-456e-abc9-123456789cba\u0026filters[PropertyId]=12bcde23-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for unit types. All GET requests must include a filter for `[Id]` (if available), or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"description":"Example: `filters[Id]=bca5de23-c543-456e-abc9-123456789cba,1abcde45-c543-456e-abc9-123456789abc` \u003cbr\u003e Unique identifier for the unit type. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z` \u003cbr\u003e Returns unit type records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":true}],"responses":{"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitTypes"}}}}}}},"/unit_types/bulk":{"post":{"operationId":"bulkCreateUnitTypes","summary":"Bulk Create Unit Types","description":"Create unit types in bulk","tags":["Unit Types"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/unit_types/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"Name\": \"Unit Type A\",\n            \"PropertyId\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\",\n            \"ReferenceId\": \"1\",\n            \"Amenities\": [\"gym\", \"covered parking\"],\n            \"ApplicationFee\": 20.23,\n            \"Bathrooms\": 2.5,\n            \"Bedrooms\": 3,\n            \"CatsAllowed\": \"Yes\",\n            \"Deposit\": 300.34,\n            \"DogsAllowed\": \"Large \u0026 Small\",\n            \"MarketRent\": 1569.05,\n            \"FutureMarketRent\": 699.99,\n            \"FutureMarketRentEffectiveOn\": \"2022-02-08\",\n            \"MarketingDescription\": \"Sample marketing description\",\n            \"MarketingTitle\": \"Sample marketing title\",\n            \"SquareFeet\": 2000,\n            \"UseUnitTypePhotos\": true,\n            \"YouTubeURL\": \"https://www.youtube.com/watch?v=abc\",\n          },\n          {\n            \"Name\": \"Unit Type B\",\n            \"PropertyId\": \"1bc8de4e-db50-4463-85fc-3a381f3d3e51\",\n            \"ReferenceId\": \"2\",\n            \"Amenities\": [\"balcony\"],\n            \"ApplicationFee\": 500.00,\n            \"Bathrooms\": 2.5,\n            \"Bedrooms\": 3,\n            \"CatsAllowed\": \"No\",\n            \"Deposit\": 300.34,\n            \"DogsAllowed\": \"Small Only\",\n            \"MarketRent\": 1250.00,\n            \"FutureMarketRent\": 699.99,\n            \"FutureMarketRentEffectiveOn\": \"2022-02-08\",\n            \"MarketingDescription\": \"Sample marketing description\",\n            \"MarketingTitle\": \"Sample marketing title\",\n            \"SquareFeet\": 5000,\n            \"UseUnitTypePhotos\": false,\n            \"YouTubeURL\": \"https://www.youtube.com/watch?v=zxc\",\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Unit Type objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/UnitType.BulkCreate"}}}},"example":{"data":[{"Name":"Unit Type A","PropertyId":"1bc8de4e-db50-4463-85fc-3a381f3d3e51","ReferenceId":"1","Amenities":["gym","covered parking"],"ApplicationFee":20.23,"Bathrooms":2.5,"Bedrooms":3,"CatsAllowed":"Yes","Deposit":300.34,"DogsAllowed":"Large \u0026 Small","MarketRent":1569.05,"FutureMarketRent":699.99,"FutureMarketRentEffectiveOn":"2022-02-08","MarketingDescription":"Sample marketing description","MarketingTitle":"Sample marketing title","SquareFeet":2000,"UseUnitTypePhotos":true,"YouTubeURL":"https://www.youtube.com/watch?v=abc"},{"Name":"Unit Type B","PropertyId":"1bc8de4e-db50-4463-85fc-3a381f3d3e51","ReferenceId":"2","Amenities":["balcony"],"ApplicationFee":500.0,"Bathrooms":2.5,"Bedrooms":3,"CatsAllowed":"No","Deposit":300.34,"DogsAllowed":"Small Only","MarketRent":1250.0,"FutureMarketRent":699.99,"FutureMarketRentEffectiveOn":"2022-02-08","MarketingDescription":"Sample marketing description","MarketingTitle":"Sample marketing title","SquareFeet":5000,"UseUnitTypePhotos":false,"YouTubeURL":"https://www.youtube.com/watch?v=zxc"}]}}}},"responses":{"202":{"description":"Unit types accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk creation of unit types"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual unit types in the bulk-creation of unit types.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted unit type creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"PropertyId","message":"not found"}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/unit_types/{unitTypeId}":{"patch":{"operationId":"updateUnitType","summary":"Update Unit Type","description":"Update a unit Type","tags":["Unit Types"],"parameters":[{"name":"unitTypeId","in":"path","description":"Unique identifier of the unit type to update","required":true,"schema":{"type":"string","example":"7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitType.Update"},"example":{"Name":"Unit Type A","Amenities":["gym","covered parking"],"ApplicationFee":20.23,"Bathrooms":2.5,"Bedrooms":3,"CatsAllowed":"Yes","Deposit":300.34,"DogsAllowed":"Large \u0026 Small","MarketRent":1569.05,"FutureMarketRent":699.99,"FutureMarketRentEffectiveOn":"2022-02-08","MarketingDescription":"Sample marketing description","MarketingTitle":"Sample marketing title","SquareFeet":2000,"UseUnitTypePhotos":true,"YouTubeURL":"https://www.youtube.com/watch?v=abc"}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/unit_types/7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n            \"Name\": \"Unit Type A\",\n            \"Amenities\": [\"gym\", \"covered parking\"],\n            \"ApplicationFee\": 20.23,\n            \"Bathrooms\": 2.5,\n            \"Bedrooms\": 3,\n            \"CatsAllowed\": \"Yes\",\n            \"Deposit\": 300.34,\n            \"DogsAllowed\": \"Large \u0026 Small\",\n            \"MarketRent\": 1569.05,\n            \"FutureMarketRent\": 699.99,\n            \"FutureMarketRentEffectiveOn\": \"2022-02-08\",\n            \"MarketingDescription\": \"Sample marketing description\",\n            \"MarketingTitle\": \"Sample marketing title\",\n            \"SquareFeet\": 2000,\n            \"UseUnitTypePhotos\": true,\n            \"YouTubeURL\": \"https://www.youtube.com/watch?v=abc\",\n     }'\n"}],"responses":{"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"Updated a Unit Type","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated unit type","type":"string","example":"7f3230dc-8b9a-11ec-9b4b-14482e0fbe8e","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular unit type."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (UnitTypeId) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Status Reason can't be blank."}}}}}}},"/users":{"get":{"operationId":"getUsers","summary":"List All Users","description":"Returns all users that meet the filter criteria","tags":["Users"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/users?filters[PropertyId]=bfcb95e8-d5fb-448c-b811-88d9f832e79c\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for AppFolio Property Manager users. All GET requests must include a filter for `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","required":["LastUpdatedAtFrom"],"properties":{"LastUpdatedAtFrom":{"type":"string","format":"date-time","description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns AppFolio Property Manager user records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"PropertyId":{"type":"string","description":"Example: `filters[PropertyId]=bfcb95e8-d5fb-448c-b811-88d9f832e79c,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique identifier of the property associated with the user. Filter the results based on one or more PropertyIds. Multiple values should be separated by commas.","format":"uuid"},"Email":{"type":"string","description":"Example: `filters[Email]=example1@test.com` \u003cbr\u003e Email address of the user. Filter the results based on one or more email addresses. Multiple values should be separated by commas. Any `+` characters in the email must be URL-encoded to `%2B`."}}},"required":true}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Users"}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Invalid value passed. filters[PropertyId] must be in UUID format."}}}}}}},"/vendors":{"get":{"operationId":"getVendors","summary":"List All Vendors","description":"Returns all vendors that meet the filter criteria","tags":["Vendors"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/vendors?filters[Id]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for vendors. All GET requests must include a filter for `[Id]` (if available), or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"Id":{"type":"string","description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cba,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique identifier of the vendor(s) that are sought for retrieval. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","format":"uuid"},"IncludeHidden":{"type":"boolean","description":"Example: `filters[IncludeHidden]=true` \u003cbr\u003e Indicates whether or not to include vendors marked inactive by an AppFolio Property Manager user"},"LastUpdatedAtFrom":{"type":"string","format":"date-time","description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns vendor records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Vendors"}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (Vendor Id) not found."}}}}}},"post":{"operationId":"createVendor","summary":"Create Vendor","description":"Create a vendor","tags":["Vendors"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["IsCompany","UseCompanyNameAsTaxpayerName"],"properties":{"TaxpayerName":{"type":"string","description":"The taxpayer name of the vendor \u003cbr /\u003e\nIf `UseCompanyNameAsTaxpayerName` is true, then `TaxpayerName` will be` CompanyName`.\u003cbr /\u003e\nIf `IsCompany` is true, and `TaxpayerName` is not provided, then `TaxpayerName` will be set to `CompanyName`.\u003cbr /\u003e\nIf `IsCompany `is false, and `TaxpayerName` is not provided, then `TaxpayerName` will be set to the concatenation of `FirstName` and `LastName`.\u003cbr /\u003e\nIf `TaxpayerName` is provided, and `UseCompanyNameAsTaxpayerName` is false, then `TaxpayerName` will be set as provided value.\n"},"TaxpayerId":{"type":"string","description":"The tax identification number of the vendor. This field accepts either a Employer Identification Number (EIN), a Social Security Number (SSN), or an Individual Taxpayer Identification Number (ITIN)."},"CompanyName":{"type":"string","description":"Optional display name of vendor's company. If `IsCompany` is true, this field is required."},"Send1099":{"type":"boolean","description":"Indicates whether or not the vendor needs a 1099 tax form from the management company"},"FirstName":{"type":"string","description":"The vendor's first name. If `IsCompany` is false, this field is required."},"LastName":{"type":"string","description":"The vendor's last name. If `IsCompany` is false, this field is required."},"Address1":{"type":"string","description":"The primary street address of the vendor. If provided, `City`, `State`, and `Zip` must also be provided. A primary address is required when `UseOnlinePayables` is true."},"Address2":{"type":"string","description":"Additional street information pertaining to the vendor. If provided, `Address1`, `City`, `State`, and `Zip` must also be provided."},"City":{"type":"string","description":"The city where the vendor is located. If provided, `Address1`, `State`, and `Zip` must also be provided. This attribute is required when `UseOnlinePayables` is true."},"State":{"type":"string","description":"The state where the vendor is located (e.g. \"CA\" for California). If provided, `Address1`, `City`, and `Zip` must also be provided. This attribute is required when `UseOnlinePayables` is true. This value must not be an unincorporated US territory (AS, FM, MH, MP, or VI) for primary address when `UseOnlinePayables` and `VendorPaidByACH` are both true."},"Zip":{"type":"string","description":"The zip code where the vendor is located. Must be a string in 5-digit ZIP code format (e.g., 93013) or ZIP+4 format (e.g., 93013-0429). If provided, `Address1`, `City`, and `State` must also be provided. This attribute is required for primary address when `UseOnlinePayables` is true."},"CountryCode":{"type":"string","description":"The country code of the vendor (e.g. \"US\" for United States). This attribute is required when `UseOnlinePayables` is true. This value must be \"US\" for primary address when `UseOnlinePayables` and `VendorPaidByAch` are both true."},"PhoneNumber":{"deprecated":true,"type":"string","description":"The vendor's primary phone number"},"PhoneNumbers":{"type":"array","description":"The vendor's phone number(s). PhoneNumber and PhoneNumbers cannot be provided together.","items":{"$ref":"#/components/schemas/Vendor.Create.PhoneNumbers"}},"Email":{"deprecated":true,"type":"string","description":"The vendor's primary email address"},"Emails":{"type":"array","description":"The vendor's email address(es). Email and Emails cannot be provided together.","items":{"$ref":"#/components/schemas/Vendor.Create.Emails"}},"CompanyURL":{"type":"string","description":"The internet address of the vendor's website"},"LiabilityInsuranceExpiration":{"type":"string","format":"date","description":"The expiration date of the vendor's liability insurance. ISO 8601 format (YYYY-MM-DD) is required. Legacy MM/DD/YYYY format is supported for backward compatibility but will be deprecated in a future release."},"AutoInsuranceExpiration":{"type":"string","format":"date","description":"The expiration date of the vendor's automobile insurance. ISO 8601 format (YYYY-MM-DD) is required. Legacy MM/DD/YYYY format is supported for backward compatibility but will be deprecated in a future release."},"WorkersCompExpiration":{"type":"string","format":"date","description":"The expiration date of the vendor's worker's compensation insurance. ISO 8601 format (YYYY-MM-DD) is required. Legacy MM/DD/YYYY format is supported for backward compatibility but will be deprecated in a future release."},"ContractExpiration":{"type":"string","format":"date","description":"The expiration date of the contract. ISO 8601 format (YYYY-MM-DD) is required. Legacy MM/DD/YYYY format is supported for backward compatibility but will be deprecated in a future release."},"UmbrellaInsuranceExpiration":{"type":"string","format":"date","description":"The expiration date of the vendor's umbrella insurance. ISO 8601 format (YYYY-MM-DD) is required. Legacy MM/DD/YYYY format is supported for backward compatibility but will be deprecated in a future release."},"CompliantStatus":{"type":"boolean","description":"Indicates whether or not the vendor meets compliance"},"NetVendorId":{"type":"string","description":"The vendor's NetVendor ID"},"IsCompany":{"type":"boolean","description":"Indicates whether or not the vendor identifies as a company"},"UseCompanyNameAsTaxpayerName":{"type":"boolean","description":"Indicates whether or not to use the company name for tax paying purposes"},"PaymentTerms":{"type":"integer","description":"Represents the number of days the payment is due after the invoice date. A null value indicates that no payment terms were defined. A value of 0 indicates the payment is due on receipt.  A value greater than 0, for example, 15, indicates the payment is due 15 days after the invoice date. Required value of 1-31 if UsingEomTerms is true."},"UsingEomTerms":{"type":"boolean","description":"Indicates whether or not the payment terms include an end-of-month (EOM) stipulation. For example, if PaymentTerms is 15, and EOM is true, the payment is due within 15 days of the end of the month."},"DefaultAutoAcceptWorkOrders":{"type":"boolean","description":"Indicates whether the vendor is ineligible for auto-accept work order assignments. When set to true, this vendor will auto-accept all work orders assigned to them."},"Tags":{"type":"array","description":"User-defined tag(s) that categorize the vendor","items":{"type":"string"}},"VendorPaidByACH":{"type":"boolean","description":"Indicates whether or not the vendor is paid via ACH (Automated Clearing House) transfer."},"UseOnlinePayables":{"type":"boolean","description":"Indicates whether or not the vendor uses Online Payables for receiving payments."},"BankAccountRoutingNumber":{"type":"string","description":"The vendor's bank account routing number. Must be a valid 9-digit ABA routing number.\nThis attribute is required when both UseOnlinePayables and VendorPaidByACH are true.\n"},"BankAccountNumber":{"type":"string","description":"The vendor's bank account number. Must be 4-17 characters and can only contain numbers and hyphens.\nThis attribute is required when both UseOnlinePayables and VendorPaidByACH are true.\n"},"SavingsAccount":{"type":"boolean","description":"Indicates whether or not the bank account is a savings account. If false or not provided, the account is assumed to be a checking account."}}},"example":{"TaxpayerName":"John Doe","TaxpayerId":"55-2345678","CompanyName":"Fake Company","IsCompany":true,"UseCompanyNameAsTaxpayerName":false,"Send1099":true,"FirstName":"John","LastName":"Doe","Address1":"25 Example Way","Address2":"34 Example Way","City":"Los Angeles","State":"CA","Zip":"92114","CountryCode":"US","Emails":[{"EmailAddress":"john.doe@example.com","IsPrimary":true}],"PhoneNumbers":[{"Number":"555-123-4567","Label":"Mobile","AdditionalDetails":"Primary contact number","IsPrimary":true}],"CompanyURL":"https://example.com","LiabilityInsuranceExpiration":"2022-01-23","AutoInsuranceExpiration":"2022-02-23","WorkersCompExpiration":"2022-03-23","ContractExpiration":"2022-04-23","UmbrellaInsuranceExpiration":"2022-05-23","CompliantStatus":true,"NetVendorId":"1","DefaultAutoAcceptWorkOrders":true,"PaymentTerms":30,"UsingEomTerms":true,"Tags":["tag1","tag2"],"VendorPaidByACH":true,"UseOnlinePayables":true,"BankAccountRoutingNumber":"121042882","BankAccountNumber":"1234567890","SavingsAccount":false}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/vendors' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"TaxpayerName\": \"John Doe\",\n       \"TaxpayerId\": \"55-2345678\",\n       \"CompanyName\": \"Fake Company\",\n       \"IsCompany\": true,\n       \"UseCompanyNameAsTaxpayerName\": false,\n       \"Send1099\": true,\n       \"FirstName\": \"John\",\n       \"LastName\": \"Doe\",\n       \"Address1\": \"25 Example Way\",\n       \"Address2\": \"34 Example Way\",\n       \"City\": \"Los Angeles\",\n       \"State\": \"CA\",\n       \"Zip\": \"92114\",\n       \"CountryCode\": \"US\",\n       \"PhoneNumbers\": [\n        {\n          \"Number\": \"555-123-4567\",\n          \"Label\": \"Mobile\",\n          \"AdditionalDetails\": \"Primary contact number\",\n          \"IsPrimary\": true\n        }\n       ],\n       \"Emails\": [\n        {\n          \"EmailAddress\": \"john.doe@example.com\",\n          \"IsPrimary\": true\n        }\n       ],\n       \"CompanyURL\": \"https://example.com\",\n       \"LiabilityInsuranceExpiration\": \"2022-01-23\",\n       \"AutoInsuranceExpiration\": \"2022-02-23\",\n       \"WorkersCompExpiration\": \"2022-03-23\",\n       \"ContractExpiration\": \"2022-04-23\",\n       \"UmbrellaInsuranceExpiration\": \"2022-05-23\",\n       \"CompliantStatus\": true,\n       \"NetVendorId\": \"1\",\n       \"DefaultAutoAcceptWorkOrders\": true,\n       \"PaymentTerms\": 30,\n       \"UsingEomTerms\": true,\n       \"VendorPaidByACH\": true,\n       \"UseOnlinePayables\": true,\n       \"BankAccountRoutingNumber\": \"121042882\",\n       \"BankAccountNumber\": \"1234567890\",\n       \"SavingsAccount\": false,\n       \"Tags\": [\"tag1\", \"tag2\"]\n     }'\n"}],"responses":{"201":{"description":"Created a Vendor","content":{"application/json":{"schema":{"properties":{"Id":{"type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec929e19","description":"Unique identifier of the created vendor","format":"uuid"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Invalid value passed. CompanyURL not properly formatted."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/vendors/{vendorId}":{"patch":{"operationId":"updateVendor","summary":"Update Vendor","description":"Update a vendor.","tags":["Vendors"],"parameters":[{"name":"vendorId","in":"path","description":"Unique identifier of the vendor to update","required":true,"schema":{"type":"string","example":"25113767-a69e-11ea-abac-0a41ffc49f5e"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"TaxpayerName":{"type":"string","description":"The taxpayer name of the vendor \u003cbr /\u003e\nIf `UseCompanyNameAsTaxpayerName` is true, then `TaxpayerName` will be `CompanyName`.\u003cbr /\u003e\nIf `IsCompany` is true, and `TaxpayerName` is not provided, then `TaxpayerName` will be set to `CompanyName`.\u003cbr /\u003e\nIf `IsCompany` is false, and `TaxpayerName` is not provided, then `TaxpayerName` will be set to the concatenation of `FirstName` and `LastName`.\u003cbr /\u003e\nIf `TaxpayerName` is provided, and `UseCompanyNameAsTaxpayerName` is false, then `TaxpayerName` will be set as provided value.\n"},"TaxpayerId":{"type":"string","description":"The tax identification number of the vendor. This field accepts either a Employer Identification Number (EIN), a Social Security Number (SSN), or an Individual Taxpayer Identification Number (ITIN)."},"CompanyName":{"type":"string","description":"The display name of the vendor's company"},"Send1099":{"type":"boolean","description":"Indicates whether or not the vendor needs a 1099 tax form from the management company"},"FirstName":{"type":"string","description":"The vendor's first name"},"LastName":{"type":"string","description":"The vendor's last name"},"Address1":{"type":"string","description":"The primary street address of the vendor. If provided, `City`, `State`, and `Zip` must also be provided."},"Address2":{"type":"string","description":"Additional street address information pertaining to the vendor. If provided, `Address1`, `City`, `State`, and `Zip` must also be provided."},"City":{"type":"string","description":"The city where the vendor is located. If provided, `Address1`, `State`, and `Zip` must also be provided."},"State":{"type":"string","description":"The state where the vendor is located (e.g. \"CA\" for California). If provided, `Address1`, `City`, and `Zip` must also be provided. This value must not be an unincorporated US territory (AS, FM, MH, MP, or VI) for primary address when the vendor is using online payables with ACH."},"Zip":{"type":"string","description":"The zip code where the vendor is located. Must be a string in 5-digit ZIP code format (e.g., 93013) or ZIP+4 format (e.g., 93013-0429). If provided, `Address1`, `City`, and `State` must also be provided."},"CountryCode":{"type":"string","description":"The country code of the vendor (e.g. \"JP\" for Japan). If provided, `Address1`, `City`, `State`, and `Zip` must also be provided. This value must be US for primary address when the vendor is using online payables and ACH."},"PhoneNumber":{"deprecated":true,"type":"string","description":"The vendor's primary phone number"},"PhoneNumbers":{"type":"array","description":"The vendor's phone number(s). PhoneNumber and PhoneNumbers cannot be provided together. Passing any number of phone numbers will replace all existing phone numbers for the vendor.","items":{"$ref":"#/components/schemas/Vendor.Create.PhoneNumbers"}},"Email":{"deprecated":true,"type":"string","description":"The vendor's primary email address"},"Emails":{"type":"array","description":"The vendor's email address(es). Email and Emails cannot be provided together. Passing any number of emails will replace all existing email addresses for the vendor.","items":{"$ref":"#/components/schemas/Vendor.Create.Emails"}},"CompanyURL":{"type":"string","description":"The internet address of vendor's website"},"LiabilityInsuranceExpiration":{"type":"string","format":"date","description":"The expiration date of the vendor's liability insurance. ISO 8601 format (YYYY-MM-DD) is required. Legacy MM/DD/YYYY format is supported for backward compatibility but will be deprecated in a future release."},"AutoInsuranceExpiration":{"type":"string","format":"date","description":"The expiration date of the vendor's automobile insurance. ISO 8601 format (YYYY-MM-DD) is required. Legacy MM/DD/YYYY format is supported for backward compatibility but will be deprecated in a future release."},"WorkersCompExpiration":{"type":"string","format":"date","description":"The expiration date of the vendor's worker's compensation insurance. ISO 8601 format (YYYY-MM-DD) is required. Legacy MM/DD/YYYY format is supported for backward compatibility but will be deprecated in a future release."},"ContractExpiration":{"type":"string","format":"date","description":"The expiration date of the contract. ISO 8601 format (YYYY-MM-DD) is required. Legacy MM/DD/YYYY format is supported for backward compatibility but will be deprecated in a future release."},"UmbrellaInsuranceExpiration":{"type":"string","format":"date","description":"The expiration date of the vendor's umbrella insurance. ISO 8601 format (YYYY-MM-DD) is required. Legacy MM/DD/YYYY format is supported for backward compatibility but will be deprecated in a future release."},"CompliantStatus":{"type":"boolean","description":"Indicates whether or not the vendor meets compliance"},"NetVendorId":{"type":"string","description":"The vendor's NetVendor ID"},"IsCompany":{"type":"boolean","description":"Indicates whether or not the vendor identifies as a company"},"UseCompanyNameAsTaxpayerName":{"type":"boolean","description":"Indicates whether or not to use the company name for tax paying purposes"},"DefaultAutoAcceptWorkOrders":{"type":"boolean","description":"Indicates whether the vendor is ineligible for auto-accept work order assignments. When set to true, this vendor will auto-accept all work orders assigned to them."},"PaymentTerms":{"type":"integer","description":"Represents the number of days the payment is due after the invoice date. A null value indicates that no payment terms were defined. A value of 0 indicates the payment is due on receipt.  A value greater than 0, for example, 15, indicates the payment is due 15 days after the invoice date. Required if UsingEomTerms is true."},"UsingEomTerms":{"type":"boolean","description":"Indicates whether or not the payment terms include an end-of-month (EOM) stipulation. For example, if PaymentTerms is 15, and EOM is true, the payment is due within 15 days of the end of the month."},"Tags":{"type":"array","description":"User-defined tag(s) that categorize the vendor. Providing an array of valid strings will overwrite all existing tags. Passing in an empty array `[]` or an array of empty strings `[\"\"]` or `[\"\", \"\"]` will clear all existing tags. Passing in an array of a valid string and an empty string `[\"tag_name\", \"\"]` will result in `Tags: [\"tag_name\"]`. Passing in `null` will result in no change.","items":{"type":"string"}},"CustomFields":{"$ref":"#/components/schemas/CustomFields.UpdateAttribute"}}},"example":{"TaxpayerName":"John Doe","TaxpayerId":"55-2345678","CompanyName":"Fake Company","IsCompany":true,"UseCompanyNameAsTaxpayerName":false,"Send1099":true,"FirstName":"John","LastName":"Doe","Address1":"25 Example Way","Address2":"34 Example Way","City":"Los Angeles","State":"CA","Zip":"92114","PhoneNumbers":[{"Number":"555-123-4567","Label":"Mobile","AdditionalDetails":"Primary contact number","IsPrimary":true}],"Emails":[{"EmailAddress":"john.doe@example.com","IsPrimary":true}],"CompanyURL":"https://example.com","LiabilityInsuranceExpiration":"01-23-2022","AutoInsuranceExpiration":"02-23-2022","WorkersCompExpiration":"03-23-2022","ContractExpiration":"04-23-2022","UmbrellaInsuranceExpiration":"05-23-2022","CompliantStatus":true,"NetVendorId":"1","DefaultAutoAcceptWorkOrders":true,"PaymentTerms":30,"UsingEomTerms":true,"Tags":["tag1","tag2"],"CustomFields":{"a965e7d8-a17d-11ec-b909-0242ac120002":"a new value","454d8635-521e-4864-99fb-0bd6200d3a0f":true,"c80d3dd1-9eba-45aa-803c-666280b8ff24":87.4,"3277c366-1783-42a9-b925-0bca2afbe391":"0e9a7b18-1778-4a03-bc1c-f913aeaef6bc","4f83a1bf-4e49-4463-8113-15c52f79243a":["3f41feb4-413b-4a83-a58a-fdb4ad0d6205","9bf83fd8-a20a-4c22-97d0-bf35173694b7"]}}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/vendors/ac00dc0a-9f44-42f7-b01f-cfb2ec929e19' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"TaxpayerName\": \"John Doe\",\n       \"TaxpayerId\": \"55-2345678\",\n       \"CompanyName\": \"Fake Company\",\n       \"Send1099\": true,\n       \"FirstName\": \"John\",\n       \"LastName\": \"Doe\",\n       \"Address1\": \"25 Example Way\",\n       \"Address2\": \"34 Example Way\",\n       \"City\": \"Los Angeles\",\n       \"State\": \"CA\",\n       \"Zip\": \"92114\",\n       \"PhoneNumbers\": [\n        {\n          \"Number\": \"555-123-4567\",\n          \"Label\": \"Mobile\",\n          \"AdditionalDetails\": \"Primary contact number\",\n          \"IsPrimary\": true,\n        },\n       ],\n       \"Emails\": [\n        {\n          \"EmailAddress\": \"john.doe@example.com\",\n          \"IsPrimary\": true,\n        },\n       ],\n       \"CompanyURL\": \"https://example.com\",\n       \"LiabilityInsuranceExpiration\": \"2022-01-23\",\n       \"AutoInsuranceExpiration\": \"2022-02-23\",\n       \"WorkersCompExpiration\": \"2022-03-23\",\n       \"ContractExpiration\": \"2022-04-23\",\n       \"UmbrellaInsuranceExpiration\": \"2022-05-23\",\n       \"CompliantStatus\": true,\n       \"NetVendorId\": \"1\",\n       \"IsCompany\": true,\n       \"DefaultAutoAcceptWorkOrders\": true,\n       \"PaymentTerms\": 30,\n       \"UsingEomTerms\": true,\n       \"UseCompanyNameAsTaxpayerName\": false,\n       \"Tags\": [\"tag1\", \"tag2\"],\n       \"CustomFields\": {\n         \"a965e7d8-a17d-11ec-b909-0242ac120002\": \"a new value\",\n         \"454d8635-521e-4864-99fb-0bd6200d3a0f\": true,\n         \"c80d3dd1-9eba-45aa-803c-666280b8ff24\": 87.40,\n         \"3277c366-1783-42a9-b925-0bca2afbe391\": \"0e9a7b18-1778-4a03-bc1c-f913aeaef6bc\",\n         \"4f83a1bf-4e49-4463-8113-15c52f79243a\": [\"3f41feb4-413b-4a83-a58a-fdb4ad0d6205\", \"9bf83fd8-a20a-4c22-97d0-bf35173694b7\"]\n       }\n     }'\n"}],"responses":{"200":{"description":"Updated a Vendor","content":{"application/json":{"schema":{"properties":{"Id":{"type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec929e19","description":"Unique identifier of the updated vendor","format":"uuid"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Invalid value passed. CompanyURL not properly formatted."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/vendors/bulk":{"post":{"operationId":"bulkCreateVendors","summary":"Bulk Create Vendors","description":"Create vendors in bulk","tags":["Vendors"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/vendors/bulk' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n        \"data\": [\n          {\n            \"ReferenceId\": \"1\",\n            \"TaxpayerName\": \"John Doe\",\n            \"TaxpayerId\": \"55-2345678\",\n            \"CompanyName\": \"Fake Company\",\n            \"IsCompany\": true,\n            \"UseCompanyNameAsTaxpayerName\": false,\n            \"Send1099\": true,\n            \"FirstName\": \"John\",\n            \"LastName\": \"Doe\",\n            \"Emails\": [\n                {\n                    \"EmailAddress\": \"john.doe@example.com\",\n                    \"IsPrimary\": true\n                },\n                {\n                    \"EmailAddress\": \"john.doe2@example.com\",\n                    \"IsPrimary\": false\n                }\n            ],\n            \"PhoneNumbers\": [\n                {\n                    \"Number\": \"555-123-4567\",\n                    \"Label\": \"Mobile\",\n                    \"AdditionalDetails\": \"Primary contact number\",\n                    \"IsPrimary\": true\n                }\n            ],\n            \"Address1\": \"123 State St\",\n            \"Address2\": \"unit c\",\n            \"City\": \"Santa Barbara\",\n            \"State\": \"CA\",\n            \"Zip\": \"93117\",\n            \"CountryCode\": \"US\",\n            \"CompanyURL\": \"https://example.com\",\n            \"LiabilityInsuranceExpiration\": \"2025-01-04\",\n            \"AutoInsuranceExpiration\": \"2025-01-01\",\n            \"WorkersCompExpiration\": \"2025-01-05\",\n            \"ContractExpiration\": \"2025-01-02\",\n            \"UmbrellaInsuranceExpiration\": \"2025-01-03\",\n            \"CompliantStatus\": true,\n            \"NetVendorId\": \"111222333\",\n            \"DefaultAutoAcceptWorkOrders\": true,\n            \"UsingEomTerms\": false,\n            \"PaymentTerms\": 50,\n            \"VendorPaidByACH\": true,\n            \"UseOnlinePayables\": true,\n            \"BankAccountRoutingNumber\": \"121042882\",\n            \"BankAccountNumber\": \"1234567890\",\n            \"SavingsAccount\": false,\n            \"Tags\": [\"TestTag1\", \"TestTag2\"]\n          },\n          {\n            \"ReferenceId\": \"2\",\n            \"TaxpayerName\": \"Ramon BBB Plumbing Tax Name\",\n            \"TaxpayerId\": \"55-2345678\",\n            \"IsCompany\": false,\n            \"UseCompanyNameAsTaxpayerName\": false,\n            \"Send1099\": false,\n            \"FirstName\": \"Ramon\",\n            \"LastName\": \"Vendor\",\n            \"Address1\": \"100 State St\",\n            \"Address2\": \"Suite 200\",\n            \"City\": \"Santa Barbara\",\n            \"State\": \"CA\",\n            \"Zip\": \"93101\",\n            \"CountryCode\": \"US\",\n            \"CompanyURL\": \"Ramon.website.org\",\n            \"LiabilityInsuranceExpiration\": \"2026-02-04\",\n            \"AutoInsuranceExpiration\": \"2026-02-01\",\n            \"WorkersCompExpiration\": \"2026-02-05\",\n            \"ContractExpiration\": \"2026-02-02\",\n            \"UmbrellaInsuranceExpiration\": \"2026-02-03\",\n            \"CompliantStatus\": false,\n            \"NetVendorId\": \"222333444\",\n            \"DefaultAutoAcceptWorkOrders\": false,\n            \"UsingEomTerms\": true,\n            \"PaymentTerms\": 15,\n            \"Tags\": [\"TagA\", \"TagB\"]\n          }\n        ]\n      }'\n"}],"requestBody":{"description":"Vendor objects","required":true,"content":{"application/json":{"schema":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Vendor.BulkCreate"}}}},"example":{"data":[{"ReferenceId":"1","TaxpayerName":"John Doe","TaxpayerId":"55-2345678","CompanyName":"Fake Company","IsCompany":true,"UseCompanyNameAsTaxpayerName":false,"Send1099":true,"FirstName":"John","LastName":"Doe","Emails":[{"EmailAddress":"john.doe@example.com","IsPrimary":true},{"EmailAddress":"john.doe2@example.com","IsPrimary":false}],"PhoneNumbers":[{"Number":"555-123-4567","Label":"Mobile","AdditionalDetails":"Primary contact number","IsPrimary":true}],"Address1":"123 State St","Address2":"unit c","City":"Santa Barbara","State":"CA","Zip":"93117","CountryCode":"US","CompanyURL":"https://example.com","LiabilityInsuranceExpiration":"2025-01-04","AutoInsuranceExpiration":"2025-01-01","WorkersCompExpiration":"2025-01-05","ContractExpiration":"2025-01-02","UmbrellaInsuranceExpiration":"2025-01-03","CompliantStatus":true,"NetVendorId":"111222333","DefaultAutoAcceptWorkOrders":true,"UsingEomTerms":false,"PaymentTerms":50,"Tags":["TestTag1","TestTag2"],"VendorPaidByACH":true,"UseOnlinePayables":true,"BankAccountRoutingNumber":"121042882","BankAccountNumber":"1234567890","SavingsAccount":false}]}}}},"responses":{"202":{"description":"Vendors accepted","content":{"application/json":{"schema":{"properties":{"JobId":{"type":"string","format":"uuid","description":"Unique identifier for the job that was created to process the bulk creation of vendors"}}}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"properties":{"errors":{"type":"array","items":{"properties":{"ReferenceId":{"description":"Transient unique ID assigned by the developer. Used to reference individual vendor in the bulk-creation of vendors.","type":"string"},"successful":{"description":"Indication of successful creation","type":"boolean"},"errors":{"description":"Errors associated with attempted vendor creation","type":"array"}}}}}},"example":{"errors":[{"ReferenceId":"2","successful":false,"errors":[{"attribute":"PhoneNumbers[Number]","message":"Required parameter PhoneNumbers[Number] is missing."},{"attribute":"IsCompany","message":"Required parameter IsCompany is missing."}]}]}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/vendors/notes":{"get":{"operationId":"getVendorsNotes","summary":"List All Vendors Notes","description":"Returns all vendor notes that meet the filter criteria","tags":["Vendors"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/vendors/notes?filters[VendorId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for vendor notes. All GET requests must include a filter for `[VendorId]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"VendorId":{"description":"Example: `filters[VendorId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the vendor. Filter the results based on a single value.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns vendor note records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Vendors.Notes"}}}}}}},"/vendors/{VendorId}/notes":{"post":{"operationId":"createVendorNote","summary":"Create Vendor Note","description":"Add a note to a vendor","tags":["Vendors"],"parameters":[{"name":"VendorId","in":"path","description":"The vendor to which the note will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/vendors/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for vendor\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message related to the vendor. A vendor note cannot exceed `65,535` characters."}}},"example":{"Body":"This vendor completed maintenance on 11/11/2023"}}}},"responses":{"201":{"description":"Created a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the vendor note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/vendors/{VendorId}/notes/{Id}":{"patch":{"operationId":"updateVendorNote","summary":"Update Vendor Note","description":"Update a note to a vendor","tags":["Vendors"],"parameters":[{"name":"VendorId","in":"path","description":"The vendor to which the note will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d9"}},{"name":"Id","in":"path","description":"Unique identifier of the note to update","required":true,"schema":{"type":"string","format":"uuid","example":"45e04805-01c4-4e39-adc9-c75ff9ddc8d7"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/vendors/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes/632b920c-e048-4a7b-b1f6-eddb6ad6d23c' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for vendor - updating\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the vendor note. A vendor note cannot exceed `65,535` characters."}}},"example":{"Body":"This vendor completed maintenance on 11/30/2022 - Updated"}}}},"responses":{"200":{"description":"Updated a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated vendor note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular note."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (Vendor Id or Note Id) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Required parameter Body is missing."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/work_orders":{"get":{"operationId":"getWorkOrders","summary":"List All Work Orders","description":"Returns all work orders that meet the filter criteria","tags":["Work Orders"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/work_orders?page[size]=10\u0026page[number]=2\u0026filters[Id]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[CreatedAtFrom]=2020-12-14T16:30:46Z\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for work orders. All GET requests must include a filter for `[Id]` (if available), or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"CreatedAtFrom":{"type":"string","format":"date-time","description":"Example: `filters[CreatedAtFrom]=2021-12-14T16:30:46Z` \u003cbr\u003e Filter to return results created at the specified date. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"CreatedAtTo":{"type":"string","format":"date-time","description":"Example: `filters[CreatedAtTo]=2021-12-14T16:30:46Z` \u003cbr\u003e Filter to return results created until the specified date. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"Id":{"type":"string","description":"Example: `filters[Id]=1abcde23-c543-456e-abc9-123456789cba,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique identifier of the work order(s) sought for retrieval. Filter the results based on one or more `Id`s. Multiple values should be separated by commas.","format":"uuid"},"LastUpdatedAtFrom":{"type":"string","format":"date-time","description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns AppFolio Property Manager work order records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"ManagementCompanyAsVendor":{"type":"boolean","description":"Example: `filters[ManagementCompanyAsVendor]=true` \u003cbr\u003e Indicates whether or not to include work orders where the management company is the vendor"},"PropertyId":{"type":"string","description":"Example: `filters[PropertyId]=1abcde23-c543-456e-abc9-123456789cba,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique Identifier of the property or association related to the the work order. Filter the results based on one or more PropertyIds. Multiple values should be separated by commas.","format":"uuid"},"Status":{"$ref":"#/components/schemas/WorkOrder.Status"},"UnitId":{"type":"string","description":"Example: `filters[UnitId]=1abcde23-c543-456e-abc9-123456789cba,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique identifier of the unit associated with the work order. Filter the results based on one or more `UnitId`s. Multiple values should be separated by commas.","format":"uuid"},"VendorId":{"type":"string","description":"Example: `filters[VendorId]=1abcde23-c543-456e-abc9-123456789cba,cfcb95e8-d5fb-448c-b811-88d9f832e79c` \u003cbr\u003e Unique identifier of the vendor associated with the work order. Filter the results based on one or more VendorIds. Multiple values should be separated by commas.","format":"uuid"},"WorkOrderStatus":{"$ref":"#/components/schemas/WorkOrder.WorkOrderStatus"}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkOrders"}}}}}},"post":{"operationId":"createWorkOrder","summary":"Create Work Orders","description":"Create a work order which belongs to a property, unit, occupancy, or inspection","tags":["Work Orders"],"requestBody":{"description":"Created work order object","required":true,"content":{"application/json":{"schema":{"type":"object","required":["JobDescription"],"properties":{"JobDescription":{"type":"string","description":"A brief description of the work order to be performed"},"AssignedUsers":{"type":"array","description":"Array of `AssignedUsers` to create the work order with"},"BillableItems":{"$ref":"#/components/schemas/WorkOrder.BillableItems"},"CanceledOn":{"type":"string","format":"date","example":"2021-10-27","description":"The date the work order status changed to \"canceled\""},"CompletedOn":{"type":"string","format":"date","example":"2021-10-27","description":"The date the work order status changed to \"completed\""},"Description":{"type":"string","description":"The top-level description for a grouping of work orders in AppFolio"},"Estimates":{"$ref":"#/components/schemas/WorkOrder.Estimates.Create"},"LaborItems":{"$ref":"#/components/schemas/WorkOrder.LaborItems"},"ManagementCompanyAsVendor":{"type":"boolean","description":"Indicates whether or not the management company is the vendor for the work order. If true, `VendorId` must be null or omitted."},"PermissionToEnter":{"description":"Indicates whether or not the occupancy has given permission to enter the unit","oneOf":[{"type":"boolean"},{"type":"string","enum":["n/a"]}]},"Priority":{"$ref":"#/components/schemas/WorkOrder.Priority"},"PurchaseOrderIds":{"type":"array","example":["1091593d-613b-43d0-b8f1-1cd0eac704e4","4897dd96-7479-44ec-83a0-99b19936d607"],"description":"Array of purchase order IDs to link to the work order. Each ID must reference an existing purchase order that is visible to the caller and must not be duplicated within the array.","items":{"type":"string","format":"uuid"}},"ScheduledEnd":{"type":"string","format":"date-time","example":"2021-11-27T12:33:35Z","description":"When the work order is scheduled to be completed. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"ScheduledStart":{"type":"string","format":"date-time","example":"2021-11-27T12:33:35Z","description":"When the work order is scheduled to start. The value must adhere to the ISO 8601 format: `YYYY-MM-DDThh:mm:ssZ`."},"Status":{"$ref":"#/components/schemas/WorkOrder.StatusForWriter"},"WorkOrderStatus":{"$ref":"#/components/schemas/WorkOrder.WorkOrderStatusForWriter"},"VendorId":{"type":"string","description":"Unique identifier of the vendor associated with the work order. If the management company is the vendor, this should be null or omitted.","format":"uuid"},"VendorTrade":{"type":"string","description":"The type of service offered by the vendor\n\u003cdetails\u003e\n\u003csummary\u003e\n\u003cb\u003eVendor Trades\u003c/b\u003e\n\u003c/summary\u003e\n\n| Options    |\n|------------|\n| Alarm/Security |\n| Appliances |\n| Capital Improvements |\n| Carpet/Flooring |\n| Cleaning |\n| Deck Repair |\n| Doors/Windows |\n| Drywall Repair |\n| Electrical |\n| Elevator Services |\n| Fences/Gates |\n| Fire/Water Damage  |\n| Fireplace/Chimney |\n| Garage Doors |\n| General Contractor |\n| Gutter Cleaning |\n| Handyperson |\n| HVAC |\n| Inspections |\n| Keys/Locks |\n| Landscaping |\n| Other |\n| Painting |\n| Parking Lots/Driveways |\n| Pest Control |\n| Plumbing |\n| Pool/Spa |\n| Preventative Maintenance |\n| Redevelopment |\n| Repairs and Maintenance: Exterior |\n| Repairs and Maintenance: Interior |\n| Roofing |\n| Septic System |\n| Smoke/Carbon Monoxide Detectors |\n| Snow Removal |\n| Trash/Recycling |\n| Turnover |\n| Utilities |\n\u003c/details\u003e\n"},"WorkCompletedOn":{"type":"string","format":"date","example":"2021-10-25","description":"The date the work order was completed"},"Type":{"type":"string","enum":["Unit Turn","Resident","Internal"],"description":"The purpose or origin of the work order request. Valid values include `Unit Turn`, `Resident`, or `Internal`. Defaults to `Internal` if not provided."},"UnitTurnCategory":{"type":"string","description":"The category of the unit turn work order. This field requires a valid `UnitId` or `OccupancyId` if provided."}},"oneOf":[{"$ref":"#/components/schemas/WorkOrder.PropertyId"},{"$ref":"#/components/schemas/WorkOrder.UnitId"},{"$ref":"#/components/schemas/WorkOrder.OccupancyId"},{"$ref":"#/components/schemas/WorkOrder.InspectionId"},{"$ref":"#/components/schemas/WorkOrder.ServiceRequestId"}]},"example":{"AssignedUsers":["1091593d-613b-43d0-b8f1-1cd0eac704e4","4897dd96-7479-44ec-83a0-99b19936d607"],"BillableItems":[{"Description":"Pest control supplies","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","Quantity":"1.0","Rate":"43.10"},{"Description":"Lawn fertilizer","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","Quantity":"2.5","Rate":"7.78"}],"Description":"Something to fix.","Estimates":[{"VendorId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","ManagementCompanyAsVendor":false,"Amount":150,"Status":"Approved","InternalNotes":"Note","EstimateRequestedDate":"2026-01-20"},{"ManagementCompanyAsVendor":true,"Status":"Pending","EstimateRequestedDate":"2026-01-26","EstimateReceivedDate":"2026-01-27"}],"LaborItems":[{"Date":"2022-12-12","Description":"Replace windows","HoursWorked":"2.5","UserId":"d9009724-9f32-11ec-bc31-d46a96ab9b01"},{"Date":"2022-12-12","Description":"Paint doors","HoursWorked":"3.25","UserId":"d9009724-9f32-11ec-bc31-d46a96ab9b02"}],"JobDescription":"Fix leaky sink.","ManagementCompanyAsVendor":false,"PermissionToEnter":true,"Priority":"Normal","PurchaseOrderIds":["1091593d-613b-43d0-b8f1-1cd0eac704e4","4897dd96-7479-44ec-83a0-99b19936d607"],"PropertyId":"8eb28538-c8f5-41e7-ac82-3f9609cceec9","ScheduledEnd":"2021-01-15T20:30:46Z","ScheduledStart":"2021-01-15T16:30:46Z","Status":"Scheduled","Type":"Internal","VendorId":"8eb28538-c8f5-41e7-ac82-3f9609ccee10","VendorTrade":"Appliances","UnitTurnCategory":"Paint"}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/work_orders' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"AssignedUsers\": [\"1091593d-613b-43d0-b8f1-1cd0eac704e4\", \"4897dd96-7479-44ec-83a0-99b19936d607\"],\n       \"BillableItems\": [\n         {\"Description\": \"Pest control supplies\", \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\", \"Quantity\": \"1.0\", \"Rate\": \"43.10\"},\n         {\"Description\": \"Lawn fertilizer\", \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\", \"Quantity\": \"2.5\", \"Rate\": \"7.78\"}\n       ],\n       \"Description\": \"Something to fix.\",\n       \"Estimates\": [\n         {\"VendorId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\", \"ManagementCompanyAsVendor\": false, \"Amount\": 150, \"Status\": \"Approved\", \"InternalNotes\": \"Note\", \"EstimateRequestedDate\": \"2026-01-20\"},\n         {\"ManagementCompanyAsVendor\": true, \"Status\": \"Pending\", \"EstimateRequestedDate\": \"2026-01-26\", \"EstimateReceivedDate\": \"2026-01-27\"}\n       ],\n       \"JobDescription\": \"Fix leaky sink.\",\n       \"LaborItems\": [\n         {\"Date\": \"2022-12-12\", \"Description\": \"Replace windows\", \"HoursWorked\": \"2.5\", \"UserId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b01\"},\n         {\"Date\": \"2022-12-12\", \"Description\": \"Paint doors\", \"HoursWorked\": \"3.25\", \"UserId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b02\"}\n       ],\n       \"ManagementCompanyAsVendor\": false,\n       \"PermissionToEnter\": true,\n       \"Priority\": \"Normal\",\n       \"PurchaseOrderIds\": [\"1091593d-613b-43d0-b8f1-1cd0eac704e4\", \"4897dd96-7479-44ec-83a0-99b19936d607\"],\n       \"PropertyId\": \"8eb28538-c8f5-41e7-ac82-3f9609cceec9\",\n       \"ScheduledEnd\": \"2021-01-15T20:30:46Z\",\n       \"ScheduledStart\": \"2021-01-15T16:30:46Z\",\n       \"Status\": \"Scheduled\",\n       \"Type\": \"Internal\",\n       \"UnitTurnCategory\": \"Paint\",\n       \"VendorId\": \"8eb28538-c8f5-41e7-ac82-3f9609ccee10\",\n       \"VendorTrade\": \"Appliances\"\n     }'\n"}],"responses":{"201":{"description":"Created a Work Order","content":{"application/json":{"schema":{"properties":{"Id":{"type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec929e19","description":"Unique identifier of the created work order","format":"uuid"},"Link":{"type":"string","example":"https://abc.appfolio.com/work_orders/123","description":"A link to the work order page in the AppFolio Property Manager.","format":"uri"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions for ServiceRequestId."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (PropertyId, UnitId, OccupancyId, or InspectionId) not found"}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"One of the following parameters is required: PropertyId, UnitId, OccupancyId, or InspectionId"}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/work_orders/attachments":{"get":{"operationId":"listWorkOrderAttachments","summary":"List All Work Order Attachments","description":"Returns all attachments associated with a work order","tags":["Work Orders"],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000}},"required":false},{"name":"filters","in":"query","description":"Filters for work orders. All GET requests must include a filter for `[WorkOrderId]`, or `[CreatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"CreatedAtFrom":{"type":"string","format":"date-time","description":"Example: filters[CreatedAtFrom]=2021-12-15T16:30:46Z \u003cbr\u003e Returns attachments created on or after the specified date. The value must adhere to the ISO 8601 format YYYY-MM-DDThh:mm:ssZ and the default time zone is Coordinated Universal Time (UTC)."},"WorkOrderId":{"type":"string","description":"filters[WorkOrderId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the work order associated with the attachment. Can only filter by one work order at a time.","format":"uuid"}}},"required":false}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/work_orders/attachments?page[size]=10\u0026page[number]=2\u0026filters[WorkOrderId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[CreatedAtFrom]=2020-12-14T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkOrder.Attachments"}}}}}}},"/work_orders/{workOrderId}":{"patch":{"operationId":"updateWorkOrder","summary":"Update Work Order","description":"Update a work order","tags":["Work Orders"],"parameters":[{"name":"workOrderId","in":"path","description":"Unique identifier of the work order to update","required":true,"schema":{"type":"string","example":"c203f82b-240c-4029-bf17-c5b5da3fe656","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"AssignedUsers":{"type":"array","description":"Array of `AssignedUsers` IDs to be updated. Please pass in all the assigned users you want to keep.\u003cbr /\u003e\n\u0026nbsp;\u0026nbsp;When this is empty, it will drop all assigned users.\u003cbr /\u003e\n\u0026nbsp;\u0026nbsp;When this is `null` or not passed in, it will not change the assigned users.\n"},"BillableItems":{"$ref":"#/components/schemas/WorkOrder.BillableItems"},"CanceledOn":{"type":"string","format":"date","example":"2021-10-27","description":"The date the work order status changed to `canceled`"},"CompletedOn":{"type":"string","format":"date","example":"2021-10-27","description":"The date the work order status changed to `Completed`"},"CustomFields":{"$ref":"#/components/schemas/CustomFields.UpdateAttribute"},"Description":{"type":"string","description":"The top-level description for a grouping of work orders in AppFolio"},"Estimates":{"$ref":"#/components/schemas/WorkOrder.Estimates.Update"},"InventoryDetails":{"type":"array","description":"Array of `InventoryDetails` objects to be updated. Please pass in all the inventory details you want to keep.\u003cbr /\u003e\n\u0026nbsp;\u0026nbsp;When this is empty, it will drop all inventory details.\u003cbr /\u003e\n\u0026nbsp;\u0026nbsp;When this is `null` or not passed in, it will not change the inventory details.\n","items":{"type":"object","properties":{"InventoryId":{"type":"string","format":"uuid","description":"Required. Unique identifier of the inventory item"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the GL account associated with the inventory detail"},"Quantity":{"type":"string","format":"decimal","description":"The quantity of the inventory item used"},"Rate":{"type":"string","format":"decimal","description":"The rate (cost) of the inventory item"}}}},"JobDescription":{"type":"string","description":"A brief description of the work order to be performed"},"LaborItems":{"$ref":"#/components/schemas/WorkOrder.LaborItems"},"ManagementCompanyAsVendor":{"type":"boolean","description":"Indicates whether or not the management company is the vendor for the work order. If false, the assigned vendor company will be dropped."},"PermissionToEnter":{"description":"Occupancy has given permission to enter unit","oneOf":[{"type":"boolean"},{"type":"string","enum":["n/a"]}]},"Priority":{"$ref":"#/components/schemas/WorkOrder.Priority"},"PurchaseOrderIds":{"type":"array","description":"Array of purchase order IDs to be linked to the work order. Please pass in all the purchase orders you want to keep.\u003cbr /\u003e\n\u0026nbsp;\u0026nbsp;When this is empty, it will unlink all purchase orders.\u003cbr /\u003e\n\u0026nbsp;\u0026nbsp;When this is `null` or not passed in, it will not change the linked purchase orders.\u003cbr /\u003e\n\u0026nbsp;\u0026nbsp;Each ID must reference an existing purchase order that is visible to the caller and must not be duplicated within the array.\n","items":{"type":"string","format":"uuid"}},"ScheduledEnd":{"type":"string","format":"date-time","description":"When the work order is scheduled to be completed. If `ScheduledEnd` is null, it will be considered scheduled for 'all day'. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"ScheduledStart":{"type":"string","format":"date-time","description":"When the work order is scheduled to start. Set this value together with `ScheduledEnd`. The time difference between `ScheduledStart` and `ScheduledEnd` should not exceed 12 hours unless it is an scheduled for 'all day'. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"Status":{"$ref":"#/components/schemas/WorkOrder.StatusForWriter"},"WorkOrderStatus":{"$ref":"#/components/schemas/WorkOrder.WorkOrderStatusForWriter"},"VendorId":{"type":"string","description":"Unique identifier of the vendor associated with the work order. When the value of this attribute is null, it will drop the assigned vendor. When present, `ManagementCompanyAsVendor` cannot be true.","format":"uuid"},"VendorTrade":{"type":"string","description":"The type of service offered by the vendor. Pass \"\" to remove the vendor trade.\n\u003cdetails\u003e\n\u003csummary\u003e\n\u003cb\u003eVendor Trades\u003c/b\u003e\n\u003c/summary\u003e\n\n| Options    |\n|------------|\n| Alarm/Security |\n| Capital Improvements |\n| Carpet/Flooring |\n| Cleaning |\n| Deck Repair |\n| Doors/Windows |\n| Drywall Repair |\n| Electrical |\n| Elevator Services |\n| Fences/Gates |\n| Fire/Water Damage  |\n| Fireplace/Chimney |\n| Garage Doors |\n| General Contractor |\n| Gutter Cleaning |\n| Handyperson |\n| HVAC |\n| Inspections |\n| Keys/Locks |\n| Landscaping |\n| Other |\n| Painting |\n| Parking Lots/Driveways |\n| Pest Control |\n| Plumbing |\n| Pool/Spa |\n| Preventative Maintenance |\n| Redevelopment |\n| Repairs and Maintenance: Exterior |\n| Repairs and Maintenance: Interior |\n| Roofing |\n| Septic System |\n| Smoke/Carbon Monoxide Detectors |\n| Snow Removal |\n| Trash/Recycling |\n| Turnover |\n| Utilities |\n\u003c/details\u003e\n"},"WorkCompletedOn":{"type":"string","format":"date","example":"2021-10-25","description":"The date the work order was completed"}}},"example":{"AssignedUsers":["1091593d-613b-43d0-b8f1-1cd0eac704e4","4897dd96-7479-44ec-83a0-99b19936d607"],"BillableItems":[{"Description":"Pest control supplies","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","Quantity":"1.0","Rate":"43.10"},{"Description":"Lawn fertilizer","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","Quantity":"2.5","Rate":"7.78"}],"Description":"Something to fix.","Estimates":[{"VendorId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","ManagementCompanyAsVendor":false,"Amount":150,"Status":"Approved","InternalNotes":"Note","EstimateRequestedDate":"2026-01-20"},{"ManagementCompanyAsVendor":true,"Status":"Pending","EstimateRequestedDate":"2026-01-26","EstimateReceivedDate":"2026-01-27"}],"InventoryDetails":[{"InventoryId":"24a7d3dc-2fac-11f1-a065-8a8d281d1b31","GlAccountId":"32ea1590-5f3a-11ed-b2a0-12d2e919c17a","Quantity":"10.00","Rate":"20.78"},{"InventoryId":"24a51d9a-2fac-11f1-a065-8a8d281d1b31","GlAccountId":"1ebb24b0-5f3a-11ed-b2a0-12d2e919c17a","Quantity":"10.00","Rate":"13.78"}],"LaborItems":[{"Date":"2020-12-12","Description":"Replace windows","HoursWorked":"2.5","UserId":"d9009724-9f32-11ec-bc31-d46a96ab9b01"},{"Date":"2020-12-12","Description":"Paint doors","HoursWorked":"4.25","UserId":"d9009724-9f32-11ec-bc31-d46a96ab9b02"}],"ManagementCompanyAsVendor":false,"PermissionToEnter":true,"Priority":"Normal","PurchaseOrderIds":["1091593d-613b-43d0-b8f1-1cd0eac704e4","4897dd96-7479-44ec-83a0-99b19936d607"],"ScheduledEnd":"2021-01-15T20:30:46Z","ScheduledStart":"2021-01-15T16:30:46Z","VendorId":"8eb28538-c8f5-41e7-ac82-3f9609cceec9","VendorTrade":"Appliances","CustomFields":{"a965e7d8-a17d-11ec-b909-0242ac120002":"a new value","454d8635-521e-4864-99fb-0bd6200d3a0f":true,"c80d3dd1-9eba-45aa-803c-666280b8ff24":87.4,"3277c366-1783-42a9-b925-0bca2afbe391":"0e9a7b18-1778-4a03-bc1c-f913aeaef6bc","4f83a1bf-4e49-4463-8113-15c52f79243a":["3f41feb4-413b-4a83-a58a-fdb4ad0d6205","9bf83fd8-a20a-4c22-97d0-bf35173694b7"]}}}}},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/work_orders/ac00dc0a-9f44-42f7-b01f-cfb2ec929e19' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"AssignedUsers\": [\"1091593d-613b-43d0-b8f1-1cd0eac704e4\", \"4897dd96-7479-44ec-83a0-99b19936d607\"],\n       \"BillableItems\": [\n         {\"Description\": \"Pest control supplies\", \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\", \"Quantity\": \"1.0\", \"Rate\": \"43.10\"},\n         {\"Description\": \"Lawn fertilizer\", \"GlAccountId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\", \"Quantity\": \"2.5\", \"Rate\": \"7.78\"}\n       ],\n       \"Description\": \"Something to fix.\",\n       \"Estimates\": [\n         {\"VendorId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b08\", \"ManagementCompanyAsVendor\": false, \"Amount\": 150, \"Status\": \"Approved\", \"InternalNotes\": \"Note\", \"EstimateRequestedDate\": \"2026-01-20\"},\n         {\"ManagementCompanyAsVendor\": true, \"Status\": \"Pending\", \"EstimateRequestedDate\": \"2026-01-26\", \"EstimateReceivedDate\": \"2026-01-27\"}\n       ],\n       \"JobDescription\": \"Sink is leaking.\",\n       \"LaborItems\": [\n         {\"Date\": \"2020-12-12\", \"Description\": \"Replace windows\", \"HoursWorked\": \"2.5\", \"UserId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b01\"},\n         {\"Date\": \"2020-12-12\", \"Description\": \"Paint doors\", \"HoursWorked\": \"4.25\", \"UserId\": \"d9009724-9f32-11ec-bc31-d46a96ab9b02\"}\n       ],\n       \"ManagementCompanyAsVendor\": false,\n       \"PermissionToEnter\": true,\n       \"Priority\": \"Normal\",\n       \"PurchaseOrderIds\": [\"1091593d-613b-43d0-b8f1-1cd0eac704e4\", \"4897dd96-7479-44ec-83a0-99b19936d607\"],\n       \"ScheduledEnd\": \"2021-01-15T20:30:46Z\",\n       \"ScheduledStart\": \"2021-01-15T16:30:46Z\",\n       \"Status\": \"New\",\n       \"VendorId\": \"8eb28538-c8f5-41e7-ac82-3f9609cceec9\",\n       \"VendorTrade\": \"Appliances\",\n       \"CustomFields\": {\n         \"a965e7d8-a17d-11ec-b909-0242ac120002\": \"a new value\",\n         \"454d8635-521e-4864-99fb-0bd6200d3a0f\": true,\n         \"c80d3dd1-9eba-45aa-803c-666280b8ff24\": 87.40,\n         \"3277c366-1783-42a9-b925-0bca2afbe391\": \"0e9a7b18-1778-4a03-bc1c-f913aeaef6bc\",\n         \"4f83a1bf-4e49-4463-8113-15c52f79243a\": [\"3f41feb4-413b-4a83-a58a-fdb4ad0d6205\", \"9bf83fd8-a20a-4c22-97d0-bf35173694b7\"]\n       }\n     }'\n"}],"responses":{"200":{"description":"Updated a Work Order","content":{"application/json":{"schema":{"properties":{"Id":{"type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec929e19","description":"Unique identifier of the updated work order","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular work order."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (Work Order Id) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Invalid value passed. Acceptable values for PermissionToEnter are: true, false, or n/a."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/work_orders/{WorkOrderId}/attachments":{"post":{"operationId":"createWorkOrderAttachment","summary":"Create Work Order Attachment","description":"Upload an attachment to a work order","tags":["Work Orders"],"parameters":[{"name":"WorkOrderId","in":"path","description":"The work order to which the file will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/work_orders/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/attachments' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --form 'File=@\"/path/to/file.pdf\"'\n"}],"requestBody":{"description":"Attachment object","required":true,"content":{"multipart/form-data":{"schema":{"properties":{"File":{"type":"string","description":"Filename.file-extension"},"FolderId":{"type":"string","format":"uuid","description":"Unique identifier of the folder to file the attachment under"}}},"example":{"File":"/path/to/file.pdf"}}}},"responses":{"201":{"description":"Uploaded an attachment","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the work order attachment","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/work_orders/{WorkOrderId}/attachments/{AttachmentId}":{"delete":{"operationId":"deleteWorkOrderAttachment","summary":"Delete Work Order Attachment","description":"Delete an attachment from a work order","tags":["Work Orders"],"parameters":[{"name":"WorkOrderId","in":"path","description":"Unique identifier of the work order that contains the attachment to be deleted","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}},{"name":"AttachmentId","in":"path","description":"Unique identifier of the attachment to be deleted from the work order","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-11c5-4e27-adc9-c75ff9ddc9d9"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request DELETE 'https://api.appfolio.com/api/v0/work_orders/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/attachments/57e04805-11c5-4e27-adc9-c75ff9ddc9d9' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"responses":{"204":{"description":"The request was successful. No content will be included in the response payload.","content":{"application/json":{"example":{}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to delete the attachment. Only the creator of the attachment can delete the attachment."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"The WorkOrderId or AttachmentId (or both) provided were not found. Please verify the WorkOrderId and AttachmentId and try again."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/work_orders/notes":{"get":{"operationId":"getWorkOrdersNotes","summary":"List All Work Order Notes","description":"Returns work order notes. Filter by `WorkOrderId` to return the notes for a single work order, or by `LastUpdatedAtFrom` to return notes across all work orders.","tags":["Work Orders"],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location -g \\\n     --request GET 'https://api.appfolio.com/api/v0/work_orders/notes?filters[WorkOrderId]=1abcde23-c543-456e-abc9-123456789cba\u0026filters[LastUpdatedAtFrom]=2020-12-15T16:30:46Z' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002'\n"}],"parameters":[{"name":"page","in":"query","description":"Optional pagination parameters. The default parameters are recommended but can be modified if a different sized response is desired.","style":"deepObject","schema":{"type":"object","default":{"number":1,"size":1000},"example":{"number":1,"size":10}},"required":false},{"name":"filters","in":"query","description":"Filters for work order notes. All GET requests must include a filter for `[WorkOrderId]` or `[LastUpdatedAtFrom]`.","style":"deepObject","schema":{"type":"object","properties":{"WorkOrderId":{"description":"Example: `filters[WorkOrderId]=1abcde23-c543-456e-abc9-123456789cba` \u003cbr\u003e Unique identifier of the work order. Filter the results based on a single value.","type":"string","format":"uuid"},"LastUpdatedAtFrom":{"description":"Example: `filters[LastUpdatedAtFrom]=2021-12-15T16:30:46Z` \u003cbr\u003e Returns work order note records that have been updated since the date provided. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ`, and the default time zone is Coordinated Universal Time (UTC).","type":"string","format":"date-time"}}},"required":false}],"responses":{"400":{"description":"Bad Request Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"code":400,"message":"The request was not processed due to invalid syntax."}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}},"200":{"description":"If the example response contains fields that AppFolio has not previously agreed to send to you, they will be omitted from the actual response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkOrders.Notes"}}}}}}},"/work_orders/{WorkOrderId}/notes":{"post":{"operationId":"createWorkOrderNote","summary":"Create Work Order Note","description":"Add a note to a work order","tags":["Work Orders"],"parameters":[{"name":"WorkOrderId","in":"path","description":"The work order to which the note will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request POST 'https://api.appfolio.com/api/v0/work_orders/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for work order\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the work order. A work order note cannot exceed `65,535` characters."}}},"example":{"Body":"This work order have scheduled a maintenance service on 11/11/2022"}}}},"responses":{"201":{"description":"Created a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the work order note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to access this API endpoint."}}}},"401":{"description":"Unauthorized Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"},"example":{"code":401,"message":"HTTP Basic: Access denied."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}},"/work_orders/{WorkOrderId}/notes/{Id}":{"patch":{"operationId":"updateWorkOrderNote","summary":"Update Work Order Note","description":"Update a work order's note","tags":["Work Orders"],"parameters":[{"name":"WorkOrderId","in":"path","description":"The work order to which the note will be attached","required":true,"schema":{"type":"string","format":"uuid","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8"}},{"name":"Id","in":"path","description":"Unique identifier of the note to update","required":true,"schema":{"type":"string","format":"uuid","example":"45e04805-01c4-4e39-adc9-c75ff9ddc8d6"}}],"x-codeSamples":[{"lang":"bash","label":"cURL","source":"curl --location --request PATCH 'https://api.appfolio.com/api/v0/work_orders/972b920c-e048-4a7b-b1f6-eddb6ad6d23c/notes/632b920c-e048-4a7b-b1f6-eddb6ad6d23c' \\\n     --header 'Authorization: Basic {Auth}' \\\n     --header 'X-AppFolio-Developer-ID: a965e7d8-a17d-11ec-b909-0242ac120002' \\\n     --header 'Content-Type: application/json' \\\n     --data-raw '{\n       \"Body\": \"sample notes for work order - updating\"\n     }'\n"}],"requestBody":{"description":"Note object","required":true,"content":{"application/json":{"schema":{"properties":{"Body":{"type":"string","description":"A brief informative message about the work order. A work order note cannot exceed `65,535` characters."}}},"example":{"Body":"This work order have scheduled a maintenance service on 11/30/2022 - Updated"}}}},"responses":{"200":{"description":"Updated a note","content":{"application/json":{"schema":{"properties":{"Id":{"description":"Unique identifier of the updated work order note","type":"string","example":"ac00dc0a-9f44-42f7-b01f-cfb2ec92ee19","format":"uuid"}}}}}},"403":{"description":"Forbidden Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"code":403,"message":"Insufficient permissions to update this particular note."}}}},"404":{"description":"Not Found Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"code":404,"message":"Requested parameter (Work Order Id or Note Id) not found."}}}},"422":{"description":"Unprocessable Entity Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnprocessableEntityError"},"example":{"code":422,"message":"Required parameter Body is missing."}}}},"500":{"description":"Unexpected Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnexpectedError"},"example":{"code":500,"message":"Something went wrong."}}}},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"code":503,"message":"Service unavailable. Please try again later."}}}},"533":{"description":"Data Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomerDataUnavailableError"},"example":{"code":533,"message":"Data unavailable. Please retry later."}}}}}}}},"components":{"securitySchemes":{"basic_auth":{"type":"http","scheme":"basic"}},"schemas":{"Error":{"type":"object","properties":{"code":{"type":"integer"},"message":{"type":"string"}}},"BadRequestError":{"type":"object","properties":{"code":{"type":"integer","description":"400"},"message":{"type":"string","description":"The request was not processed due to invalid syntax."}}},"UnauthorizedError":{"type":"object","properties":{"code":{"type":"integer","description":"401"},"message":{"type":"string","description":"HTTP Basic: Access denied."}}},"UnauthorizedOauthError":{"type":"object","properties":{"code":{"type":"integer","description":"401"},"message":{"type":"string","description":"HTTP Token: Access denied."}}},"ForbiddenError":{"type":"object","properties":{"code":{"type":"integer","description":"403"},"message":{"type":"string","description":"Insufficient permissions to access this API endpoint."}}},"NotFoundError":{"type":"object","properties":{"code":{"type":"integer","description":"404"},"message":{"type":"string","description":"The requested resource could not be found."}}},"UnprocessableEntityError":{"type":"object","properties":{"code":{"type":"integer","description":"422"},"message":{"type":"string","description":"The request was understood, but not processed due to semantic errors. Ensure that the parameters contain valid values."}}},"UnexpectedError":{"type":"object","properties":{"code":{"type":"integer","description":"500"},"message":{"type":"string","description":"The server encountered an unexpected condition that prevented a successful request."}}},"ServiceUnavailableError":{"type":"object","properties":{"code":{"type":"integer","description":"503"},"message":{"type":"string","description":"The server cannot handle the request due to overload or maintenance. Please try again later."}}},"CustomerDataUnavailableError":{"type":"object","properties":{"code":{"type":"integer","description":"533"},"message":{"type":"string","description":"Data is currently unavailable. Please try again later."}}},"ActionExecution":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the action execution"},"Action":{"type":"string","description":"The type of action that was executed","example":"start/inspections"},"ActionData":{"type":"object","description":"Data associated with the action execution. The structure varies by Action.\n#### start/inspections\n| Key                   | Type             | Description                                                                  |\n|-----------------------|------------------|------------------------------------------------------------------------------|\n| PropertyId            | string           | Unique identifier of the property                                            |\n| OccupancyId           | string           | Unique identifier of the occupancy                                           |\n| UnitId                | string           | Unique identifier of the unit                                                |\n| InspectionTemplateId  | string           | Identifier of the inspection template to use                                 |\n| InspectionPerformedBy | string           | Specifies who will conduct the inspection: can be 'Resident' or 'Technician' |\n| InspectionDateTime    | string           | ISO 8601 date and time when the inspection is scheduled                      |\n| AssignmentIds         | array of strings | Identifiers of assigned users or roles, [] if empty                          |\n","example":{"PropertyId":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","OccupancyId":"b2c3d4e5-f6a7-8901-bcde-f12345678901","UnitId":"c3d4e5f6-a7b8-9012-cdef-123456789012","InspectionTemplateId":"d4e5f6a7-b8c9-0123-defa-234567890123","InspectionPerformedBy":"Resident","InspectionDateTime":"2026-03-15T10:00:00Z","AssignmentIds":["e5f6a7b8-c9d0-1234-efab-345678901234","f6a7b8c9-d0e1-2345-fabc-456789012345"]}},"Status":{"type":"string","description":"Current status of the action execution.\n\n| Status | Description |\n|--------|-------------|\n| `pending` | The action execution is awaiting completion. |\n| `completed` | The action execution has been completed. Once completed, the action execution can no longer be updated. |\n| `failed` |  The action execution has failed. Requires ErrorMessage to be set. Cannot be updated once set to 'failed'. |","example":"pending"},"ErrorMessage":{"type":"string","description":"The error message describing why the action execution failed. Only present when `Status` is `failed`","example":"Failed to process"},"SubjectId":{"type":"string","description":"AppFolio identifier of the resource associated with the action","example":"d4f5a1c2-8b3e-4f6a-9c7d-2e1b0a3f5d8e"},"SubjectType":{"type":"string","description":"Type of the resource associated with the action.\n\n| Action | Required SubjectType |\n|--------|----------------------|\n| `start/inspections` | `Inspection` |","example":"Inspection"},"CreatedAt":{"type":"string","format":"date-time","description":"When the action execution was created"},"UpdatedAt":{"type":"string","format":"date-time","description":"When the action execution was last updated"}}},"ActionExecutions":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ActionExecution"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/action_executions?page[number]=2"}}},"ActionExecution.Update":{"title":"ActionExecution","type":"object","properties":{"Status":{"type":"string","description":"Updated status of the action execution.\n\n| Status | Description |\n|--------|-------------|\n| `pending` | The action execution is awaiting completion. |\n| `completed` | The action execution has been completed. Once completed, the action execution can no longer be updated. |\n| `failed` |  The action execution has failed. Requires ErrorMessage to be set. Cannot be updated once set to 'failed'. |","example":"completed"},"ErrorMessage":{"type":"string","description":"The error message describing why the action execution failed. Must be provided when setting `Status` to `failed`. Cannot be changed once `Status` is `failed`. Maximum 255 characters.","example":"Failed to process"},"SubjectId":{"type":"string","description":"AppFolio identifier of the resource created or affected by the action","example":"d4f5a1c2-8b3e-4f6a-9c7d-2e1b0a3f5d8e"}}},"AvidPaymentInfo":{"type":"object","properties":{"PayableId":{"type":"string","format":"uuid","description":"Unique identifier of the Payable with Avid payment info. Maps to the \"Id\" returned by the Payables endpoint."},"PaymentMethodCode":{"type":"integer","description":"The partner assigned id of the payment method type used for the payment. If provided, a \"PaymentMethodDescription\" must also be provided"},"PaymentMethodDescription":{"type":"string","example":"Check","description":"The partner assigned description of the payment method type used for the payment. Example: \"Check\". If provided, a \"PaymentMethodCode\" must also be provided"},"PaymentStatusCode":{"type":"integer","description":"The partner assigned id of the payment status for the payment. If provided, a \"PaymentStatusDescription\" must also be provided"},"PaymentStatusDescription":{"type":"string","example":"Cleared","description":"The partner assigned description of the payment status for the payment. Example: \"Cleared\". If provided, a \"PaymentStatusCode\" must also be provided"},"PaymentErrorDescription":{"type":"string","example":"Some error occurred","description":"The partner assigned description of the error that occurred while processing the payment. This field is expected to only be used when the payment status is \"Error\", and can be cleared by sending an empty string"},"Details":{"type":"array","description":"Array of details associated with the payment. Used to note split payments or multiple payment methods","items":{"$ref":"#/components/schemas/AvidPaymentInfoDetail"}}}},"AvidPaymentInfoDetail":{"type":"object","required":["ExternalPaymentDetailId"],"properties":{"ExternalPaymentDetailId":{"type":"integer","description":"The partner assigned identifier of the payment detail"},"PostingDate":{"type":"string","format":"date","description":"The posting date of the payment detail. If a payment detail for the provided ExternalPaymentDetailId does not yet exist, this value is required"},"Amount":{"type":"number","format":"decimal","description":"The dollar amount of the payment detail. If a payment detail for the provided ExternalPaymentDetailId does not yet exist, this value is required"},"PaymentMethodCode":{"type":"integer","description":"The partner assigned id of the payment method type used for the payment. If provided, a \"PaymentMethodDescription\" must also be provided"},"PaymentMethodDescription":{"type":"string","example":"Check","description":"The partner assigned description of the payment method type used for the payment. Example: \"Check\". If provided, a \"PaymentMethodCode\" must also be provided"},"PaymentStatusCode":{"type":"integer","description":"The partner assigned id of the payment status for the payment. If provided, a \"PaymentStatusDescription\" must also be provided"},"PaymentStatusDescription":{"type":"string","example":"Cleared","description":"The partner assigned description of the payment status for the payment. Example: \"Cleared\". If provided, a \"PaymentStatusCode\" must also be provided"}}},"AvidPaymentInfo.BulkCreate":{"title":"AvidPaymentInfo","required":["PayableId"],"allOf":[{"$ref":"#/components/schemas/AvidPaymentInfo"}]},"BankAccount":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the bank account","format":"uuid"},"AccountName":{"type":"string","description":"The name of the bank account","example":"Main Operating Bank Account"},"BankName":{"type":"string","description":"The name of the bank","example":"Local County Bank"},"LegalEntityName":{"type":"string","description":"The full legal name given to the business or individual owning the bank account","example":"Management Company, LLC"}}},"BankAccounts":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/BankAccount"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/bank_accounts?page[number]=2"}}},"BankAccount.BulkCreate":{"title":"Bank account","required":["ReferenceId","AccountNumber","AccountName","AccountType","BankName","RoutingNumber","BankAddress1","BankCity"],"allOf":[{"$ref":"#/components/schemas/BulkCreateBankAccount"}]},"BulkCreateBankAccount":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual bank accounts in the bulk-creation process."},"AccountNumber":{"type":"string","description":"Account number of the bank account"},"AccountName":{"type":"string","description":"The user-provided name for the bank account"},"AccountType":{"type":"string","enum":["Personal Checking","Personal Savings","Business Checking","Business Saving","Other"],"description":"The type of bank account\n#### Status Options\n| Options            | Description                                                                    |\n|--------------------|--------------------------------------------------------------------------------|\n| Personal Checking  | The bank account is a personal checking account                                |\n| Personal Savings   | The bank account is a personal savings account                                 |\n| Business Checking  | The bank account is a business checking account                                |\n| Business Saving    | The bank account is a business savings account                                 |\n| Other              | A BankAccountType was not stipulated by AppFolio is in use for the bank account|\n"},"BankName":{"type":"string","description":"Name of the bank associated with the the bank account"},"RoutingNumber":{"type":"string","description":"The routing number of the bank associated with the bank account"},"NextCheckNumber":{"type":"integer","description":"The number checks for this bank account should start at. Must be a positive integer (not zero)"},"BankAddress1":{"type":"string","description":"The primary street address of the bank associated with the bank account"},"BankAddress2":{"type":"string","description":"Additional street address information pertaining to the bank associated with the bank account"},"BankCity":{"type":"string","description":"The city where the bank associated with the bank account is located"},"BankState":{"type":"string","description":"The state where the bank associated with the bank account is located"},"BankZip":{"type":"string","description":"The zip code where the bank associated with the bank account is located"},"CompanyAddress1":{"type":"string","description":"The primary street address of the company. Will be printed on any blank checkstock"},"CompanyAddress2":{"type":"string","description":"Additional street address information of the company"},"CompanyCity":{"type":"string","description":"The city where the company is located. Must be provided if entering a company address"},"CompanyState":{"type":"string","description":"The state where the company is located. Must be provided if entering a company address"},"CompanyZip":{"type":"string","description":"The zip code where the company is located. Must be provided if entering a company address"},"CompanyNameOnChecks":{"type":"string","description":"The company name printed on checks issued from this bank account"}}},"BankAdjustment.BulkCreate":{"title":"Bank adjustment","required":["ReferenceId","Amount","BankAccountId","Date"],"allOf":[{"$ref":"#/components/schemas/BulkCreateBankAdjustment"}]},"BulkCreateBankAdjustment":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual bank adjustment in the bulk-creation process."},"Amount":{"type":"number","format":"decimal","example":23.33,"description":"The amount positive or negative for the bank adjustment. Valid format is \"DD.CC\", e.g. \"23.33\""},"BankAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the bank account related to the balance","example":"1bc8de4e-db50-4463-85fc-3a381f3d3e51"},"Date":{"type":"string","description":"The date of the bank adjustment. Used for reporting and reconciliation."},"Description":{"type":"string","description":"A brief description for the bank adjustment."}}},"BankStatement.BulkCreate":{"title":"Bank statement","required":["ReferenceId","BankAccountId","BankBalance","CheckRegisterBalance","CutoffDate"],"allOf":[{"$ref":"#/components/schemas/BulkCreateBankStatement"}]},"BulkCreateBankStatement":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual bank statements in the bulk-creation process."},"BankAccountId":{"type":"string","description":"Unique identifier of the bank account related to the balance","format":"uuid"},"BankBalance":{"type":"string","format":"decimal","description":"The cleared balance from the reconciliation","example":"15000.00"},"CheckRegisterBalance":{"type":"string","format":"decimal","description":"The book balance from the reconciliation, or the cleared balance minus any uncleared items","example":"14850.00"},"CutoffDate":{"type":"string","description":"The date of reconciliation for the cleared balance (bank balance). Valid format is \"YYYY-MM-DD\" e.g. \"2022-03-03\"","format":"date","example":"2022-03-03"}}},"CAUnit":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the CA unit","format":"uuid"},"Name":{"type":"string","description":"The name of the CA unit"},"AssociationId":{"type":"string","description":"Unique identifier of the CA associated with the unit","format":"uuid"},"CurrentOccupancyId":{"type":"string","description":"Unique identifier of the current occupancy associated with the CA unit","format":"uuid"},"CustomFields":{"$ref":"#/components/schemas/CustomFields.Attribute"},"Address1":{"type":"string","description":"The primary street address of the CA unit"},"Address2":{"type":"string","description":"Additional street address information pertaining to the CA unit"},"City":{"type":"string","description":"The city where the CA unit is located"},"RenterOccupied":{"type":"boolean","description":"Indicates whether or not the CA unit is occupied by a renter"},"State":{"type":"string","description":"The state where the CA unit is located"},"Zip":{"type":"string","description":"The zip code where the CA unit is located"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the CA unit's details were last updated"}}},"CAUnits":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CAUnit"}},"next_page_path":{"example":"/api/v0/ca/units?page[number]=2","description":"The URL path to the next page of responses"}}},"CAHomeowner":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the CA homeowner","format":"uuid"},"UnitId":{"type":"string","description":"Unique identifier of the unit associated with the CA homeowner","format":"uuid"},"AssociationId":{"type":"string","description":"Unique identifier of the association associated with the CA homeowner","format":"uuid"},"OccupancyId":{"type":"string","description":"Unique Identifier of a CA occupancy of one or more CA homeowners","format":"uuid"},"FirstName":{"type":"string","description":"The first name of the CA homeowner"},"MailingAddress":{"type":"array","description":"The homeowner's mailing address","items":{"$ref":"#/components/schemas/CaHomeowner.Address"}},"MiddleName":{"type":"string","description":"The middle name of the CA homeowner"},"LastName":{"type":"string","description":"The last name of the CA homeowner"},"PhoneNumber":{"deprecated":true,"type":"string","description":"The CA homeowner's primary phone number"},"PhoneNumbers":{"type":"array","description":"The CA homeowner's phone numbers","items":{"$ref":"#/components/schemas/CAHomeowner.PhoneNumbers"}},"Status":{"type":"string","description":"The status of the Community Association homeowner\n#### Status Options\n| Options       | Description                                                          | Notes |\n|---------------|----------------------------------------------------------------------|-------|\n| Current       | The homeowner currently resides within the Community Association     |\n| Past          | The homeowner resided within the Community Association in the past   |\n| Future        | The homeowner will reside in the Community Association in the future |\n| Notice        | The homeowner has communicated intent to vacate the residency        |\n| Foreclosure   | A foreclosure was filed against the homeowner                        |If a homeowner's status is changed to `Foreclosure`, their status will be updated and considered as both their previous status and foreclosure status. For example, if a `Current` homeowner's status is changed to `Foreclosure`, filtering for \"Current\" will return the homeowner with a status of `Foreclosure`.|\n"},"Email":{"deprecated":true,"type":"string","description":"The CA homeowner's primary email address"},"Emails":{"type":"array","description":"The CA homeowner's emails","items":{"$ref":"#/components/schemas/CAHomeowner.Emails"}},"InCollections":{"type":"boolean","description":"Indicates whether or not the CA Homeowner is in collections"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the CA homeowner's details were last updated"},"Link":{"type":"string","format":"uri","description":"A link to the occupancy page of the homeowner"}}},"CAHomeowner.PhoneNumbers":{"properties":{"AdditionalDetails":{"type":"string","description":"Additional detailed information pertaining to the phone number associated with the CA homeowner"},"IsPrimary":{"type":"boolean","description":"Indicates whether the phone number provided is the CA homeowner’s main contact number"},"Label":{"type":"string","enum":["Fax","Home","Mobile","Office"],"description":"The label of the phone number, e.g. 'Home'"},"Number":{"type":"string","description":"The CA homeowner's phone number"}}},"CAHomeowner.Emails":{"properties":{"EmailAddress":{"type":"string","description":"The email address"},"IsPrimary":{"type":"boolean","description":"Indicates whether the email address provided is the CA homeowner’s primary email address"}}},"CAHomeowner.Status":{"title":"Status","type":"string","description":"The status can be a combination of any of the following values: `Current`, `Past`, `Future`, `Notice`, `Foreclosure`. Multiple values should be separated by commas. \u003cbr\u003e Example: `filters[Status]=Current,Future` \u003cbr\u003e The status of the Community Association homeowner\n#### Status Options\n| Options       | Description                                                          | Notes |\n|---------------|----------------------------------------------------------------------|-------|\n| Current       | The homeowner currently resides within the Community Association     |\n| Past          | The homeowner resided within the Community Association in the past   |\n| Future        | The homeowner will reside in the Community Association in the future |\n| Notice        | The homeowner has communicated intent to vacate the residency        |\n| Foreclosure   | A foreclosure was filed against the homeowner                        |If a homeowner's status is changed to `Foreclosure`, their status will be updated and considered as both their previous status and foreclosure status. For example, if a `Current` homeowner's status is changed to `Foreclosure`, filtering for \"Current\" will return the homeowner with a status of `Foreclosure`.|\n"},"CaHomeowner.Address":{"properties":{"Address1":{"type":"string","description":"The primary street address of the homeowner"},"Address2":{"type":"string","description":"The secondary street address of the homeowner"},"City":{"type":"string","description":"The city where the homeowner resides"},"State":{"type":"string","description":"The state where the homeowner resides"},"PostalCode":{"type":"string","description":"The postal code where the homeowner resides"},"CountryCode":{"type":"string","description":"The country code of the homeowner (e.g. \"US\" for United States)"}}},"CAHomeowners":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CAHomeowner"}},"next_page_path":{"example":"/api/v0/ca/homeowners?page[number]=2","description":"The URL path to the next page of responses"}}},"CABankBalances":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CABankBalance"}},"next_page_path":{"example":"/api/v0/ca/bank_balances?page[number]=2","description":"The URL path to the next page of responses"}}},"CABankBalance":{"type":"object","properties":{"BankAccountId":{"type":"string","description":"Unique identifier of the CA bank account","format":"uuid"},"AssociationId":{"type":"string","description":"Unique identifier of the Community Association attached to the bank account","format":"uuid"},"BankAccountName":{"type":"string","description":"The name of the CA's bank account "},"BankAccountNumber":{"type":"string","description":"Unique reference number of the CA bank account"},"BankAccountType":{"oneOf":[{"type":"null"},{"type":"string"}],"enum":["Personal Checking","Personal Savings","Business Checking","Business Saving","Other",null],"description":"The type of bank account used for the Community Association\n#### Status Options\n| Options            | Description                                                                       |\n|--------------------|-----------------------------------------------------------------------------------|\n| Personal Checking  | The CA bank account is a personal checking account                                |\n| Personal Savings   | The CA bank account is a personal savings account                                 |\n| Business Checking  | The CA bank account is a business checking account                                |\n| Business Saving    | The CA bank account is a business savings account                                 |\n| Other              | A BankAccountType was not stipulated by AppFolio is in use for the CA bank account|\n| null               | No BankAccountType was entered for the CA Bank                                    |\n"},"Balance":{"type":"number","format":"float","example":2345.0,"description":"The  CA bank account's most recent statement balance"},"BalanceAsOf":{"type":"string","format":"date","description":"The date of the CA bank account's most recent statement balance"},"GlAccountIds":{"type":"array","example":["ab0964fb-bc9b-4f9a-b649-01cfe309cb52","ac0964fb-bc9b-4f9a-b649-01cfe309cb52"],"description":"Unique identifier of the general ledger account(s) associated with the CA bank account","format":"uuid"},"Reserve":{"type":"boolean","description":"Indicates whether or not the CA bank account is a reserve bank account"}}},"CABoardMember":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the homeowner on the Board of Directors","format":"uuid"},"AssociationId":{"type":"string","description":"Unique identifier of the association related to the Board of Directors","format":"uuid"},"Email":{"deprecated":true,"type":"string","description":"The Board of Director member's primary email address"},"Emails":{"type":"array","description":"The Board of Director member's emails","items":{"$ref":"#/components/schemas/CABoardMember.Emails"}},"FirstName":{"type":"string","description":"The first name of the Board of Director member"},"LastName":{"type":"string","description":"The last name of the Board of Director member"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the CA Board of Director's details were last updated"},"MiddleName":{"type":"string","description":"The middle name of the Board of Director member"},"PhoneNumber":{"deprecated":true,"type":"string","description":"The Board of Director member's primary phone number"},"PhoneNumbers":{"type":"array","description":"The Board of Director member's phone numbers","items":{"$ref":"#/components/schemas/CABoardMember.PhoneNumbers"}},"UnitId":{"type":"string","description":"Unique identifier of the unit related to the Board of Directors","format":"uuid"},"BoardMemberships":{"$ref":"#/components/schemas/CABoardMember.BoardMemberships"}}},"CABoardMember.PhoneNumbers":{"properties":{"AdditionalDetails":{"type":"string","description":"Additional detailed information pertaining to the phone number associated with the Board of Director member"},"IsPrimary":{"type":"boolean","description":"Indicates whether the phone number provided is the Board of Director member’s main contact number"},"Label":{"type":"string","enum":["Fax","Home","Mobile","Office"],"description":"The label of the phone number, e.g. 'Home'"},"Number":{"type":"string","description":"The Board of Director member's phone number"}}},"CABoardMember.Emails":{"properties":{"EmailAddress":{"type":"string","description":"The email address"},"IsPrimary":{"type":"boolean","description":"Indicates whether the email address provided is the Board of Director member’s primary email address"}}},"CABoardMember.BoardMemberships":{"title":"BoardMembership","type":"array","description":"Array containing details about Board of Director memberships\n#### Board membership attributes\n| Attributes    | Type           | Description                                                                                                           |\n|---------------|----------------|-----------------------------------------------------------------------------------------------------------------------|\n| Role          | String         | The Board of Director member's role. Valid roles include President, Vice President, Treasurer, Secretary/Treasurer, Board Member or other.|\n| StartDate     | Date           | The Board of Director member's term start date                                                                        |\n| EndDate       | Date           | The Board of Director member's term end date                                                                          |\n","items":{"type":"object","properties":{"Role":{"type":"string","description":"The Board of Director member's role."},"StartDate":{"type":"string","format":"date","description":"The Board of Director member's term start date"},"EndDate":{"type":"string","format":"date","description":"The Board of Director member's term end date"}}},"example":[{"Role":"President","StartDate":"2022-05-01","EndDate":"2023-05-01"}]},"CABoardMembers":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CABoardMember"}},"next_page_path":{"example":"/api/v0/ca/board_members?page[number]=2","description":"The URL path to the next page of responses"}}},"CARenter":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the CA renter","format":"uuid"},"AssociationId":{"type":"string","description":"Unique identifier of the association related to the CA renter","format":"uuid"},"Email":{"deprecated":true,"type":"string","description":"The CA renter's primary email address"},"Emails":{"type":"array","description":"The CA renter's emails","items":{"$ref":"#/components/schemas/CARenter.Emails"}},"FirstName":{"type":"string","description":"The first name of the CA renter"},"LastName":{"type":"string","description":"The last name of the CA renter"},"PhoneNumber":{"deprecated":true,"type":"string","description":"The CA renter's primary phone number"},"PhoneNumbers":{"type":"array","description":"The CA renter's phone numbers","items":{"$ref":"#/components/schemas/CARenter.PhoneNumbers"}},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"Returns the CA renters records that have been updated since the date provided. The default time zone is Coordinated Universal Time (UTC)."},"LeaseEndDate":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the CA renter's lease ends"},"LeaseStartDate":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the CA renter's lease starts"},"UnitId":{"type":"string","description":"Unique identifier of the unit related to the CA renter","format":"uuid"}}},"CARenter.PhoneNumbers":{"properties":{"AdditionalDetails":{"type":"string","description":"Additional detailed information pertaining to the phone number associated with the CA renter"},"IsPrimary":{"type":"boolean","description":"Indicates whether the phone number provided is the CA renter’s main contact number"},"Label":{"type":"string","enum":["Fax","Home","Mobile","Office"],"description":"The label of the phone number, e.g. 'Home'"},"Number":{"type":"string","description":"The CA renter's phone number"}}},"CARenter.Emails":{"properties":{"EmailAddress":{"type":"string","description":"The email address"},"IsPrimary":{"type":"boolean","description":"Indicates whether the email address provided is the CA renter’s primary email address"}}},"CARenters":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CARenter"}},"next_page_path":{"example":"/api/v0/ca/renters?page[number]=2","description":"The URL path to the next page of responses"}}},"CARule":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the CA rule","format":"uuid"},"AssociationId":{"type":"string","description":"Unique identifier of the association related to the rule(s)","format":"uuid"},"RuleName":{"type":"string","description":"The name of the CA rule"},"RuleDescription":{"type":"string","description":"A brief summary or description of the CA rule"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The last time a CA rule’s details were updated by an AppFolio Property Manager user"}}},"CARules":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CARule"}},"next_page_path":{"example":"/api/v0/ca/rules?page[number]=2","description":"The URL path to the next page of responses"}}},"CAViolation":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the CA violation","format":"uuid"},"AssociationId":{"type":"string","description":"Unique identifier of the association related to the violation(s)","format":"uuid"},"CreatedAt":{"type":"string","description":"The date the CA violation was created"},"Description":{"type":"string","description":"A brief summary or description of the CA violation"},"InspectionDate":{"type":"string","description":"The date of the CA unit’s inspection"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The last time a CA violation’s details were updated by an AppFolio Property Manager user"},"MarkedForEscalation":{"type":"boolean","description":"Indicates whether or not the CA violation was marked for escalation"},"OccupancyId":{"type":"string","description":"Unique identifier of the occupancy associated with the CA violation","format":"uuid"},"Status":{"type":"string","enum":["In Progress","In Dispute","Corrected","On Hold"],"description":"Indicates the current status of the CA violation\n#### Status Options\n| Options          | Description                                                          |\n|------------------|----------------------------------------------------------------------|\n| In Progress      | The processing of the CA violation is in progress                    |\n| In Dispute       | The CA violation is being disputed by the accused party              |\n| Corrected        | The offense resulting in the CA violation has been corrected         |\n| On Hold          | The proceeding pertaining to the CA violation has been placed on hold|                                                                                                                                         |\n"},"UnitId":{"type":"string","description":"Unique identifier of the unit associated with the CA violation","format":"uuid"},"ViolatedRuleId":{"type":"string","description":"Unique identifier of the CA rule that was violated","format":"uuid"}}},"CAViolations":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CAViolation"}},"next_page_path":{"example":"/api/v0/ca/violations?page[number]=2","description":"The URL path to the next page of responses"}}},"CAViolations.Create":{"type":"object","title":"CAViolation","required":["InspectionDate","Status","UnitId"],"properties":{"Description":{"type":"string","description":"A brief summary or description of the CA violation"},"InspectionDate":{"type":"string","description":"The date of the CA unit’s inspection"},"MarkedForEscalation":{"type":"boolean","description":"Indicates whether or not the CA violation was marked for escalation"},"UnitId":{"type":"string","description":"Unique identifier of the unit associated with the CA violation","format":"uuid"},"ViolatedRuleId":{"type":"string","description":"Unique identifier of the CA rule that was violated","format":"uuid"},"Status":{"type":"string","enum":["In Progress","In Dispute","Corrected","On Hold"],"description":"Indicates the current status of the CA violation\n#### Status Options\n| Options          | Description                                                          |\n|------------------|----------------------------------------------------------------------|\n| In Progress      | The processing of the CA violation is in progress                    |\n| In Dispute       | The CA violation is being disputed by the accused party              |\n| Corrected        | The offense resulting in the CA violation has been corrected         |\n| On Hold          | The proceeding pertaining to the CA violation has been placed on hold|                                                                                                                                         |\n"}}},"CAViolations.Update":{"type":"object","title":"CAViolation","properties":{"Description":{"type":"string","description":"A brief summary or description of the CA violation"},"InspectionDate":{"type":"string","description":"The date of the CA unit’s inspection"},"MarkedForEscalation":{"type":"boolean","description":"Indicates whether or not the CA violation was marked for escalation"},"UnitId":{"type":"string","description":"Unique identifier of the unit associated with the CA violation","format":"uuid"},"ViolatedRuleId":{"type":"string","description":"Unique identifier of the CA rule that was violated","format":"uuid"},"Status":{"type":"string","enum":["In Progress","In Dispute","Corrected","On Hold"],"description":"Indicates the current status of the CA violation\n#### Status Options\n| Options          | Description                                                          |\n|------------------|----------------------------------------------------------------------|\n| In Progress      | The processing of the CA violation is in progress                    |\n| In Dispute       | The CA violation is being disputed by the accused party              |\n| Corrected        | The offense resulting in the CA violation has been corrected         |\n| On Hold          | The proceeding pertaining to the CA violation has been placed on hold|                                                                                                                                         |\n"}}},"Charge":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the charge","example":"630964fb-bc9b-4f9a-b649-01cfe309cb52","format":"uuid"},"AmountDue":{"type":"string","format":"decimal","example":"1250.00","description":"The current amount outstanding, and/or future amounts not yet paid"},"ChargedOn":{"type":"string","format":"date","example":"2022-03-03","description":"`ChargedOn` dates from the past indicate an outstanding charge(s) that have not yet been paid that are \"owed.\"\u003cbr /\u003e\n`ChargedOn` dates in the future indicate upcoming charge(s) during the next monthly period.\n\nThe endpoint will return all currently outstanding charges with their respective amounts and `ChargedOn` date. The endpoint also looks ahead to the next calendar month, and returns any un-posted recurring charges (slated to be posted in that month), as well as any one-time charges that have been posted in advance.\n\nExample scenario:\u003cbr /\u003e\nRent is $1000 a month. Grant currently owes $500 in rent for April.\u003cbr /\u003e\nGrant will owe $1000 on May 1st for that month's rent.\u003cbr /\u003e\nIf the endpoint was hit on April 13th, there would be two results for that occupancy.\u003cbr /\u003e\n$500 with a `ChargedOn` date of April 1st.\u003cbr /\u003e\n$1000 with a `ChargedOn` date of May 1st.\u003cbr /\u003e\n"},"Description":{"type":"string","description":"A brief summary or description of the charge"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the General Ledger Account associated with the charge","example":"630964fb-bc9b-4f9a-b649-01cfe309ccc2"},"OccupancyId":{"type":"string","format":"uuid","description":"Unique identifier of the occupancy associated with the charge","example":"bbb964fb-bc9b-4f9a-b649-01cfe309ccc2"}}},"Charges":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Charge"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/charges?page[number]=2"}}},"Charge.Create":{"type":"object","title":"Charge","required":["AmountDue","ChargedOn","Description","GlAccountId","OccupancyId"],"properties":{"AmountDue":{"type":"string","format":"decimal","example":"1250.00","description":"The dollar amount of the charge"},"ChargedOn":{"type":"string","format":"date","example":"2022-03-03","description":"`ChargedOn` dates from the past indicate an outstanding charge that has not yet been paid that is \"owed.\"\n\n`ChargedOn` dates in the future indicate an upcoming charge during the next monthly period.\n"},"PostedOn":{"type":"string","format":"date","example":"2022-03-01","description":"For accrual accounting only. The date the charge will appear on financial reports (such as the general ledger) when run on an accrual basis. When accrual accounting is enabled and PostedOn is left off the request or null, this value will match the provided ChargedOn date. When accrual accounting is disabled this value is ignored and the posting date matches ChargedOn."},"Description":{"type":"string","description":"A brief summary or description of the charge"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the general ledger account associated with the charge","example":"630964fb-bc9b-4f9a-b649-01cfe309ccc2"},"OccupancyId":{"type":"string","format":"uuid","description":"Unique identifier of the occupancy associated with the charge","example":"bbb964fb-bc9b-4f9a-b649-01cfe309ccc2"}}},"Charge.BulkCreate":{"type":"object","title":"Charge","required":["AmountDue","ChargedOn","GlAccountId","OccupancyId","ReferenceId"],"properties":{"AmountDue":{"type":"string","format":"decimal","example":"1250.00","description":"The dollar amount of the charge"},"ChargedOn":{"type":"string","format":"date","example":"2022-03-03","description":"`ChargedOn` dates from the past indicate an outstanding charge that has not yet been paid that is \"owed.\"\n\n`ChargedOn` dates in the future indicate an upcoming charge during the next monthly period.\n"},"PostedOn":{"type":"string","format":"date","example":"2022-03-01","description":"For accrual accounting only. The date the charge will appear on financial reports (such as the general ledger) when run on an accrual basis. When accrual accounting is enabled and PostedOn is left off the request or null, this value will match the provided ChargedOn date. When accrual accounting is disabled this value is ignored and the posting date matches ChargedOn."},"Description":{"type":"string","description":"A brief summary or description of the charge"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the general ledger account associated with the charge","example":"630964fb-bc9b-4f9a-b649-01cfe309ccc2"},"OccupancyId":{"type":"string","format":"uuid","description":"Unique identifier of the occupancy associated with the charge","example":"bbb964fb-bc9b-4f9a-b649-01cfe309ccc2"},"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual charges in the bulk-creation of charges."}}},"RentalApplication.BulkCreate":{"type":"object","title":"RentalApplication","required":["Applicant","DesiredMoveInDate","ReferenceId","Status","UnitId"],"properties":{"Applicant":{"type":"object","description":"The applicant associated with the rental application","required":["DateOfBirth","FirstName","LastName","ResidentialHistory","TaxPayerId","Type"],"properties":{"AdditionalIncomes":{"type":"array","description":"The applicant's additional incomes","items":{"$ref":"#/components/schemas/RentalApplication.BulkCreate.AdditionalIncome"}},"DateOfBirth":{"type":"string","format":"date","description":"The date of birth of the applicant"},"DriversLicenseNumber":{"type":"string","description":"The applicant's driver's license number. Maximum 150 characters."},"DriversLicenseState":{"type":"string","description":"The applicant's driver's license state. Only valid US state/territory mailing abbreviations are accepted."},"Emails":{"type":"array","description":"The applicant's email addresses","items":{"$ref":"#/components/schemas/RentalApplication.BulkCreate.Email"}},"EmploymentHistory":{"type":"array","description":"The applicant's employment history","items":{"$ref":"#/components/schemas/RentalApplication.BulkCreate.EmploymentHistory"}},"ResidentialHistory":{"type":"array","description":"The applicant's residential history","items":{"$ref":"#/components/schemas/RentalApplication.BulkCreate.ResidentialHistory"}},"FirstName":{"type":"string","description":"The first name of the applicant"},"IsPrimaryTenant":{"type":"boolean","description":"Indicates whether the applicant is the primary tenant on the rental application"},"LastName":{"type":"string","description":"The last name of the applicant"},"MiddleName":{"type":"string","description":"The middle name of the applicant. Either `MiddleName` or `NoMiddleName` is required."},"NoMiddleName":{"type":"boolean","description":"Indicates that the applicant has no middle name. Either `MiddleName` or `NoMiddleName` is required."},"Pets":{"type":"array","description":"The applicant's pets","items":{"$ref":"#/components/schemas/RentalApplication.BulkCreate.Pet"}},"PhoneNumbers":{"type":"array","description":"The applicant's phone numbers","items":{"$ref":"#/components/schemas/RentalApplication.BulkCreate.PhoneNumber"}},"Questionnaire":{"type":"array","description":"The applicant's questionnaire","items":{"$ref":"#/components/schemas/RentalApplication.BulkCreate.Questionnaire"}},"Salutation":{"type":"string","description":"The applicant's salutation.","enum":["Mr.","Dr.","Ms.","Mrs.","Mr. \u0026 Mrs."]},"Suffix":{"type":"string","description":"The applicant's suffix. Maximum 255 characters."},"TaxPayerId":{"type":"string","description":"The tax identification number of the applicant. This field accepts either a Social Security Number (SSN) or an Individual Taxpayer Identification Number (ITIN). Maximum 150 characters."},"Type":{"type":"string","enum":["Financially Responsible","Other Occupant","Co-signer"],"description":"The type of the applicant"}}},"Dependents":{"type":"array","description":"Contains details about any dependents of the applicant","items":{"$ref":"#/components/schemas/RentalApplication.BulkCreate.Dependent"}},"RequestedBackgroundReport":{"type":"boolean","description":"Indicates whether the applicant has requested a copy of their background check report"},"DesiredMoveInDate":{"type":"string","format":"date","description":"The date the applicant wishes to move in"},"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual rental applications in the bulk-creation of rental applications."},"RentalApplicationGroupReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer to associate this rental application with other rental applications submitted in the same group."},"Status":{"type":"string","enum":["new","decision_pending","approved","denied","canceled","in_review","info_needed","in_screening"],"description":"The rental application's status"},"StatusReason":{"type":"string","description":"The reason for the `Status` of the rental application"},"SubmittedAt":{"type":"string","format":"date-time","description":"The date and time the rental application was submitted"},"UnitId":{"type":"string","format":"uuid","description":"Unique identifier of the unit associated with the rental application"}}},"CommunityAssociation":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the Community Association","format":"uuid"},"Name":{"type":"string","description":"The name of the Community Association"},"Address1":{"type":"string","description":"The primary address of the Community Association"},"Address2":{"type":"string","description":"The secondary address of the Community Association"},"City":{"type":"string","description":"The city where the Community Association is located"},"State":{"type":"string","description":"The state where the Community Association is located"},"Zip":{"type":"string","description":"The zip code where the Community Association is located"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the Community Association's details were last updated"},"CustomFields":{"$ref":"#/components/schemas/CustomFields.Attribute"}}},"CommunityAssociations":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CommunityAssociation"}},"next_page_path":{"example":"/api/v0/ca/associations?page[number]=2","description":"The URL path to the next page of responses"}}},"ConnectedDatabase":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the database. This can be used as a `X-AppFolio-Database-ID` header.","format":"uuid"},"CompanyName":{"type":"string","description":"The company name of the database"},"ConnectedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the database was connected to you"},"Domain":{"type":"string","example":"fake_domain.appfolio.com","description":"The domain of the database"}}},"ConnectedDatabases":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ConnectedDatabase"}},"next_page_path":{"example":"/api/v0/connected_databases?page[number]=2","description":"The URL path to the next page of responses"}}},"CorporateEntity":{"type":"object","properties":{"Id":{"type":"string","example":"3245edfe-a17d-11ec-b909-0242ac120002","description":"Unique identifier of the corporate entity","format":"uuid"},"DisplayName":{"type":"string","example":"Acme Corporation","description":"The display name of the corporate entity"},"Hidden":{"type":"boolean","description":"Indicates whether or not the corporate entity is hidden by an AppFolio Property Manager user"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the corporate entity's details were last updated"},"HiddenAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the corporate entity was hidden. Null if not hidden."}}},"CorporateEntities":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CorporateEntity"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/corporate_entities?page[number]=2"}}},"CorporateEntity.Attachments":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CorporateEntity.Attachment"}},"next_page_path":{"example":"/api/v0/corporate_entities/attachments?page[number]=2","description":"The URL path to the next page of responses"}}},"CorporateEntity.Attachment":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the attachment"},"Name":{"type":"string","description":"The name given to describe the attachment"},"ContentType":{"type":"string","description":"The content type of the corporate entity attachment.","example":"img/jpg or application/pdf"},"CreatedAt":{"type":"string","format":"date-time","description":"The date and time the corporate entity attachment was created by an AppFolio Property Manager user"},"EntityId":{"type":"string","format":"uuid","description":"Unique identifier of the corporate entity associated with the attachment"},"URL":{"type":"string","description":"The link to download the file in the attachment"}}},"CustomField":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the custom field","format":"uuid"},"Name":{"type":"string","description":"The name of the custom field"},"EntityType":{"type":"string","description":"The type of entity for which the custom field was created. Entity types include properties, units, associations, and others."},"EntitySubType":{"type":"string","description":"The sub-type of the entity for which the custom field was created. For example, a property entity’s sub-type could be “Single Family.” If `EntitySubType` is null, the field applies to all possible entity sub-types."},"Instruction":{"type":"string","description":"Any additional instructions or clarification relating to the custom field"},"DefaultValue":{"type":"string","description":"The default value set for the custom attribute. If `DefaultValue` is null, no default value was set for this custom field."},"Required":{"type":"boolean","description":"Indicates whether or not the custom attribute was marked as required by the AppFolio Property Manager user"},"Type":{"type":"string","enum":["boolean","currency","date","decimal","select","select_multiple","email","link","number","percent","phone_number","text_line"],"example":"text_line","description":"The type of custom attribute. Valid values include Boolean, Currency, Date, Decimal, Select, Select Multiple, Email, Link, Number, Percent, Phone Number and Text.\n#### Custom Attribute Types\n| Attribute Type  | Description                                                                 |\n|-----------------|-----------------------------------------------------------------------------|\n| Boolean         |  The custom attribute is a boolean                                          |\n| Currency        |  The custom attribute is a currency value                                   |\n| Date            |  The custom attribute is a date value                                       |\n| Decimal         |  The custom attribute is a decimal type                                     |\n| Select          |  The custom attribute contains an option from a select menu                 |\n| Select Multiple |  The custom attribute contains an array of options from a select menu       |\n| E-mail          |  The custom attribute is an e-mail string                                   |\n| Link            |  The custom attribute is a link string                                      |\n| Percent         |  The custom attribute is a percent                                          |\n| Phone Number    |  The custom attribute is a phone-number string                              |\n| Text Line       |  The custom attribute is a text string                                      |\n"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the custom field's details were last updated"},"Options":{"type":"array","description":"The options(s) set for the custom attribute. If `Type` is set to `Select` or `Select Multiple`, several values can be present.","items":{"properties":{"OptionId":{"type":"string","format":"uuid","description":"Unique identifier of the single select option"},"OptionValue":{"type":"string","description":"The value of the single select option"}}}}}},"CustomFields":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CustomField"}},"next_page_path":{"example":"/api/v0/custom_fields?page[number]=2","description":"The URL path to the next page of responses"}}},"CustomFields.Attribute":{"type":"object","description":"The custom fields for the associated entity","properties":{"CustomFieldId":{"type":"object","description":"Unique identifier of the custom field. `CustomFieldId` is a data object containing details about the custom field.","properties":{"Name":{"type":"string","description":"The name of the custom field"},"Type":{"type":"string","enum":["boolean","currency","date","decimal","select","select_multiple","email","link","number","percent","phone_number","text_line"],"example":"text_line","description":"The type of custom attribute. Valid values include Boolean, Currency, Date, Decimal, Select, Select Multiple, Email, Link, Number, Percent, Phone Number and Text.\n#### Custom Attribute Types\n| Attribute Type  | Description                                                                 |\n|-----------------|-----------------------------------------------------------------------------|\n| Boolean         |  The custom attribute is a boolean                                          |\n| Currency        |  The custom attribute is a currency value                                   |\n| Date            |  The custom attribute is a date value                                       |\n| Decimal         |  The custom attribute is a decimal type                                     |\n| Select          |  The custom attribute contains an option from a select menu                 |\n| Select Multiple |  The custom attribute contains an array of options from a select menu       |\n| E-mail          |  The custom attribute is an e-mail string                                   |\n| Link            |  The custom attribute is a link string                                      |\n| Percent         |  The custom attribute is a percent                                          |\n| Phone Number    |  The custom attribute is a phone-number string                              |\n| Text Line       |  The custom attribute is a text string                                      |\n"},"Value":{"type":"string","description":"The value(s) set for the custom field. The `Value` can be a `DefaultValue` or a custom field value set at creation, or `null`, indicating that no `DefaultValue` or custom field value was set.\n* If there's a `DefaultValue` but no custom attribute value, the key's value is the DefaultValue.\n\n* If a custom attribute value exists, the key's value is set to that custom attribute value, as per the current functionality.\n\n* If Type is set to \"select_multiple\", several option objects can be present.\n\n* If Type is set to \"select\", an option object can be present.\n","properties":{"OptionId":{"type":"string","format":"uuid","description":"Unique identifier of the single select option"},"OptionValue":{"type":"string","description":"The value of the single select option"}}}}}}},"CustomFields.UpdateAttribute":{"type":"object","description":"The custom fields for the associated entity","properties":{"CustomFieldId":{"type":"object","description":"The value of the `CustomField` to update. Ensure the value set for `CustomFieldId` matches the type that was set for the `CustomField` at creation.\nFor example, if `boolean` is the type set for the `CustomField` associated with this `CustomFieldId`, the value set here must be either `true` or `false`. *Note*: To clear the value of a `CustomField`, set `CustomFieldId` to `null` in the PATCH request. For array-type custom fields (select_multiple), use an empty array `[]` or empty string `\"\"` instead of `null`, as `null` will be ignored.\n"}}},"DelinquentCharge":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the delinquent charge","example":"630964fb-bc9b-4f9a-b649-01cfe309cb52","format":"uuid"},"AmountDue":{"type":"string","format":"decimal","example":"1250.00","description":"The current amount outstanding for the delinquent charge"},"ChargedOn":{"type":"string","format":"date","example":"2022-03-03","description":"`ChargedOn` dates from the past indicate an outstanding charge(s) that have not yet been paid that are \"owed.\"\n\nThe endpoint will return all currently outstanding charges with their respective amounts and `ChargedOn` date.\n"},"Description":{"type":"string","description":"A brief summary or description of the delinquent charge"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the general ledger account associated with the delinquent charge","example":"630964fb-bc9b-4f9a-b649-01cfe309ccc2"},"OccupancyId":{"type":"string","format":"uuid","description":"Unique identifier of the occupancy associated with the delinquent charge","example":"bbb964fb-bc9b-4f9a-b649-01cfe309ccc2"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-10-27T11:33:35Z","description":"The last time the delinquent charge was updated. On the date the charge becomes delinquent, this value will always be the current time."},"Subsidy":{"type":"boolean","description":"Indicates whether or not the delinquent charge is subsidized"}}},"DelinquentCharges":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DelinquentCharge"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/delinquent_charges?page[number]=2"}}},"ExternalObject":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the external object"},"Action":{"type":"string","description":"The action this external object is associated with","example":"start/inspections"},"ExternalObject":{"type":"object","description":"Customer-specific configuration data. The structure varies by Action.","properties":{"Attributes":{"type":"array","description":"Array of attribute definitions","items":{"$ref":"#/components/schemas/ExternalObjectAttribute"}}}}}},"ExternalObjectAttribute":{"type":"object","properties":{"Key":{"type":"string","description":"Identifier for the attribute","example":"inspection_template"},"ValueType":{"type":"string","description":"The data type of the attribute value","example":"select"},"Options":{"type":"array","description":"Available options for the attribute when ValueType is select","items":{"$ref":"#/components/schemas/ExternalObjectOption"}}}},"ExternalObjectOption":{"type":"object","properties":{"Label":{"type":"string","description":"Display label for the option","example":"Move-Out Inspection"},"Value":{"type":"string","description":"Value for the option","example":"move-out-inspection-template-id"}}},"ExternalObjects":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ExternalObject"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/external_objects?page[number]=2"}}},"ExternalObject.CreateOrUpdate":{"title":"ExternalObject","type":"object","required":["Action","ExternalObject"],"properties":{"Action":{"type":"string","description":"The action this external object is associated with","example":"start/inspections"},"ExternalObject":{"type":"object","description":"Customer-specific configuration data","properties":{"Attributes":{"type":"array","description":"Array of attribute definitions","items":{"$ref":"#/components/schemas/ExternalObjectAttribute"}}}}}},"GlAccount.BulkCreate":{"title":"General Ledger account","required":["ReferenceId","Name","Type"],"allOf":[{"$ref":"#/components/schemas/BulkCreateGlAccount"}]},"BulkCreateGlAccount":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual gl account in the bulk-creation of gl accounts."},"Name":{"type":"string","description":"The user-provided name of the general ledger account. This name must be unique, no duplicate record is allowed."},"Number":{"type":"string","description":"The user-provided number of the general ledger account. This number must be unique, no duplicate record is allowed."},"Type":{"type":"string","description":"The account type or category of the GL account. Valid values include `asset` `capital` `cash` `expense` `income` `liability` `other_expense` or `other_income`.","enum":["asset","capital","cash","expense","income","liability","other_expense","other_income"]},"FundAccount":{"type":"object","description":"The type of fund account\n#### FundAccount Options\n| Options         | Description                                                                                     |\n|-----------------|-------------------------------------------------------------------------------------------------|\n| Reserve         | The fund account is a reserve account, holding funds set aside for specific future purposes     |\n| Operating       | The fund account is an operating account holding funds set aside for regular operating expenses |\n"},"OffsetAccountId":{"type":"string","example":"3245edfe-a17d-11ec-b909-0242ac120002","description":"Unique identifier of the offset account","format":"uuid"},"ParentGlAccountId":{"type":"string","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8","description":"Unique identifier of the parent general ledger account. If present, it indicates the parent account to which the sub-account belongs.","format":"uuid"}}},"CorporateGlAccount.BulkCreate":{"title":"General Ledger account","required":["ReferenceId","Name","Type"],"allOf":[{"$ref":"#/components/schemas/BulkCreateCorporateGlAccount"}]},"BulkCreateCorporateGlAccount":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual gl account in the bulk-creation of corporate gl accounts."},"Name":{"type":"string","description":"The user-provided name of the corporate general ledger account. This name must be unique, no duplicate record is allowed."},"Number":{"type":"string","description":"The user-provided number of the corporate general ledger account. This number must be unique, no duplicate record is allowed."},"Type":{"type":"string","description":"The account type or category of the corporate GL account. Valid values include `asset` `capital` `cash` `expense` `income` `liability` `other_expense` or `other_income`.","enum":["asset","capital","cash","expense","income","liability","other_expense","other_income"]},"OffsetAccountId":{"type":"string","example":"3245edfe-a17d-11ec-b909-0242ac120002","description":"Unique identifier of the corporate offset account","format":"uuid"},"ParentGlAccountId":{"type":"string","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8","description":"Unique identifier of the parent general ledger account. If present, it indicates the parent account to which the sub-account belongs.","format":"uuid"}}},"GlAccount":{"type":"object","properties":{"Id":{"type":"string","example":"630964fb-bc9b-4f9a-b649-01cfe309cb52","description":"Unique identifier of the GL account","format":"uuid"},"IsCorporateAccount":{"type":"boolean","description":"Indicates whether the GL account is a corporate or non-corporate (standard) GL account"},"AccountName":{"deprecated":true,"type":"string","description":"User provided name of the GL account"},"AccountType":{"deprecated":true,"type":"string","description":"The account type or category of the GL account"},"AvailableTo":{"type":"string","example":"Corporate","description":"Indicates whether the GL account is available to property accounting, corporate accounting, or both","enum":["Property","Corporate","PropertyAndCorporate"]},"FundAccount":{"type":"object","description":"The type of fund account\n#### FundAccount Options\n| Options         | Description                                                                                     |\n|-----------------|-------------------------------------------------------------------------------------------------|\n| Reserve         | The fund account is a reserve account, holding funds set aside for specific future purposes     |\n| Operating       | The fund account is an operating account holding funds set aside for regular operating expenses |\n"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-10-27T11:33:35Z","description":"The date the GL account's details were last updated"},"Name":{"type":"string","description":"User provided name of the GL account"},"Number":{"type":"string","description":"The GL account number"},"Type":{"type":"string","description":"The account type or category of the GL account","enum":["asset","capital","cash","expense","income","liability","other_expense","other_income"]},"OffsetAccountId":{"type":"string","example":"3245edfe-a17d-11ec-b909-0242ac120002","description":"Unique identifier of the offset account","format":"uuid"},"ParentGlAccountId":{"type":"string","example":"57e04805-01c4-4e39-adc9-c74ff9ddc8d8","description":"Unique identifier of the parent general ledger account. If present, it indicates the parent account to which the sub-account belongs.","format":"uuid"},"PropertyIds":{"type":"array","example":["ab0964fb-bc9b-4f9a-b649-01cfe309cb52","ac0964fb-bc9b-4f9a-b649-01cfe309cb52"],"description":"Unique identifier(s) of the properties associated with the GL account. **Note**: This endpoint returns hidden properties. To associate hidden properties yielded from this endpoint with those from the Properties endpoint, ensure the `IncludeHidden` filter is enabled.","format":"uuid"}}},"GlAccounts":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/GlAccount"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/gl_accounts?page[number]=2"}}},"GlDetail":{"type":"object","properties":{"LineItemId":{"type":"string","example":"630964fb-bc9b-4f9a-b649-01cfe309cb52","description":"Unique identifier of the line item associated to this GL detail","format":"uuid"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the GL account","example":"630964fb-bc9b-4f9a-b649-01cfe309ccc2"},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property associated with the GL transaction","example":"bbb964fb-bc9b-4f9a-b649-01cfe309ccc2"},"UnitId":{"type":"string","format":"uuid","description":"Unique identifier of the unit associated with the GL transaction","example":"ccz452bf-jt3n-3q5a-b649-03cve456fsd1"},"Date":{"type":"string","format":"date","description":"The date of the transaction associated with the GL transaction"},"Reference":{"type":"string","description":"The reference number of the transaction associated with the GL transaction"},"Remarks":{"type":"string","description":"Remarks or notes pertaining to the GL transaction"},"Description":{"type":"string","description":"A brief, informative message pertaining to the GL transaction"},"Credit":{"type":"string","description":"Total amount of credit"},"Debit":{"type":"string","description":"Total amount of debit"},"TransactionId":{"type":"string","format":"uuid","description":"Unique identifier of the transaction","example":"fse456vd-jt3n-3f7j-b649-03cve362dsa7"},"TransactionType":{"type":"string","description":"The AppFolio transaction type"}}},"GlDetails":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/GlDetail"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/gl_details?page[number]=2"}}},"ImportUid.BulkCreate":{"title":"Import UID","required":["ReferenceId","ParentType","ParentId","ImportUid"],"allOf":[{"$ref":"#/components/schemas/BulkCreateImportUid"}]},"BulkCreateImportUid":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual import UIDs in the bulk-creation process."},"ParentType":{"type":"string","description":"The type of record the import UID belongs to. Valid values include `Property` `Unit` `UnitGroup` `Owner` `Vendor` or `Tenant`. For `Tenant` parents the import UID is stored against the tenant's occupancy, matching the spreadsheet importer. `UnitGroup` covers both conventional floor-plan groups and student-housing apartments, and is what unit-group attachments such as floor plans are matched against.","enum":["Property","Unit","UnitGroup","Owner","Vendor","Tenant"]},"ParentId":{"type":"string","description":"Unique identifier of the record the import UID belongs to","format":"uuid","example":"71c5cb28-547f-11ec-bfa5-02975b268737"},"ImportUid":{"type":"string","description":"The unique ID of the record in the source database. Rejected if the value is already in use by a different record of the same ParentType.","example":"12345678901234567"}}},"Inspection.Create":{"title":"Inspection","required":["Name","URL","InspectionDate"],"allOf":[{"$ref":"#/components/schemas/CreateInspection"}]},"CreateInspection":{"type":"object","properties":{"Name":{"type":"string","description":"The user-provided name of the inspection."},"URL":{"type":"string","description":"The URL link to an external page hosted by the partner with additional details about the inspection."},"InspectionDate":{"type":"string","format":"date","description":"The date the inspection was conducted. Valid format is \"YYYY-MM-DD\" e.g. \"2025-03-25\"."},"OccupancyId":{"type":"string","format":"uuid","description":"Unique identifier of the occupancy or association related to the inspection. \u003cbr\u003e \u003cbr\u003e**Note**: `OccupancyId`, `PropertyId`, and `UnitId` are mutually exclusive. One of the three are required, and only one of them can be provided in the request."},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property or association related to the inspection. \u003cbr\u003e \u003cbr\u003e**Note**: `OccupancyId`, `PropertyId`, and `UnitId` are mutually exclusive. One of the three are required, and only one of them can be provided in the request."},"UnitId":{"type":"string","format":"uuid","description":"Unique identifier of the unit or association related to the inspection. \u003cbr\u003e \u003cbr\u003e**Note**: `OccupancyId`, `PropertyId`, and `UnitId` are mutually exclusive. One of the three are required, and only one of them can be provided in the request."}}},"Inspections.BulkCreate":{"title":"Inspections","required":["ReferenceId","Name","URL"],"allOf":[{"$ref":"#/components/schemas/BulkCreateInspections"}]},"BulkCreateInspections":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual inspection in the bulk-creation of inspections."},"Name":{"type":"string","description":"The user-provided name of the inspections."},"URL":{"type":"string","description":"The URL link to an external page hosted by the partner with additional details about the inspection."},"InspectionDate":{"type":"string","format":"date","description":"The date the inspection was conducted. Valid format is \"YYYY-MM-DD\" e.g. \"2025-03-25\". If not provided, defaults to the current date."},"OccupancyId":{"type":"string","format":"uuid","description":"Unique identifier of the occupancy related to the inspection. Only one of OccupancyId, PropertyId, or UnitId may be specified."},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property related to the inspection. Only one of OccupancyId, PropertyId, or UnitId may be specified."},"UnitId":{"type":"string","format":"uuid","description":"Unique identifier of the unit related to the inspection. Only one of OccupancyId, PropertyId, or UnitId may be specified."}}},"Inspections.Update":{"type":"object","properties":{"Name":{"type":"string","description":"The user-provided name of the inspection."},"URL":{"type":"string","description":"The URL link to an external page hosted by the partner with additional details about the inspection."},"InspectionDate":{"type":"string","format":"date","description":"The date the inspection was or is scheduled to be conducted. Valid format is \"YYYY-MM-DD\" e.g. \"2025-03-25\"."},"Status":{"type":"string","description":"Indicates the current status of the inspection. Valid values for update include “NEW”, “IN PROGRESS”, “DONE”, “OUT FOR SIGNING”, or “SIGNED”.\n| Status Option          | Description                                     |\n|------------------------|----------------------------------------------------|\n| NEW                    | The inspection has not yet been started         |\n| IN PROGRESS            | The inspection is in progress                   |\n| DONE                   | The inspection is completed                     |\n| OUT FOR SIGNING        | The inspection is sent to tenant(s) for signing |\n| SIGNED                 | The inspection is signed by tenant(s)           |\n"},"OccupancyId":{"type":"string","format":"uuid","description":"Unique identifier of the occupancy to associate with the inspection. Only one of OccupancyId, PropertyId, or UnitId may be specified."},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property to associate with the inspection. Only one of OccupancyId, PropertyId, or UnitId may be specified."},"UnitId":{"type":"string","format":"uuid","description":"Unique identifier of the unit to associate with the inspection. Only one of OccupancyId, PropertyId, or UnitId may be specified."}}},"Inventory":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the inventory item","example":"630964fb-bc9b-4f9a-b649-01cfe309cb52","format":"uuid"},"Name":{"type":"string","description":"The name of the inventory item"},"Quantity":{"type":"string","description":"The current quantity of the inventory item"},"Reorder":{"type":"string","description":"The quantity threshold at which the inventory item should be reordered"},"Cost":{"type":"string","description":"The dollar amount cost of the inventory item"},"Description":{"type":"string","description":"A brief summary or description of the inventory item"},"PartNumber":{"type":"string","description":"The part number of the inventory item"},"Shelf":{"type":"string","description":"The shelf or bin location where the inventory item is stored"},"Category":{"type":"string","description":"The category of the inventory item"},"HiddenAt":{"type":"string","format":"date-time","description":"The date and time the inventory item was hidden. Null if the item is not hidden."},"LocationId":{"type":"string","format":"uuid","description":"Unique identifier of the inventory location associated with the inventory item","example":"630964fb-bc9b-4f9a-b649-01cfe309ccc2"},"VendorId":{"type":"string","format":"uuid","description":"Unique identifier of the vendor associated with the inventory item","example":"630964fb-bc9b-4f9a-b649-01cfe309cdd3"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the general ledger account associated with the inventory item","example":"630964fb-bc9b-4f9a-b649-01cfe309cee4"},"MarkUpType":{"type":"string","enum":["Percentage","Fixed Amount"],"description":"The type of markup applied to the inventory item. Valid values are `Percentage` or `Fixed Amount`."},"MarkUp":{"type":"string","description":"The markup value applied to the inventory item"},"LastUpdatedAt":{"type":"string","format":"date-time","description":"The date and time the inventory item was last updated"}}},"Inventories":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Inventory"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/inventories?page[number]=2"}}},"Inventory.Create":{"title":"Inventory","required":["Name","Cost","Quantity","LocationId"],"allOf":[{"$ref":"#/components/schemas/CreateInventory"}]},"CreateInventory":{"type":"object","properties":{"Name":{"type":"string","description":"The name of the inventory item."},"Cost":{"type":"string","format":"decimal","description":"The cost of the inventory item."},"Quantity":{"type":"integer","description":"The current quantity of the inventory item."},"LocationId":{"type":"string","format":"uuid","description":"Unique identifier of the inventory location where this item is stored.","example":"630964fb-bc9b-4f9a-b649-01cfe309ccc2"},"Reorder":{"type":"integer","description":"The quantity threshold at which the inventory item should be reordered."},"Description":{"type":"string","description":"A brief summary or description of the inventory item."},"PartNumber":{"type":"string","description":"The part number of the inventory item."},"Shelf":{"type":"string","description":"The shelf or bin location where the inventory item is stored."},"Category":{"type":"string","description":"The category of the inventory item. If the category does not exist it will be created."},"VendorId":{"type":"string","format":"uuid","description":"Unique identifier of the vendor associated with the inventory item.","example":"630964fb-bc9b-4f9a-b649-01cfe309cdd3"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the general ledger account associated with the inventory item.","example":"630964fb-bc9b-4f9a-b649-01cfe309cee4"},"MarkUpType":{"type":"string","enum":["Percentage","Fixed Amount"],"description":"The type of markup applied to the inventory item. Valid values are `Percentage` or `Fixed Amount`. Required when `MarkUp` is provided."},"MarkUp":{"type":"number","description":"The markup value applied to the inventory item."}}},"Inventories.BulkCreate":{"title":"Inventories","required":["ReferenceId","Name","Cost","Quantity","LocationId"],"allOf":[{"$ref":"#/components/schemas/BulkCreateInventories"}]},"BulkCreateInventories":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual inventory items in the bulk creation. Must be unique within the request."},"Name":{"type":"string","description":"The name of the inventory item."},"Cost":{"type":"string","format":"decimal","description":"The cost of the inventory item."},"Quantity":{"type":"string","description":"The current quantity of the inventory item."},"LocationId":{"type":"string","format":"uuid","description":"Unique identifier of the inventory location where this item is stored.","example":"630964fb-bc9b-4f9a-b649-01cfe309ccc2"},"Reorder":{"type":"string","description":"The quantity threshold at which the inventory item should be reordered."},"Description":{"type":"string","description":"A brief summary or description of the inventory item."},"PartNumber":{"type":"string","description":"The part number of the inventory item."},"Shelf":{"type":"string","description":"The shelf or bin location where the inventory item is stored."},"Category":{"type":"string","description":"The category of the inventory item. If the category does not exist it will be created."},"VendorId":{"type":"string","format":"uuid","description":"Unique identifier of the vendor associated with the inventory item.","example":"630964fb-bc9b-4f9a-b649-01cfe309cdd3"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the general ledger account associated with the inventory item.","example":"630964fb-bc9b-4f9a-b649-01cfe309cee4"},"MarkUpType":{"type":"string","enum":["Percentage","Fixed Amount"],"description":"The type of markup applied to the inventory item. Valid values are `Percentage` or `Fixed Amount`. Required when `MarkUp` is provided."},"MarkUp":{"type":"string","description":"The markup value applied to the inventory item."}}},"InventoryLocation":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the inventory location","example":"630964fb-bc9b-4f9a-b649-01cfe309cb52","format":"uuid"},"Name":{"type":"string","description":"The name of the inventory location"},"Description":{"type":"string","description":"A brief summary or description of the inventory location"},"LastUpdatedAt":{"type":"string","format":"date-time","description":"The date and time the inventory location was last updated"},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property associated with the inventory location","example":"630964fb-bc9b-4f9a-b649-01cfe309ccc2"}}},"InventoryLocations":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/InventoryLocation"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/inventory_locations?page[number]=2"}}},"InventoryLocations.Create":{"title":"InventoryLocation","required":["Name"],"allOf":[{"$ref":"#/components/schemas/CreateInventoryLocation"}]},"CreateInventoryLocation":{"type":"object","properties":{"Name":{"type":"string","description":"The name of the inventory location"},"Description":{"type":"string","description":"A brief summary or description of the inventory location"},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property associated with the inventory location"}}},"InventoryLocations.BulkCreate":{"title":"InventoryLocation","required":["ReferenceId","Name"],"allOf":[{"$ref":"#/components/schemas/BulkCreateInventoryLocation"}]},"BulkCreateInventoryLocation":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual inventory locations in the bulk-creation of inventory locations."},"Name":{"type":"string","description":"The name of the inventory location"},"Description":{"type":"string","description":"A brief summary or description of the inventory location"},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property associated with the inventory location"}}},"JournalEntry":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the journal entry","format":"uuid"},"EntryDate":{"type":"string","description":"The date the journal entry was created. Valid format is \"YYYY-MM-DD\" e.g. \"2022-03-03\"."},"LineItems":{"$ref":"#/components/schemas/JournalEntry.LineItemsCreate"},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property or association related to the journal entry"},"Remarks":{"type":"string","description":"A description or summary of the journal entry"}}},"JournalEntries":{"type":"object","properties":{"data":{"type":"array","items":{"title":"JournalEntry","properties":{"Id":{"type":"string","description":"Unique identifier of the journal entry","format":"uuid"},"AccountingBasis":{"type":"string","enum":["All","CashOnly","AccrualOnly"],"description":"The accounting basis for the journal entry."},"EntryDate":{"type":"string","description":"The date the journal entry was created. Valid format is \"YYYY-MM-DD\" e.g. \"2022-03-03\"."},"LastUpdatedAt":{"type":"string","format":"date-time","description":"The date the journal entry's details were last updated"},"LineItems":{"$ref":"#/components/schemas/JournalEntry.LineItemsList"},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property or association related to the journal entry"},"ReferenceNumber":{"type":"string","description":"The reference number representing the transaction in your ledger. This will be automatically assigned unless provided."},"Remarks":{"type":"string","description":"A description or summary of the journal entry"},"ScheduledReversalDate":{"type":"string","format":"date","description":"The date on which this journal entry is scheduled to be automatically reversed."}}}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/journal_entries?page[number]=2"}}},"JournalEntry.Create":{"title":"JournalEntry","required":["EntryDate","PropertyId","LineItems"],"allOf":[{"$ref":"#/components/schemas/JournalEntry"}],"properties":{"ReferenceNumber":{"type":"string","description":"The reference number representing the transaction in your ledger. This will be automatically assigned unless provided."},"AccountingBasis":{"type":"string","enum":["All","CashOnly","AccrualOnly"],"default":"All","description":"The accounting basis for the journal entry. Defaults to All. A `null` value will be ignored."},"ScheduledReversalDate":{"type":"string","format":"date","description":"The date on which this journal entry will be automatically reversed. Must not be before EntryDate. A `null` value will be ignored. Passing either a past date or today's date will immediately reverse the journal entry."}}},"JournalEntry.BulkCreate":{"title":"JournalEntry","required":["EntryDate","PropertyId","LineItems","ReferenceId"],"allOf":[{"$ref":"#/components/schemas/JournalEntry"}],"properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference an individual journal entry in the bulk-creation of journal entries."},"ReferenceNumber":{"type":"string","description":"The reference number representing the transaction in your ledger. This will be automatically assigned unless provided."},"AccountingBasis":{"type":"string","enum":["All","CashOnly","AccrualOnly"],"default":"All","description":"The accounting basis for the journal entry. Defaults to All. A `null` value will be ignored."},"ScheduledReversalDate":{"type":"string","format":"date","description":"The date on which this journal entry will be automatically reversed. Must not be before EntryDate. A `null` value will be ignored. Passing either a past date or today's date will immediately reverse the journal entry."}}},"JournalEntry.LineItemsCreate":{"title":"LineItem","type":"array","description":"Array of line-item objects. Two or more line-item objects must be passed to create a journal entry. The sum of the total debits must equal the total credits for all line-item objects.\n#### Journal Entry Line Item\n| Attributes  | Type                  | Description                         | Notes |\n|-------------|-----------------------|-------------------------------------|--------|\n| Credit      | String or `null` | The credit amount  | Total debits and credits must be equal. For example, if line-item 1 has a credit of \"10.00\", line-item 2 must have a debit of \"10.00\". |\n| Debit       | String or `null` | The debit amount   | Total debits and credits must be equal. For example, if line-item 1 has a credit of \"10.00\", line-item 2 must have a debit of \"10.00\". |\n| Description | String | A brief, informative description of the journal entry’s line item |\n| GlAccountId | String | Unique identifier of the general ledger account associated with the journal entry line item |\n","items":{"properties":{"Credit":{"type":"string","format":"decimal","description":"The credit amount. Total debits and credits must be equal. For example, if line-item 1 has a credit of \"10.00\", line-item 2 must have a debit of \"10.00\"."},"Debit":{"type":"string","format":"decimal","description":"The debit amount. Total debits and credits must be equal. For example, if line-item 1 has a credit of \"10.00\", line-item 2 must have a debit of \"10.00\"."},"Description":{"type":"string","description":"A brief, informative description of the journal entry’s line item"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the general ledger account associated with the journal entry line item"}}}},"JournalEntry.Update":{"title":"JournalEntry","allOf":[{"$ref":"#/components/schemas/JournalEntry"}],"properties":{"AccountingBasis":{"type":"string","enum":["All","CashOnly","AccrualOnly"],"description":"The accounting basis for the journal entry. A `null` value will be ignored."},"ScheduledReversalDate":{"type":"string","format":"date","description":"The date on which this journal entry will be automatically reversed. Must not be before EntryDate. A `null` value will clear this date. Passing either a past date or today's date will immediately reverse the journal entry."}}},"JournalEntry.LineItemsUpdate":{"title":"LineItem","type":"array","description":"Array of line-item objects. If updating LineItems, two or more line-item objects must be passed. The sum of the total debits must equal the total credits for all line-item objects.\n#### Journal Entry Line Item\n| Attributes  | Type                  | Description                         | Notes |\n|-------------|-----------------------|-------------------------------------|--------|\n| Credit      | String or `null` | The credit amount  | Total debits and credits must be equal. For example, if line-item 1 has a credit of \"10.00\", line-item 2 must have a debit of \"10.00\". |\n| Debit       | String or `null` | The debit amount   | Total debits and credits must be equal. For example, if line-item 1 has a credit of \"10.00\", line-item 2 must have a debit of \"10.00\". |\n| Description | String | A brief, informative description of the journal entry’s line item |\n| GlAccountId | String | Unique identifier of the general ledger account associated with the journal entry line item |\n","items":{"properties":{"Credit":{"type":"string","format":"decimal","description":"The credit amount. Total debits and credits must be equal. For example, if line-item 1 has a credit of \"10.00\", line-item 2 must have a debit of \"10.00\"."},"Debit":{"type":"string","format":"decimal","description":"The debit amount. Total debits and credits must be equal. For example, if line-item 1 has a credit of \"10.00\", line-item 2 must have a debit of \"10.00\"."},"Description":{"type":"string","description":"A brief, informative description of the journal entry’s line item"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the general ledger account associated with the journal entry line item"}}}},"JournalEntry.LineItemsList":{"title":"LineItem","type":"array","description":"Array of line-item objects\n#### Journal Entry Line Item\n| Attributes  | Type                  | Description                         |\n|-------------|-----------------------|-------------------------------------|\n| Credit      | String or `null` | The credit amount  |\n| Debit       | String or `null` | The debit amount   |\n| Description | String | A brief, informative description of the journal entry’s line item |\n| GlAccountId | String | Unique identifier of the general ledger account associated with the journal entry line item |\n","items":{"properties":{"Credit":{"type":"string","format":"decimal","description":"The credit amount."},"Debit":{"type":"string","format":"decimal","description":"The debit amount."},"Description":{"type":"string","description":"A brief, informative description of the journal entry’s line item"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the general ledger account associated with the journal entry line item"}}}},"LateFeePolicies":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LateFeePolicy"}},"next_page_path":{"example":"/api/v0/late_fee_policies?page[number]=2","description":"The URL path to the next page of responses"}}},"LateFeePolicy":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the late fee policy","format":"uuid"},"EligibleCharges":{"type":"string","description":"The specific charges to which the late fee will be applied"},"FeeType":{"type":"string","description":"The late fee type"},"FlatAmount":{"type":"string","format":"decimal","description":"The flat fee"},"GracePeriodType":{"type":"string","description":"The type of Grace Period to enforce"},"GracePeriodValue":{"type":"integer","description":"A number of days after the charge, or a number of days into the following month. "},"LateFeePerDay":{"type":"string","format":"decimal","description":"The daily late fees"},"LateFeeGraceBalance":{"type":"string","format":"decimal","description":"The late fee grace balance"},"LastUpdatedAt":{"type":"string","format":"date-time","description":"The date the late fee policy was last updated"},"MaxDailyLateFeesAmount":{"type":"string","format":"decimal","description":"The maximum daily late fees"},"OccupancyId":{"type":"string","format":"uuid","description":"When present, the Late Fee Policy belongs to a specific occupancy within a MFR property. "},"Percentage":{"type":"string","format":"decimal","description":"The percentage of late fee"},"PolicyEffectiveOn":{"type":"string","format":"date","description":"The date at which the late fee policy will start"},"PropertyId":{"type":"string","format":"uuid","description":"It is filled for both property-based and occupancy-based policies. PropertyId can be used to tie an occupancy-based policy to its MFR building. "}}},"LateFeePolicy.BulkCreate":{"title":"Late Fee Policy","required":["ReferenceId","EligibleCharges","FeeType","GracePeriodType","GracePeriodValue","LateFeeGraceBalance","PolicyEffectiveOn"],"allOf":[{"$ref":"#/components/schemas/BulkCreateLateFeePolicy"}]},"BulkCreateLateFeePolicy":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual late fee policy in the bulk-creation of late fee policies."},"EligibleCharges":{"type":"string","enum":["Every Charge","All Recurring Charges","Only Recurring Rent"],"description":"The specific charges to which the late fee will be applied"},"FeeType":{"type":"string","enum":["Flat","Percentage"],"description":"The late fee type"},"FlatAmount":{"type":"string","format":"decimal","description":"The flat fee. Must be provided when `FeeType` is `Flat`. Must be greater than 0 when `LateFeePerDay` is not 0 and `FeeType` is `Flat`."},"GracePeriodType":{"type":"string","enum":["Fixed Period","Fixed Day of Month"],"description":"The type of Grace Period to enforce"},"GracePeriodValue":{"type":"integer","description":"A number of days after the charge, or a number of days into the following month. Must be between 0 and 365 when `GracePeriodType` is `Fixed Period`. Must be between 1 and 28 when `GracePeriodType` is `Fixed Day of Month`."},"LateFeePerDay":{"type":"string","format":"decimal","description":"The daily late fees"},"LateFeeGraceBalance":{"type":"string","format":"decimal","description":"The late fee grace balance"},"MaxDailyLateFeesAmount":{"type":"string","format":"decimal","description":"The maximum daily late fees"},"OccupancyId":{"type":"string","format":"uuid","description":"When present, the Late Fee Policy belongs to a specific occupancy within a MFR property. "},"Percentage":{"type":"string","format":"decimal","description":"The percentage of late fee. Must be a number 0 or greater. Must be provided when `FeeType` is `Percentage`. Must be greater than 0 when `LateFeePerDay` is not 0 and `FeeType` is `Percentage`."},"PolicyEffectiveOn":{"type":"string","format":"date","description":"The date at which the late fee policy will start. It must be in the future. There can only be one current and future late fee policy per property. If you try to create a late fee policy for a property that already has a future late fee policy, it should replace the existing future late fee policy."},"PropertyId":{"type":"string","format":"uuid","description":"It is filled for both property-based and occupancy-based policies. PropertyId can be used to tie an occupancy-based policy to its MFR building. "}}},"Lead":{"type":"object","properties":{"Id":{"type":"string","example":"630964fb-bc9b-4f9a-b649-01cfe309cb52","description":"Unique identifier of the lead","format":"uuid"},"AdditionalOccupants":{"type":"integer","description":"The number of other potential occupants of the residency"},"AssignedUserId":{"type":"string","example":"11164fb-bc9b-4f9a-b649-01cfe309cb52","description":"The AppFolio Property Manager user responsible for the lead. Reference the **Users** endpoint for any necessary associations.","format":"uuid"},"Bathrooms":{"type":"string","format":"decimal","example":"2.5","description":"The number of desired bathrooms"},"Bedrooms":{"type":"integer","description":"The number of desired bedrooms"},"CreatedAt":{"type":"string","format":"date-time","description":"The date the lead was created"},"CreditScore":{"type":"string","example":"720 to 850","description":"The self-reported credit score of the interested party"},"DesiredMoveIn":{"type":"string","format":"date","description":"The date the prospective resident desires to move in"},"Duplicate":{"type":"boolean","description":"Indicates whether or not the lead is a duplicate of an existing lead. Leads are marked as duplicates if a lead was submitted from a party with the same contact information (phone number or email) that is already associated with a lead with the same `PropertyId`.","deprecated":true},"OriginalLeadId":{"type":"string","format":"uuid","description":"ID of the existing lead this lead duplicates. The ID attribute of the newly created lead will be distinct from its duplicate.","deprecated":true},"Email":{"type":"string","format":"email","description":"The email address of the interested person"},"FirstName":{"type":"string","description":"The first name of the interested person"},"GuestCardId":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","description":"The unique identifier of the Guest Card, which may include multiple leads","format":"uuid"},"HasCats":{"type":"boolean","description":"Indicates whether or not the interested person has cat(s)"},"HasDogs":{"type":"boolean","description":"Indicates whether or not the interested person has dog(s)"},"HasOtherPet":{"type":"boolean","description":"Indicates whether or not the interested person has other pet(s)"},"InactiveReason":{"$ref":"#/components/schemas/Lead.InactiveReason"},"LastName":{"type":"string","description":"The last name of the interested person"},"Link":{"type":"string","format":"uri","description":"A link to the lead page in the AppFolio Property Manager"},"MaxRent":{"type":"string","format":"decimal","example":"5000.00","description":"The max amount the interested person is willing to pay monthly for rent"},"Messages":{"type":"array","description":"Array of objects representing messages sent about a lead","items":{"properties":{"PropertyId":{"type":"string","example":"630964fb-bc9b-4f9a-b649-01cfe309cb52","description":"Unique identifier of the property associated with the message","format":"uuid"},"UnitId":{"type":"string","example":"630964fb-bc9b-4f9a-b649-01cfe309cb52","description":"Unique identifier of the unit associated with the message","format":"uuid"},"Message":{"type":"string","example":"This is a message","description":"The content of the message sent by the lead"},"Source":{"type":"string","example":"Website","description":"The source of the message"},"Timestamp":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date and time the message was sent, in Coordinated Universal Time (UTC)"}}}},"MiddleInitial":{"type":"string","description":"The middle initial of the interested person"},"MonthlyIncome":{"type":"string","format":"decimal","example":"3000.00","description":"The self-reported monthly income of the interested person"},"PhoneNumber":{"type":"string","description":"The phone number of the interested person"},"PropertyId":{"type":"string","example":"ee0964fb-bc9b-4f9a-b649-01cfe309cb52","description":"Unique identifier of the property associated with the lead","format":"uuid"},"RentalApplicationId":{"type":"string","example":"bb1935bf-pl4f-4f7a-b837-32gfr321ld36","description":"Unique identifier of the rental application associated with the lead","format":"uuid"},"RentalApplicationGroupId":{"type":"string","example":"aa1935bf-pl4f-4f7a-b837-32gfr321ld36","description":"Unique identifier of the rental application group id associated with the lead if they applied as a group.","format":"uuid"},"Source":{"type":"string","description":"The mechanism through which this lead was submitted"},"Status":{"type":"string","enum":["active","inactive","cold","waitlisted","applied","applied_review","applied_approved","applied_denied","applied_canceled","converting","converted"],"description":"Indicates the current phase of engagement with a prospective resident\n#### Status Options\n| Options          | Description                                                                                                                                                                                               |\n|------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| active           | A prospective resident is interested in a unit or property                                                                                                                                                |\n| inactive         | Prospective resident is unqualified, has stopped responding, or a duplicate                                                                                                                               |\n| cold             | A lead has ceased to show interest                                                                                                                                                                |\n| waitlisted       | A prospective resident is interested in a unit or property, but there are currently no units available that fit their interests. If a prospective resident submits an additional lead, the status will revert to \"active\".  |\n| applied          | The prospective resident applied to a unit                                                                                                                                                                     |\n| applied_review   | The prospective resident applied to a unit and a decision is pending the screening results                                                                                                                               |\n| applied_approved | The prospective resident applied and was approved                                                                                                                                                           |\n| applied_denied   | The prospective resident applied and was denied                                                                                                                                                   |\n| applied_canceled | The application process for the prospective renter was cancelled                                                                                                                                      |\n| converting       | The process to send out a lease to the resident is currently in progress                                                                                                                                  |\n| converted        | The lease has been executed. The prospect is now a fully moved-in resident.                                                                                                                                               |\n"},"UnitIds":{"type":"array","example":["ab0964fb-bc9b-4f9a-b649-01cfe309cb52","ac0964fb-bc9b-4f9a-b649-01cfe309cb52"],"description":"Unique identifier of the unit(s) that the interested party is interested in","format":"uuid","items":{"type":"string"}},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-10-27T11:33:35Z","description":"The date the lead was last updated"}}},"Leads":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Lead"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/leads?page[number]=2"}}},"Lead.InactiveReason":{"title":"InactiveReason","type":"string","enum":["price","location","amenities","no_response","decided_not_to_move","leasing_criteria_not_met","looking_for_move_in_special","no_availability","duplicate","other"],"description":"The reason why the lead was marked inactive\n#### InactiveReason Options\n| Options                     | Description                                                                                                                                                                                               |\n|-----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| price                       | The price caused the lead to be marked inactive                                                                                                                                           |\n| location                    | The location caused the lead to be marked inactive                                                                                                                             |\n| amenities                   | The amenities caused the lead to be marked inactive                                                                                                                                                     |\n| no_response                 | No reason or response was provided\n| decided_not_to_move         | The prospective resident decided not to move                                                                                                                                                                    |\n| leasing_criteria_not_met    | The prospective resident was unqualified to move                                                                                                                            |\n| looking_for_move_in_special | The prospective resident was looking for a move-in special                                                                                                                                                          |\n| no_availability             | Due to no availability the lead was marked inactive                                                                                                                                                   |\n| duplicate                   | The lead was a duplicate                                                                                                                                     |\n| other                       | Other reason(s) not already provided                                                                                                                               |\n"},"Leads.Notes":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Lead.Note"}},"next_page_path":{"example":"/api/v0/leads/notes?page[number]=2","description":"The URL path to the next page of responses"}}},"Lead.Note":{"type":"object","properties":{"Body":{"type":"string","description":"A brief informative message about the lead note. A lead note cannot exceed `63,535` characters."},"EntityId":{"type":"string","format":"uuid","description":"The unique identifier of the Guest Card to which the note will be attached"},"LastUpdatedAt":{"type":"string","description":"The date the lead note’s details were last updated"},"Id":{"type":"string","format":"uuid","description":"Unique identifier of the note associated with the guest card"},"NoteId":{"deprecated":true,"type":"string","format":"uuid","description":"Unique identifier of the note associated with the guest card. Deprecated in favor of `Id`."}}},"Listing":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the listing"},"AcceptingApplications":{"deprecated":true,"type":"boolean","description":"Indicates whether or not the listing is accepting applications"},"Address1":{"type":"string","description":"The primary street address of the listing"},"Address2":{"type":"string","description":"Additional street address information pertaining to the listing"},"AdvertisedRent":{"deprecated":true,"type":"number","format":"float","example":750.0,"description":"The rent per month as advertised"},"ApplicationFee":{"type":"string","description":"The application fee amount for the listing"},"ApplicationURL":{"type":"string","description":"The URL link(s) to the application page of the listing(s) accepting online applications"},"AvailableOn":{"type":"string","description":"The date upon which the listing can be leased","format":"date","example":"2021-12-01"},"Bathrooms":{"type":"number","format":"float","example":2.5,"description":"The number of bathrooms listed for the unit"},"Bedrooms":{"type":"integer","description":"The number of bedrooms listed for the unit"},"CatsAllowed":{"type":"boolean","description":"Indicates whether or not the listing allows cats. A `null` value indicates that the listing may not have specified a policy for cats."},"City":{"type":"string","description":"The city where the listing is located"},"Deposit":{"type":"number","format":"float","example":500.0,"description":"The security, rent, or pet and cleaning deposit amount"},"DogPolicy":{"type":"string","enum":["Large \u0026 Small","Small Only","Not Allowed"],"description":"Indicates whether or not the listing allows dogs. If dogs are allowed, valid values are: \"Large \u0026 Small\" or \"Small Only.\""},"Email":{"type":"string","description":"The contact email address associated with the listing"},"HighAdvertisedRent":{"type":"number","format":"float","example":750.0,"description":"The highest rent per month as advertised"},"IsCampaign":{"type":"boolean","description":"Indicates whether or not the listing is a part of a campaign"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2022-09-27T11:33:35Z","description":"The date the listing's details were last updated"},"ListedRent":{"type":"string","format":"decimal","example":"750.0","description":"The rent per month as listed on the market. This value reflects either the market rent or the advertised rent, depending on whether \"Use Market Rent On Ads\" is enabled in the AppFolio Property Manager."},"LowAdvertisedRent":{"type":"number","format":"float","example":750.0,"description":"The lowest rent per month as advertised"},"MarketingDescription":{"type":"string","description":"A description of the listing for syndication"},"MarketingTitle":{"type":"string","description":"The title of the listing for syndication"},"PhoneNumber":{"type":"string","example":"(865) 555-1190 Ext. 0000","description":"The contact phone number associated with the listing. Includes the extension number if applicable."},"PostedToWebsite":{"type":"boolean","description":"Indicates whether or not a vacant unit was posted to the AppFolio listings page. If `true`, the unit is displayed on the AppFolio listings page and accepting applications. If false, the unit is not displayed on the AppFolio listings page."},"PropertyId":{"type":"string","description":"Unique identifier of the property associated with the listing","format":"uuid"},"PropertyMarketingDescription":{"type":"string","description":"A description of the property associated with the listing for syndication"},"PropertyMarketingTitle":{"type":"string","description":"The title of the property associated with the listing for syndication"},"SquareFeet":{"type":"number","format":"float","example":1280.0,"description":"The size of the listing in square feet"},"State":{"type":"string","description":"The state where the listing is located"},"UnitAmenities":{"type":"array","description":"The amenities offered by the building in the listing","items":{"type":"string"}},"UnitId":{"type":"string","description":"Unique identifier of the unit associated with the listing","format":"uuid"},"UnitPhotos":{"type":"array","description":"Photos of the listing","items":{"$ref":"#/components/schemas/ListingsPhoto"}},"UnitType":{"type":"string","description":"The floor plan of the listing"},"UnitTypeId":{"type":"string","format":"uuid","description":"Unique identifier of the `UnitType` for the listing"},"UtilitiesIncluded":{"type":"array","description":"The utilities which are included with rent","items":{"type":"string"}},"YouTubeURL":{"type":"string","description":"The URL of the YouTube video for the listing"},"Zip":{"type":"string","description":"The zip code where the listing is located"}}},"Listings":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Listing"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/listings?page[number]=2"}}},"MailingLetters":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/MailingLetter.List"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/mailing_letter?page[number]=2"}}},"MailingLetter.Update":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the letter","format":"uuid"},"LetterUrl":{"type":"string","format":"uri","description":"The URL link to an external page hosted by the partner with additional details about the letter"},"Status":{"type":"string","description":"Indicates the current status of the letter. Valid values include “Accepted”, “Not Accepted”, “Mailed”, or “Canceled”. Status must be provided with StatusOccurredAt for updates.\n| Status Option          | Description                                                       |\n|------------------------|-------------------------------------------------------------------|\n| Accepted               | The letter has been accepted by the partner for sending           |\n| Not Accepted           | The letter was not accepted due to a partner validation error     |\n| Mailed                 | The letter was successfully mailed by the partner                 |\n| Canceled               | The letter was canceled by the customer in the partner's platform |\n"},"StatusOccurredAt":{"type":"string","format":"date-time","description":"The date and time the status of the letter was applied. StatusOccurredAt will not update unless a corresponding Status is provided in the request. Valid format is in UTC in ISO 8601 format: \"YYYY-MM-DDTHH:mm:ssZ"},"StatusReason":{"type":"string","description":"Explains the reason behind the letter's status (e.g., if a partner sets the status to Not Accepted, StatusReason will include the reason). StatusReason will not update unless a corresponding Status is provided in the request."},"TrackingNumber":{"type":"string","description":"The letter’s tracking number"}}},"MailingLetter.List":{"title":"MailingLetter","type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the letter","format":"uuid"},"BatchUrl":{"type":"string","format":"uri","description":"The URL link to the batch of letter(s) created from the AppFolio system"},"BatchName":{"type":"string","description":"The name of the batch of letter(s) created from the AppFolio system"},"Color":{"type":"boolean","description":"Indicates whether or not the letter’s content is intended to be printed in color"},"ContentTypes":{"type":"array","description":"Array containing the content type(s) a letter may be comprised of. A letter may have several content types including \"Statement\", \"Attachment\" or \"Document Template\".\n| Content Types       | Type   | Description                                                                                               |\n|---------------------|--------|-----------------------------------------------------------------------------------------------------------|\n| Statement           | String | The letter's content is a formal summary of information, such as a financial statement or account summary |\n| Attachment          | String | The letter's content is an attachment, typically a user-uploaded PDF document                             |\n| Document Template   | String | The letter's content is a pre-defined template tailored for personalized data                             |\n"},"CreatedAt":{"type":"string","format":"date-time","description":"The date the letter was created"},"DoubleSided":{"type":"boolean","description":"Indicates whether or not the letter should be printed on both sides or a single side of the paper. If false, the letter should be printed on a single side of the paper."},"LetterCreator":{"type":"object","description":"Data object containing details about the AppFolio Property Manager (APM) user who created the letter to be sent","$ref":"#/components/schemas/MailingLetter.LetterCreator"},"LetterUrl":{"type":"string","format":"uri","description":"The URL link to an external page hosted by the partner with additional details about the letter"},"PropertyId":{"type":"string","description":"Unique identifier of the property associated with the letter","format":"uuid"},"RecipientMailingAddress":{"type":"array","description":"The mailing address of the letter's recipients","items":{"$ref":"#/components/schemas/MailingLetter.RecipientMailingAddress"}},"RecipientNames":{"type":"string","description":"The name(s) of the letter's recipients"},"ReturnEnvelope":{"type":"boolean","description":"Indicates whether the sender requests to have a physical return envelope included with the letter"},"ReturnReceipt":{"type":"boolean","description":"Indicates whether or not a return receipt was requested by the sender"},"SenderAddress":{"type":"array","description":"The address of the letter's sender","items":{"$ref":"#/components/schemas/MailingLetter.SenderAddress"}},"SenderName":{"type":"string","description":"The name of the letter's sender"},"S3Link":{"type":"string","description":"The Amazon S3 URL link to download the PDF version of the letter"},"TrackingNumber":{"type":"string","description":"The letter’s tracking number"},"ViaCertified":{"type":"boolean","description":"Indicates whether or not the letter was sent via certified mail"},"ViaFirstClass":{"type":"boolean","description":"Indicates whether or not the letter was sent via first-class mail"},"Status":{"type":"string","description":"Indicates the current status of the letter. Valid values include “Accepted”, “Not Accepted”, “Mailed”, or “Canceled”.\n| Status Option          | Description                                                       |\n|------------------------|-------------------------------------------------------------------|\n| New                    | The letter has been created but not yet processed by the partner     |\n| Accepted               | The letter has been accepted by the partner for sending           |\n| Not Accepted           | The letter was not accepted due to a partner validation error     |\n| Mailed                 | The letter was successfully mailed by the partner                 |\n| Canceled               | The letter was canceled by the customer in the partner's platform |\n"},"StatusOccurredAt":{"type":"string","format":"date-time","description":"The date and time the status of the letter was applied"},"StatusReason":{"type":"string","description":"Explains the reason behind the letter's status (e.g., if a partner sets the status to Not Accepted, StatusReason will include the reason)."}}},"MailingLetter.LetterCreator":{"description":"Data object containing details about the AppFolio Property Manager (APM) user who created the letter to be sent","properties":{"FirstName":{"type":"string","description":"The first name of the APM user who created the letter"},"LastName":{"type":"string","description":"The last name of the APM user who created the letter"},"Email":{"type":"string","description":"The email address of the APM user who created the letter"}}},"MailingLetter.SenderAddress":{"properties":{"Address1":{"type":"string","description":"The primary street address of the sender"},"Address2":{"type":"string","description":"The secondary street address of the sender"},"City":{"type":"string","description":"The city where the sender resides"},"State":{"type":"string","description":"The state where the sender resides"},"PostalCode":{"type":"string","description":"The postal code where the sender resides"},"CountryCode":{"type":"string","description":"The country code of the sender's location (e.g. \"US\" for United States)"}}},"MailingLetter.RecipientMailingAddress":{"properties":{"Address1":{"type":"string","description":"The primary street address of the recipient"},"Address2":{"type":"string","description":"The secondary street address of the recipient"},"City":{"type":"string","description":"The city where the recipient resides"},"State":{"type":"string","description":"The state where the recipient resides"},"PostalCode":{"type":"string","description":"The postal code where the recipient resides"},"CountryCode":{"type":"string","description":"The country code of the recipient's location (e.g. \"US\" for United States)"}}},"MailingLetter.BulkUpdate":{"type":"object","title":"Letter","properties":{"Id":{"type":"string","description":"Unique identifier of the letter","format":"uuid"},"LetterUrl":{"type":"string","format":"uri","description":"The URL link to an external page hosted by the partner with additional details about the letter"},"Status":{"type":"string","description":"Indicates the current status of the letter. Valid values include “Accepted”, “Not Accepted”, “Mailed”, or “Canceled”. Status must be provided with StatusOccurredAt for updates.\n| Status Option          | Description                                                       |\n|------------------------|-------------------------------------------------------------------|\n| Accepted               | The letter has been accepted by the partner for sending           |\n| Not Accepted           | The letter was not accepted due to a partner validation error     |\n| Mailed                 | The letter was successfully mailed by the partner                 |\n| Canceled               | The letter was canceled by the customer in the partner's platform |\n"},"StatusOccurredAt":{"type":"string","format":"date-time","description":"The date and time the status of the letter was applied. StatusOccurredAt will not update unless a corresponding Status is provided in the request. Valid format is in UTC in ISO 8601 format: \"YYYY-MM-DDTHH:mm:ssZ"},"StatusReason":{"type":"string","description":"Explains the reason behind the letter's status (e.g., if a partner sets the status to Not Accepted, StatusReason will include the reason). StatusReason will not update unless a corresponding Status is provided in the request."},"TrackingNumber":{"type":"string","description":"The letter’s tracking number"}}},"OccupancyDocument":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the document associated with an occupancy","format":"uuid"},"DocumentName":{"type":"string","description":"The name of the supporting document"},"DocumentType":{"type":"string","enum":["lease","supporting_document"],"description":"The type of document associated with the occupancy. It can be one of the two possible values from the enum:\n#### Occupancy Document Types\n| Category              |                                                 Description                                                                |\n|-----------------------|----------------------------------------------------------------------------------------------------------------------------|\n| lease                 | Indicates that the document is a lease agreement                                                                           |\n| supporting_document   | Any document(s) related to the occupancy that is not a lease agreement (for example., an attachment, letter, or notice)    |\n"},"LeaseCounterSignedDate":{"type":"string","format":"date","example":"2021-08-27","description":"The date when the lease agreement was formally executed. `LeaseCounterSignedDate` will be `null` unless the `DocumentType` is `lease`."},"LeaseStartDate":{"type":"string","format":"date","example":"2021-09-27","description":"The start date of the lease. `LeaseStartDate` will be `null` unless the `DocumentType` is `lease`."},"LeaseEndDate":{"type":"string","format":"date","example":"2022-09-27","description":"The end date of the lease. `LeaseEndDate` will be `null` unless the `DocumentType` is `lease`"},"Url":{"type":"string","description":"The URL to download the supporting document. This URL will expire 20 minutes after the call to the endpoint that retrieved it."}}},"Occupancy":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the occupancy","format":"uuid"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the occupancy’s details were last updated"},"OccupancyDocuments":{"type":"array","description":"Array containing a list of documents associated with an occupancy. An occupancy document is classified as either a lease or a supporting document","items":{"$ref":"#/components/schemas/OccupancyDocument"}}}},"OccupancyDocuments":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Occupancy"}},"next_page_path":{"example":"/api/v0/occupancies/documents?page[number]=2","description":"The URL path to the next page of responses"}}},"Occupancy.Attachments":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Occupancy.Attachment"}},"next_page_path":{"example":"/api/v0/occupancies/attachments?page[number]=2","description":"The URL path to the next page of responses"}}},"Occupancy.Attachment":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the attachment"},"Name":{"type":"string","description":"The name given to describe the attachment"},"ContentType":{"type":"string","description":"The content type of the occupancy attachment. An example content type is a photo or a PDF.","example":"application/pdf"},"CreatedAt":{"type":"string","format":"date-time","description":"The date and time the occupancy attachment was created"},"EntityId":{"type":"string","format":"uuid","description":"Unique identifier of the occupancy associated with the attachment"},"URL":{"type":"string","description":"The link to download the file in the attachment"},"FolderId":{"type":"string","format":"uuid","description":"Unique identifier of the folder that contains the attachment. Null if the attachment is not in a folder."},"SharedWithTenants":{"type":"boolean","description":"Whether the attachment is currently shared with the tenants of the occupancy in the Online Portal"},"SharedWithOwners":{"type":"boolean","description":"Whether the attachment is currently shared with the owners of the property in the Owner Portal"}}},"Owner":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of an owner within an owner group"},"CompanyName":{"type":"string","description":"The company name associated with the owner"},"CustomFields":{"$ref":"#/components/schemas/CustomFields.Attribute"},"Email":{"deprecated":true,"type":"string","description":"The primary email address of the owner"},"Emails":{"type":"array","description":"The owner's emails","items":{"$ref":"#/components/schemas/Owner.Emails"}},"EmailEcheckReceipt":{"type":"boolean","description":"Indicates whether or not to send a notification to the payee after an eCheck payment is made."},"HoldPayments":{"type":"boolean","description":"When true, bills created for the owner through the Pay Owner or Owner Draw function will not be available in the Pay Bills flow."},"FirstName":{"type":"string","description":"The first name of the owner"},"HiddenAt":{"type":"string","format":"date-time","description":"When the owner was marked inactive by an AppFolio Property Manager user"},"IsCompany":{"type":"boolean","description":"Indicates whether or not the owner identifies as a company"},"LastName":{"type":"string","description":"The last name of the owner"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the owner was last updated"},"Link":{"type":"string","format":"uri","description":"A link to the owner's page in the AppFolio Property Manager"},"MaintenanceNotes":{"type":"string","description":"Maintenance notes for the properties owned"},"PhoneNumber":{"deprecated":true,"type":"string","description":"The owner’s primary phone number"},"PhoneNumbers":{"type":"array","description":"The owner's phone number(s)","items":{"$ref":"#/components/schemas/Owner.PhoneNumbers"}},"Address1":{"deprecated":true,"type":"string","description":"The primary street address of the owner"},"Address2":{"deprecated":true,"type":"string","description":"Additional street address information pertaining to the owner"},"City":{"deprecated":true,"type":"string","description":"The city where the owner is located"},"State":{"deprecated":true,"type":"string","description":"The state where the owner is located"},"Zip":{"deprecated":true,"type":"string","description":"The zip code where the owner is located"},"CountryCode":{"deprecated":true,"type":"string","description":"The country code of the owner (e.g. US for United states)"},"Tags":{"type":"array","description":"User-defined tag(s) that categorize the owner","items":{"type":"string"}},"UseAlternatePayee":{"type":"boolean","description":"Indicates whether or not the owner payments are submitted to an alternate person other than what is listed for Owner First, Last and/or Company Name"},"AlternatePayeeName":{"type":"string","description":"The name of the alternate payee"},"AlternatePaymentAddress1":{"type":"string","description":"The street address of the Alternate Payee"},"AlternatePaymentAddress2":{"type":"string","description":"Additional street address information pertaining to the alternate payee"},"AlternatePaymentCity":{"type":"string","description":"The city where the alternate payee is located"},"AlternatePaymentState":{"type":"string","description":"The state where the alternate payee is located"},"AlternatePaymentPostalCode":{"type":"string","description":"The zip code where the alternate payee is located"},"AlternatePaymentCountryCode":{"type":"string","description":"The country code of the alternate payee (e.g. US for United states)"},"Addresses":{"type":"array","description":"The owner's address(es)","items":{"$ref":"#/components/schemas/Owner.Addresses"}},"Send1099":{"type":"boolean","description":"Indicates whether a 1099 form is sent to the owner."},"OwnerConsentedToReceiveElectronic1099":{"type":"boolean","description":"Indicates whether the owner has consented to receive the 1099 tax form electronically. If `Send1099` is `false`, this value will also be `false`."},"Sending1099Preference":{"type":"string","description":"Indicates the owner's 1099 sending preference. Valid values include \"Paper\", \"Electronic\", \"PaperAndElectronic\", or \"null\". If `Send1099` is `false`, this value will be `null`.\n#### Status Options\n| Attribute            | Type   | Description                                                     |\n|----------------------|--------|-----------------------------------------------------------------|\n| Paper                | String | The 1099 will be sent to the owner by paper                     |\n| Electronic           | String | The 1099 will be sent to the owner eletronically                |\n| PaperAndElectronic   | String | The 1099 will be sent to the owner electronically, and by paper |                                                                                                                                        |\n"}}},"Owner.Create":{"type":"object","properties":{"FirstName":{"type":"string","description":"The first name of the owner. This value is required when `CompanyName` is not provided."},"LastName":{"type":"string","description":"The last name of the owner. This value is required when `CompanyName` is not provided."},"CompanyName":{"type":"string","description":"The company name associated with the owner. This value is required when `FirstName` or `LastName` is not provided."},"Email":{"deprecated":true,"type":"string","description":"The primary email address of the owner"},"PhoneNumber":{"deprecated":true,"type":"string","description":"The owner’s primary phone number"},"Address1":{"deprecated":true,"type":"string","description":"The primary street address of the owner"},"Address2":{"deprecated":true,"type":"string","description":"Additional street address information pertaining to the owner"},"City":{"deprecated":true,"type":"string","description":"The city where the owner is located"},"State":{"deprecated":true,"type":"string","description":"The state where the owner is located. This attribute must not be an unincorporated US territory, i.e., (AS, FM, MH, MP, or VI) for primary address when `UseOnlinePayables` and `OwnerPaidByACH` are both `true`. This value must be valid when `UseOnlinePayables` is `true`, `OwnerPaidByACH` and `UseAlternatePayee` are both `false` or not provided."},"Zip":{"deprecated":true,"type":"string","description":"The zip code where the owner is located. Must be a string in 5-digit ZIP code format (e.g., 93013) or ZIP+4 format (e.g., 93013-0429). This attribute is required for primary address when `UseOnlinePayables` and `OwnerPaidByACH` are both `true` or when `UseOnlinePayables` is `true`, `OwnerPaidByACH` and `UseAlternatePayee` are both `false` or not provided."},"CountryCode":{"deprecated":true,"type":"string","description":"The country code of the owner (e.g. US for United states). This attribute must be `US` for primary address when `UseOnlinePayables` and `OwnerPaidByACH` are both `true` or when `UseOnlinePayables` is `true`, `OwnerPaidByACH` and `UseAlternatePayee` are both `false` or not provided."},"OwnerPaidByACH":{"type":"boolean","description":"Indicates whether the owner is paid via ACH (Automated Clearing House) transfer"},"UseOnlinePayables":{"type":"boolean","description":"Indicates whether the owner is paid via online payables"},"BankAccountRoutingNumber":{"type":"string","description":"The owner’s bank account routing number. This attribute is required when `UseOnlinePayables` and `OwnerPaidByACH` are both `true`."},"BankAccountNumber":{"type":"string","description":"The owner’s bank account number. This attribute is required when `UseOnlinePayables` and `OwnerPaidByACH` are both `true`."},"SavingsAccount":{"type":"boolean","description":"Indicates whether the owner's bank account is a checking or savings account. If `true`, the owner is using a savings account; otherwise, the bank account in use is a checking account."},"TaxpayerName":{"type":"string","description":"The name of the taxpayer associated with the owner’s account"},"TaxpayerId":{"type":"string","description":"The tax identification number of the taxpayer associated with the owner’s account"},"Send1099":{"type":"boolean","description":"Indicates whether a 1099 form is sent to the owner. Note: If `Send1099` is set to `false`, only `Send1099` will be considered in the request. The `OwnerConsentedToReceiveElectronic1099` and `Sending1099Preference` values will not be processed."},"OwnerConsentedToReceiveElectronic1099":{"type":"boolean","description":"Indicates whether the owner has consented to receive the 1099 tax form electronically. If `true`, the owner’s Email must be provided in the request."},"Sending1099Preference":{"type":"string","description":"Indicates the owner's 1099 sending preference. Valid values include \"Paper\", \"Electronic\" or \"PaperAndElectronic\".\n#### Status Options\n| Attribute            | Type   | Description                                                     |\n|----------------------|--------|-----------------------------------------------------------------|\n| Paper                | String | The 1099 will be sent to the owner by paper                     |\n| Electronic           | String | The 1099 will be sent to the owner eletronically                |\n| PaperAndElectronic | String | The 1099 will be sent to the owner electronically, and by paper |                                                                                                                                        |\n"},"EmailEcheckReceipt":{"type":"boolean","description":"Indicates whether or not to send a notification to the owner after an eCheck payment is made. It can only be set when Owner Vendor eCheck is enabled and the owner has a primary email address. Additionally, `OwnerPaidByACH` must be `true`. If Online Payables is enabled, `UseOnlinePayables` must also be `true`."},"HoldPayments":{"type":"boolean","description":"When set to `true`, bills created for the owner through the Pay Owner or Owner Draw function will not be available in the Pay Bills flow. "},"Tags":{"type":"array","description":"User-defined tag(s) that categorize the owner","items":{"type":"string"}},"UseAlternatePayee":{"type":"boolean","description":"Indicates whether or not the owner payments are submitted to an alternate person other than what is listed for Owner First, Last and/or Company Name"},"AlternatePayeeName":{"type":"string","description":"The name of the alternate payee. This attribute can be provided only when `UseAlternatePayee` is `true`."},"AlternatePaymentAddress1":{"type":"string","description":"The street address of the Alternate Payee. This attribute must be provided when `UseAlternatePayee` is `true`."},"AlternatePaymentAddress2":{"type":"string","description":"Additional street address information pertaining to the alternate payee. This attribute can be provided only when `UseAlternatePayee` is `true`."},"AlternatePaymentCity":{"type":"string","description":"The city where the alternate payee is located. This attribute must be provided when `UseAlternatePayee` is `true`."},"AlternatePaymentState":{"type":"string","description":"The state where the alternate payee is located. This attribute can be provided only when `UseAlternatePayee` is `true`. This attribute is required and must be valid when `UseOnlinePayables` is `true` and `OwnerPaidByACH` is `false` or not provided."},"AlternatePaymentPostalCode":{"type":"string","description":"The zip code where the alternate payee is located. This attribute can be provided only when `UseAlternatePayee` is `true`. Must be a string in 5-digit ZIP code format (e.g., 93013) or ZIP+4 format (e.g., 93013-0429). This attribute is required when `UseOnlinePayables` is `true` and `OwnerPaidByACH` is `false` or not provided."},"AlternatePaymentCountryCode":{"type":"string","description":"The country code of the alternate payee (e.g. US for United states). This attribute must be provided when `UseAlternatePayee` is `true`. This attribute must be `US` when `UseOnlinePayables` is `true` and `OwnerPaidByACH` is `false` or not provided."},"Emails":{"type":"array","description":"The owner's emails. This attribute must not be provided together with `Email`","items":{"$ref":"#/components/schemas/Owner.Create.Emails"}},"PhoneNumbers":{"type":"array","description":"The owner's phone number(s). This attribute must not be provided together with `PhoneNumber`","items":{"$ref":"#/components/schemas/Owner.Create.PhoneNumbers"}},"Addresses":{"type":"array","description":"The owner's address(es). This attribute must not be provided together with `Address1`, `Address2`, `City`, `State`, `Zip`, or `CountryCode`. The primary address is required when `UseOnlinePayables` and `OwnerPaidByACH` are both `true`, or when `UseOnlinePayables` is `true`, `OwnerPaidByACH` and `UseAlternatePayee` are both `false` or not provided.","items":{"$ref":"#/components/schemas/Owner.Create.Addresses"}}}},"Owner.Update":{"type":"object","properties":{"FirstName":{"type":"string","description":"The first name of the owner"},"LastName":{"type":"string","description":"The last name of the owner"},"CompanyName":{"type":"string","description":"The company name associated with the owner"},"CustomFields":{"$ref":"#/components/schemas/CustomFields.UpdateAttribute"},"Email":{"deprecated":true,"type":"string","description":"The primary email address of the owner"},"PhoneNumber":{"deprecated":true,"type":"string","description":"The owner’s primary phone number"},"Address1":{"deprecated":true,"type":"string","description":"The primary street address of the owner"},"Address2":{"deprecated":true,"type":"string","description":"Additional street address information pertaining to the owner"},"City":{"deprecated":true,"type":"string","description":"The city where the owner is located"},"State":{"deprecated":true,"type":"string","description":"The state where the owner is located. This value must be valid when `UseOnlinePayables` is `true`, `OwnerPaidByACH` and `UseAlternatePayee` are both `false` or not provided."},"Zip":{"deprecated":true,"type":"string","description":"The zip code where the owner is located. Must be a string in 5-digit ZIP code format (e.g., 93013) or ZIP+4 format (e.g., 93013-0429). This attribute is required for primary address when `UseOnlinePayables` and `OwnerPaidByACH` are both `true` or when `UseOnlinePayables` is `true`, `OwnerPaidByACH` and `UseAlternatePayee` are both `false` or not provided."},"CountryCode":{"deprecated":true,"type":"string","description":"The country code of the owner (e.g. US for United states). This attribute must be `US` for primary address when `UseOnlinePayables` and `OwnerPaidByACH` are both `true` or when `UseOnlinePayables` is `true`, `OwnerPaidByACH` and `UseAlternatePayee` are both `false` or not provided."},"OwnerPaidByACH":{"type":"boolean","description":"Indicates whether the owner is paid via ACH (Automated Clearing House) transfer"},"UseOnlinePayables":{"type":"boolean","description":"Indicates whether the owner is paid via online payables"},"BankAccountRoutingNumber":{"type":"string","description":"The owner’s bank account routing number. This attribute is required when `UseOnlinePayables` and `OwnerPaidByACH` are both `true`."},"BankAccountNumber":{"type":"string","description":"The owner’s bank account number. This attribute is required when `UseOnlinePayables` and `OwnerPaidByACH` are both `true`."},"SavingsAccount":{"type":"boolean","description":"Indicates whether the owner's bank account is a checking or savings account. If `true`, the owner is using a savings account; otherwise, the bank account in use is a checking account."},"TaxpayerName":{"type":"string","description":"The name of the taxpayer associated with the owner’s account"},"TaxpayerId":{"type":"string","description":"The tax identification number of the taxpayer associated with the owner’s account"},"Send1099":{"type":"boolean","description":"Indicates whether a 1099 form is sent to the owner. Note: If `Send1099` is set to `false`, only `Send1099` will be considered in the request. The `OwnerConsentedToReceiveElectronic1099` and `Sending1099Preference` values will not be processed."},"OwnerConsentedToReceiveElectronic1099":{"type":"boolean","description":"Indicates whether the owner has consented to receive the 1099 tax form electronically. If true, the owner’s Email must be provided in the request."},"Sending1099Preference":{"type":"string","description":"Indicates the owner's 1099 sending preference. Valid values include \"Paper\", \"Electronic\" or \"PaperAndElectronic\".\n#### Status Options\n| Attribute            | Type   | Description                                                     |\n|----------------------|--------|-----------------------------------------------------------------|\n| Paper                | String | The 1099 will be sent to the owner by paper                     |\n| Electronic           | String | The 1099 will be sent to the owner eletronically                |\n| PaperAndElectronic   | String | The 1099 will be sent to the owner electronically, and by paper |                                                                                                                                        |\n"},"EmailEcheckReceipt":{"type":"boolean","description":"Indicates whether or not to send a notification to the owner after an eCheck payment is made. It can only be set when Owner Vendor eCheck is enabled and the owner has a primary email address. Additionally, `OwnerPaidByACH` must be `true`. If Online Payables is enabled, `UseOnlinePayables` must also be `true`."},"HoldPayments":{"type":"boolean","description":"When set to `true`, bills created for the owner through the Pay Owner or Owner Draw function will not be available in the Pay Bills flow. "},"Tags":{"type":"array","description":"User-defined tag(s) that categorize the owner. Providing an array of valid strings will overwrite all existing tags. Passing in an empty array `[]` or an array of empty strings `[\"\"]` or `[\"\", \"\"]` will clear all existing tags. Passing in an array of a valid string and an empty string `[\"tag_name\", \"\"]` will result in `Tags: [\"tag_name\"]`. Passing in `null` will result in no change.","items":{"type":"string"}},"UseAlternatePayee":{"type":"boolean","description":"Indicates whether or not the owner payments are submitted to an alternate person other than what is listed for Owner First, Last and/or Company Name"},"AlternatePayeeName":{"type":"string","description":"The name of the alternate payee."},"AlternatePaymentAddress1":{"type":"string","description":"The street address of the Alternate Payee."},"AlternatePaymentAddress2":{"type":"string","description":"Additional street address information pertaining to the alternate payee."},"AlternatePaymentCity":{"type":"string","description":"The city where the alternate payee is located."},"AlternatePaymentState":{"type":"string","description":"The state where the alternate payee is located. This attribute is required and must be valid when `UseOnlinePayables` is `true` and `OwnerPaidByACH` is `false` or not provided."},"AlternatePaymentPostalCode":{"type":"string","description":"The zip code where the alternate payee is located. Must be a string in 5-digit ZIP code format (e.g., 93013) or ZIP+4 format (e.g., 93013-0429). This attribute is required when `UseOnlinePayables` is `true` and `OwnerPaidByACH` is `false` or not provided."},"AlternatePaymentCountryCode":{"type":"string","description":"The country code of the alternate payee (e.g. US for United states). This attribute must be `US` when `UseOnlinePayables` is `true` and `OwnerPaidByACH` is `false` or not provided."},"Emails":{"type":"array","description":"The owner's emails. This attribute must not be provided together with `Email`. Passing any number of emails will replace all existing email addresses for the owner.","items":{"$ref":"#/components/schemas/Owner.Create.Emails"}},"PhoneNumbers":{"type":"array","description":"The owner's phone number(s). This attribute must not be provided together with `PhoneNumber`. Passing any number of phone numbers will replace all existing phone numbers for the owner.","items":{"$ref":"#/components/schemas/Owner.Create.PhoneNumbers"}},"Addresses":{"type":"array","description":"The owner's address(es). This attribute must not be provided together with `Address1`, `Address2`, `City`, `State`, `Zip`, or `CountryCode`. Passing any number of addresses will replace all existing addresses for the owner. The primary address is required when `UseOnlinePayables` and `OwnerPaidByACH` are both `true`, or when `UseOnlinePayables` is `true`, `OwnerPaidByACH` and `UseAlternatePayee` are both `false` or not provided.","items":{"$ref":"#/components/schemas/Owner.Create.Addresses"}}}},"Owners":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Owner"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/owners?page[number]=2"}}},"Owner.BulkCreate":{"title":"Owner","required":["ReferenceId"],"allOf":[{"$ref":"#/components/schemas/BulkCreateOwner"}]},"BulkCreateOwner":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual owner in the bulk-creation of owners."},"FirstName":{"type":"string","description":"The first name of the owner. This value is required when `CompanyName` is not provided."},"LastName":{"type":"string","description":"The last name of the owner. This value is required when `CompanyName` is not provided."},"CompanyName":{"type":"string","description":"The company name associated with the owner. This value is required when `FirstName` or `LastName` is not provided."},"OwnerPaidByACH":{"type":"boolean","description":"Indicates whether the owner is paid via ACH (Automated Clearing House) transfer"},"UseOnlinePayables":{"type":"boolean","description":"Indicates whether the owner is paid via online payables"},"BankAccountRoutingNumber":{"type":"string","description":"The owner’s bank account routing number. This attribute is required when `UseOnlinePayables` and `OwnerPaidByACH` are both `true`."},"BankAccountNumber":{"type":"string","description":"The owner’s bank account number. This attribute is required when `UseOnlinePayables` and `OwnerPaidByACH` are both `true`."},"SavingsAccount":{"type":"boolean","description":"Indicates whether the owner's bank account is a checking or savings account. If `true`, the owner is using a savings account; otherwise, the bank account in use is a checking account."},"TaxpayerName":{"type":"string","description":"The name of the taxpayer associated with the owner’s account"},"TaxpayerId":{"type":"string","description":"The tax identification number of the taxpayer associated with the owner’s account"},"Send1099":{"type":"boolean","description":"Indicates whether a 1099 form is sent to the owner. Note: If Send1099 is set to false, only Send1099 will be considered in the request. TheOwnerConsentedToReceiveElectronic1099 and Sending1099Preference values will not be processed."},"OwnerConsentedToReceiveElectronic1099":{"type":"boolean","description":"Indicates whether the owner has consented to receive the 1099 tax form electronically. If true, the owner’s Email must be provided in the request."},"Sending1099Preference":{"type":"string","description":"Indicates the owner's 1099 sending preference. Valid values include \"Paper\", \"Electronic\" or \"PaperAndElectronic\".\n#### Status Options\n| Attribute            | Type   | Description                                                     |\n|----------------------|--------|-----------------------------------------------------------------|\n| Paper                | String | The 1099 will be sent to the owner by paper                     |\n| Electronic           | String | The 1099 will be sent to the owner eletronically                |\n| PaperAndElectronic | String | The 1099 will be sent to the owner electronically, and by paper |                                                                                                                                        |\n"},"EmailEcheckReceipt":{"type":"boolean","description":"Indicates whether or not to send a notification to the owner after an eCheck payment is made. It can only be set when Owner Vendor eCheck is enabled and the owner has a primary email address. Additionally, `OwnerPaidByACH` must be `true`. If Online Payables is enabled, `UseOnlinePayables` must also be `true`."},"HoldPayments":{"type":"boolean","description":"When set to `true`, bills created for the owner through the Pay Owner or Owner Draw function will not be available in the Pay Bills flow. "},"Tags":{"type":"array","description":"User-defined tag(s) that categorize the owner","items":{"type":"string"}},"UseAlternatePayee":{"type":"boolean","description":"Indicates whether or not the owner payments are submitted to an alternate person other than what is listed for Owner First, Last and/or Company Name"},"AlternatePayeeName":{"type":"string","description":"The name of the alternate payee. This attribute can be provided only when `UseAlternatePayee` is `true`."},"AlternatePaymentAddress1":{"type":"string","description":"The street address of the Alternate Payee. This attribute must be provided when `UseAlternatePayee` is `true`."},"AlternatePaymentAddress2":{"type":"string","description":"Additional street address information pertaining to the alternate payee. This attribute can be provided only when `UseAlternatePayee` is `true`."},"AlternatePaymentCity":{"type":"string","description":"The city where the alternate payee is located. This attribute must be provided when `UseAlternatePayee` is `true`."},"AlternatePaymentState":{"type":"string","description":"The state where the alternate payee is located. This attribute can be provided only when `UseAlternatePayee` is `true`. This attribute is required and must be valid when `UseOnlinePayables` is `true` and `OwnerPaidByACH` is `false` or not provided."},"AlternatePaymentPostalCode":{"type":"string","description":"The zip code where the alternate payee is located. This attribute can be provided only when `UseAlternatePayee` is `true`. Must be a string in 5-digit ZIP code format (e.g., 93013) or ZIP+4 format (e.g., 93013-0429). This attribute is required when `UseOnlinePayables` is `true` and `OwnerPaidByACH` is `false` or not provided."},"AlternatePaymentCountryCode":{"type":"string","description":"The country code of the alternate payee (e.g. US for United states). This attribute must be provided when `UseAlternatePayee` is `true`. This attribute must be `US` when `UseOnlinePayables` is `true` and `OwnerPaidByACH` is `false` or not provided."},"Emails":{"type":"array","description":"The owner's emails.","items":{"$ref":"#/components/schemas/Owner.Create.Emails"}},"PhoneNumbers":{"type":"array","description":"The owner's phone number(s).","items":{"$ref":"#/components/schemas/Owner.Create.PhoneNumbers"}},"Addresses":{"type":"array","description":"The owner's address(es). The primary address is required when `UseOnlinePayables` and `OwnerPaidByACH` are both `true`, or when `UseOnlinePayables` is `true`, `OwnerPaidByACH` and `UseAlternatePayee` are both `false` or not provided.","items":{"$ref":"#/components/schemas/Owner.Create.Addresses"}}}},"OwnerById":{"type":"object","properties":{"data":{"type":"object","$ref":"#/components/schemas/Owner"}}},"Owner.Addresses":{"properties":{"Address1":{"type":"string","description":"The primary street address of the owner"},"Address2":{"type":"string","description":"The secondary street address of the owner"},"City":{"type":"string","description":"The city where the owner resides"},"State":{"type":"string","example":"CA","description":"The state where the owner resides"},"PostalCode":{"type":"string","description":"The postal code where the owner resides"},"CountryCode":{"type":"string","example":"US","description":"The country code of the owner (e.g. \"US\" for United States)"},"IsPrimary":{"type":"boolean","description":"Indicates whether the address provided is the owner’s primary address"}}},"Owner.Create.Addresses":{"required":["Address1","City","CountryCode"],"properties":{"Address1":{"type":"string","description":"The primary street address of the owner"},"Address2":{"type":"string","description":"The secondary street address of the owner"},"City":{"type":"string","description":"The city where the owner resides"},"State":{"type":"string","example":"CA","description":"The state where the owner resides. This attribute must not be an unincorporated US territory, i.e., (AS, FM, MH, MP, or VI) for primary address when `UseOnlinePayables` and `OwnerPaidByACH` are both `true`. This value must be valid when `UseOnlinePayables` is `true`, `OwnerPaidByACH` and `UseAlternatePayee` are both `false` or not provided."},"PostalCode":{"type":"string","description":"The postal code where the owner resides. Must be a string in 5-digit ZIP code format (e.g., 93013) or ZIP+4 format (e.g., 93013-0429). This attribute is required for primary address when `UseOnlinePayables` and `OwnerPaidByACH` are both `true` or when `UseOnlinePayables` is `true`, `OwnerPaidByACH` and `UseAlternatePayee` are both `false` or not provided."},"CountryCode":{"type":"string","example":"US","description":"The country code of the owner (e.g. \"US\" for United States). This attribute must be `US` for primary address when `UseOnlinePayables` and `OwnerPaidByACH` are both `true` or when `UseOnlinePayables` is `true`, `OwnerPaidByACH` and `UseAlternatePayee` are both `false` or not provided."},"IsPrimary":{"type":"boolean","description":"Indicates whether the address provided is the owner’s primary address"}}},"Owner.Emails":{"properties":{"EmailAddress":{"type":"string","description":"The email address"},"IsPrimary":{"type":"boolean","description":"Indicates whether the email address provided is the owner’s primary email address"}}},"Owner.Create.Emails":{"required":["EmailAddress"],"properties":{"EmailAddress":{"type":"string","description":"The owner's email address"},"IsPrimary":{"type":"boolean","description":"Indicates whether the email address provided is the owner’s primary email address"}}},"Owner.PhoneNumbers":{"properties":{"AdditionalDetails":{"type":"string","description":"Additional detailed information pertaining to the phone number associated with the owner"},"IsPrimary":{"type":"boolean","description":"Indicates whether the phone number provided is the owner’s main contact number"},"Label":{"type":"string","enum":["Fax","Home","Mobile","Office"],"description":"The label of the phone number, e.g. 'Home'"},"Number":{"type":"string","description":"The owner's phone number"}}},"Owner.Create.PhoneNumbers":{"required":["Number"],"properties":{"AdditionalDetails":{"type":"string","description":"Additional detailed information pertaining to the phone number associated with the owner"},"IsPrimary":{"type":"boolean","description":"Indicates whether the phone number provided is the owner’s main contact number"},"Label":{"type":"string","enum":["Fax","Home","Mobile","Office"],"description":"The label of the phone number, e.g. 'Home'"},"Number":{"type":"string","description":"The owner's phone number"}}},"Owners.Notes":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Owner.Note"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/owners/notes?page[number]=2"}}},"Owner.Note":{"type":"object","properties":{"Body":{"type":"string","description":"A brief informative message about the owner note. A owner note cannot exceed `63,535` characters."},"EntityId":{"type":"string","format":"uuid","description":"The owner to which the note will be attached"},"LastUpdatedAt":{"type":"string","description":"The date the owner note’s details were last updated"},"Id":{"type":"string","format":"uuid","description":"Unique identifier of the note associated with the owner"},"NoteId":{"deprecated":true,"type":"string","format":"uuid","description":"Unique identifier of the note associated with the owner. Deprecated in favor of `Id`."}}},"Owner.Attachments":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Owner.Attachment"}},"next_page_path":{"example":"/api/v0/owners/attachments?page[number]=2","description":"The URL path to the next page of responses"}}},"Owner.Attachment":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the attachment"},"Name":{"type":"string","description":"The name given to describe the attachment"},"ContentType":{"type":"string","description":"The content type of the owner attachment. An example content type is a photo or a PDF.","example":"application/pdf"},"CreatedAt":{"type":"string","format":"date-time","description":"The date and time the owner attachment was created by an AppFolio Property Manager user"},"EntityId":{"type":"string","format":"uuid","description":"Unique identifier of the owner associated with the attachment"},"URL":{"type":"string","description":"The link to download the file in the attachment"},"FolderId":{"type":"string","format":"uuid","description":"Unique identifier of the folder that contains the attachment. Null if the attachment is not in a folder."},"SharedWithOwners":{"type":"boolean","description":"Whether the attachment is currently shared with the owners of the property in the Owner Portal"}}},"OwnerGroup":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the owner group","format":"uuid"},"Current":{"type":"boolean","description":"The current owner(s) of the properties in the property group"},"FiscalYearEnd":{"type":"integer","description":"The month number representing the end of the fiscal year"},"LastUpdatedAt":{"type":"string","format":"date-time","description":"The date owners groups details were last updated"},"Owners":{"type":"array","description":"List of owners within an ownership group\n#### Owner Attributes\n| Attributes       | Type                       | Description                                        |  Notes |\n|------------------|----------------------------|----------------------------------------------------|--------|\n| Id               | String         | Unique identifier an owner within an owner group | UUID format e.g. \"38a5a5bb-dc30-49a2-b175-1de0d1488c43\" |\n| ContractExpiration      | String\u003cdate\u003e                    |  The date when the owner's contract expires. The date must be in YYYY-MM-DD format.     |\n| CompanyName      | String                     | Optional display name of the owner's company           |\n| Email            | String        | The owner's primary email address                              |\n| PhoneNumber      | String  | Primary phone number                               |\n| FirstName        | String                     | The owner's first name                                 |\n| LastName         | String                     | The owner's last name                                  |\n| Link             | String\u003curi\u003e                | A link to the owner's page in the AppFolio Property Manager. |\n| MaintenanceNotes | String                     | Maintenance notes for the properties owned         |\n| HiddenAt         | String    | When the owner group was labeled no longer active by an AppFolio Property Manager user |  Valid format is in ISO 8601 format: \"YYYY-MM-DDTHH:mm:ssZ\"  e.g. \"2022-06-00T12:00:00Z\". The default time zone is Coordinated Universal Time (UTC).                                                |\n| IsCompany        | Boolean                    | Indicates whether or not the owner identifies as a company                     |\n| Address1         | String                     | The primary street address of the owner            |\n| Address2         | String                     | Additional street address information pertaining to the owner |\n| City             | String                     | The city where the owner is located                |\n| State            | String                     | The state where the owner is located               |\n| Zip              | String                     | The zip code where the owner is located            |\n| CountryCode      | String                     | The country code of the owner (e.g. \"JP\" for Japan)  |\n| PercentOwned      | String\u003cdecimal\u003e                     | The percentage of ownership assigned to this owner. The sum of PercentOwned across all owners must equal 100%. |\n","items":{"$ref":"#/components/schemas/OwnerGroupOwner"}},"OwnerPacketBasis":{"type":"string","enum":["Cash","Accrual"],"description":"The accounting method used for owner packet calculations. Valid values are \"Cash\" or \"Accrual\"."},"PaymentType":{"type":"string","enum":["Net Income","Flat"],"description":"The type of payment distribution for the owners. Valid values are \"Net Income\" or \"Flat\"."},"PaymentAmount":{"type":"string","format":"decimal","example":"2400.00","description":"The fixed payment amount to distribute to owners. This value is required when PaymentType is \"Flat\"."},"PropertyId":{"type":"string","description":"Unique identifier of the property associated with all owners within the owner group","format":"uuid"},"StartDate":{"type":"string","format":"date","example":"2021-09-01","description":"The date when this ownership group becomes effective. The date must be in YYYY-MM-DD format and cannot be set in the future. When updating an existing property's ownership, this date must be later than the current ownership group's StartDate. Creating a new owner group will automatically set the previous owner group's EndDate to one day before this StartDate to maintain ownership continuity."},"ReserveFunds":{"type":"string","format":"decimal","example":"2400.00","description":"The amount of funds to maintain in reserve for the property"}}},"OwnerGroupOwner":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of an owner within an owner group"},"ContractExpiration":{"type":"string","format":"date","example":"2021-09-01","description":"The date when the owner's contract expires. The date must be in YYYY-MM-DD format."},"CompanyName":{"type":"string","description":"The company name associated with the owner"},"CustomFields":{"$ref":"#/components/schemas/CustomFields.Attribute"},"Email":{"type":"string","description":"The email address of the owner"},"FirstName":{"type":"string","description":"The first name of the owner"},"HiddenAt":{"type":"string","format":"date-time","description":"When the owner was marked inactive by an AppFolio Property Manager user"},"IsCompany":{"type":"boolean","description":"Indicates whether or not the owner identifies as a company"},"LastName":{"type":"string","description":"The last name of the owner"},"Link":{"type":"string","format":"uri","description":"A link to the owner's page in the AppFolio Property Manager"},"MaintenanceNotes":{"type":"string","description":"Maintenance notes for the properties owned"},"PhoneNumber":{"type":"string","description":"The owner’s phone number"},"Address1":{"type":"string","description":"The primary street address of the owner"},"Address2":{"type":"string","description":"Additional street address information pertaining to the owner"},"City":{"type":"string","description":"The city where the owner is located"},"State":{"type":"string","description":"The state where the owner is located"},"Zip":{"type":"string","description":"The zip code where the owner is located"},"CountryCode":{"type":"string","description":"The country code of the owner (e.g. US for United states)"},"PercentOwned":{"type":"string","format":"decimal","description":"The percentage of ownership assigned to this owner. The sum of PercentOwned across all owners must equal 100%.","example":"56.00"}}},"OwnerGroups":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OwnerGroup"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/owner_groups?page[number]=2"}}},"OwnerGroup.Create":{"type":"object","required":["OwnerPacketBasis","PaymentType","ReserveFunds","FiscalYearEnd","StartDate","PropertyId","Owners"],"properties":{"FiscalYearEnd":{"type":"integer","description":"The month number representing the end of the fiscal year"},"Owners":{"type":"array","description":"Array of owners and their associated ownership details for the property","items":{"required":["OwnerId","PercentOwned"],"properties":{"OwnerId":{"type":"string","description":"Unique identifier of the owner","format":"uuid"},"PercentOwned":{"type":"string","format":"decimal","description":"The percentage of ownership assigned to this owner. The sum of PercentOwned across all owners must equal 100%.","example":"56.00"},"ContractExpiration":{"type":"string","format":"date","example":"2021-09-01","description":"The date when the owner's contract expires. The date must be in YYYY-MM-DD format."}}}},"OwnerPacketBasis":{"type":"string","enum":["Cash","Accrual"],"description":"The accounting method used for owner packet calculations. Valid values are \"Cash\" or \"Accrual\"."},"PaymentType":{"type":"string","enum":["Net Income","Flat"],"description":"The type of payment distribution for the owners. Valid values are \"Net Income\" or \"Flat\"."},"PaymentAmount":{"type":"string","format":"decimal","example":"2400.00","description":"The fixed payment amount to distribute to owners. This value is required when PaymentType is \"Flat\"."},"PropertyId":{"type":"string","description":"Unique identifier of the property associated with all owners within the owner group","format":"uuid"},"StartDate":{"type":"string","format":"date","example":"2021-09-01","description":"The date when this ownership group becomes effective. The date must be in YYYY-MM-DD format and cannot be set in the future. When updating an existing property's ownership, this date must be later than the current ownership group's StartDate. Creating a new owner group will automatically set the previous owner group's EndDate to one day before this StartDate to maintain ownership continuity."},"ReserveFunds":{"type":"string","format":"decimal","example":"2400.00","description":"The amount of funds to maintain in reserve for the property"}}},"OwnerGroup.Update":{"type":"object","properties":{"FiscalYearEnd":{"type":"integer","description":"The month number representing the end of the fiscal year"},"OwnerPacketBasis":{"type":"string","enum":["Cash","Accrual"],"description":"The accounting method used for owner packet calculations. Valid values are \"Cash\" or \"Accrual\"."},"PaymentType":{"type":"string","enum":["Net Income","Flat"],"description":"The type of payment distribution for the owners. Valid values are \"Net Income\" or \"Flat\"."},"PaymentAmount":{"type":"string","format":"decimal","example":"2400.00","description":"The fixed payment amount to distribute to owners. This value is required when PaymentType is \"Flat\"."},"StartDate":{"type":"string","format":"date","example":"2021-09-01","description":"The date when this ownership group becomes effective. The date must be in YYYY-MM-DD format and cannot be set in the future. When updating an existing property's ownership, this date must be later than the current ownership group's StartDate. Creating a new owner group will automatically set the previous owner group's EndDate to one day before this StartDate to maintain ownership continuity."},"ReserveFunds":{"type":"string","format":"decimal","example":"2400.00","description":"The amount of funds to maintain in reserve for the property"}}},"Payables":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Payable"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/payables?page[number]=2"}}},"Payable":{"type":"object","properties":{"TotalAmount":{"type":"string","format":"decimal","description":"The total amount of the payable. Ensure that the total amount is equal to the total of all line items summed.","example":"56.00"},"BankAccountId":{"type":"string","description":"Unique identifier of the bank account associated with the payable","format":"uuid"},"CheckNumber":{"type":"string","description":"The check number of the payable","format":"uuid"},"CreatedAt":{"type":"string","description":"The date the payable was created","example":"2015-03-11T11:33:35Z"},"Id":{"type":"string","description":"Unique identifier of the payable","format":"uuid","example":"e389edea-9aac-11ee-b9d1-0242ac120002"},"LineItems":{"$ref":"#/components/schemas/Payables.LineItems"},"VendorId":{"type":"string","format":"uuid","description":"Unique identifier of the vendor owed the payable"}}},"Payables.LineItems":{"title":"LineItem","type":"array","description":"Array of line item attributes present on the payable(s)\n#### Payable line items\n| Attributes   | Type                 | Description                                 |\n|--------------|----------------------|---------------------------------------------|\n| Amount       | String               | The amount due for the line item            |\n| BillId       | String               | The bill ID relevant to the line item       |\n| Description  | String               | A brief description of the line item        |\n| Id           | String               | Unique identifier of line item              |\n| PayerAddress | Array                | Array of payer address details              |\n| PropertyId   | String               | The property ID relevant to the line item   |\n| PropertyName | String               | The property name relevant to the line item |\n","items":{"properties":{"Amount":{"type":"string","format":"decimal","description":"The amount due for the line item","example":"56.00"},"BillId":{"type":"string","format":"uuid","description":"The bill ID relevant to the line item"},"Description":{"type":"string","description":"A brief description of line item","example":"Utility"},"Id":{"type":"string","description":"Unique identifier of the payable line item","example":"e491edea-9aac-11ee-b9d1-0242ac120002"},"PayerAddress":{"$ref":"#/components/schemas/PayerAddress"},"PropertyId":{"type":"string","description":"Unique identifier of the property associated with the payable line item","format":"uuid"},"PropertyName":{"type":"string","description":"The name of the property associated with the payable line item","example":"Broadway Lake Apartments"}}}},"PayerAddress":{"type":"object","description":"The payer's address information","properties":{"Address1":{"type":"string","example":"1175 Davis Lane","description":"The primary street address of the payer"},"Address2":{"type":"string","example":"124 Jones Lane","description":"Additional street address information of the payer"},"City":{"type":"string","example":"New York","description":"The city where the payer resides"},"CountryCode":{"type":"string","example":"US","description":"The country code where the payer resides (e.g. \"US\" for United States)"},"PostalCode":{"type":"string","format":"date","example":"10024","description":"The postal code where the payer resides"},"State":{"type":"string","example":"New York","description":"The state where the payer resides"}}},"PendingChargeBatchById":{"properties":{"data":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the pending charge batch retrieved","format":"uuid"},"BatchType":{"$ref":"#/components/schemas/PendingChargeBatch.BatchType"},"Charges":{"$ref":"#/components/schemas/PendingChargeBatch.Charges"},"Number":{"type":"integer","description":"The sequential batch number of the charge batch"},"PostMonth":{"type":"string","format":"date","example":"2021-09-01","description":"The month this batch of charges is from"},"PropertyId":{"type":"string","description":"Unique identifier of the property where charged tenant resides","format":"uuid"},"Status":{"$ref":"#/components/schemas/PendingChargeBatch.Status"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the pending charge batch's details were last updated"}}}}},"PendingChargeBatch":{"type":"object","properties":{"Id":{"description":"Unique identifier of the pending charge batch retrieved","type":"string","format":"uuid"},"BatchType":{"$ref":"#/components/schemas/PendingChargeBatch.BatchType"},"Number":{"type":"integer","description":"The sequential batch number of the charge batch"},"PostMonth":{"type":"string","format":"date","example":"2021-09-01","description":"The month this batch of charges is from"},"PropertyId":{"type":"string","description":"Unique identifier of the property associated with the pending charge batch","format":"uuid"},"Status":{"$ref":"#/components/schemas/PendingChargeBatch.Status"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the pending charge batch's details were last updated"}}},"PendingChargeBatches":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PendingChargeBatch"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/pending_charge_batches?page[number]=2"}}},"ListingsPhoto":{"type":"object","properties":{"ContentType":{"type":"string","description":"The content type of the photo","example":"image/jpg"},"ThumbnailUrl":{"type":"string","description":"The URL of the thumbnail sized photo"},"Url":{"type":"string","description":"The URL of the large sized photo"}}},"Portfolio":{"type":"object","properties":{"Id":{"type":"string","example":"3245edfe-a17d-11ec-b909-0242ac120002","description":"Unique identifier of the portfolio","format":"uuid"},"Default":{"type":"boolean","description":"Indicates whether or not the portfolio is the default portfolio"},"Name":{"type":"string","example":"West Creek Portfolio","description":"The name of the portfolio"},"PropertyIds":{"type":"array","example":["ab0964fb-bc9b-4f9a-b649-01cfe309cb52","ac0964fb-bc9b-4f9a-b649-01cfe309cb52"],"description":"Unique identifier(s) of the properties associated with the portfolio. **Note**: The portfolio endpoint returns hidden properties. To associate hidden properties yielded from this endpoint with those from the Properties endpoint, ensure the `IncludeHidden` filter is enabled.","format":"uuid"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the portfolio's details were last updated"}}},"Portfolios":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Portfolio"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/portfolios?page[number]=2"}}},"Portfolio.Update":{"type":"object","properties":{"Name":{"type":"string","example":"West Creek Portfolio","description":"The name of the portfolio"},"PropertyIds":{"type":"array","example":["ab0964fb-bc9b-4f9a-b649-01cfe309cb52","ac0964fb-bc9b-4f9a-b649-01cfe309cb52"],"description":"Unique identifier(s) of the properties to add or remove from the portfolio.\n- The portfolio you are updating will only include the properties passed in this array.\n- If `PropertyIds` previously in the portfolio are excluded from the updated array, they'll be added to the Default portfolio in APM\n- A property can only be linked to a single portfolio. If a `PropertyId` previously associated with another portfolio is passed, it will be removed from that association.\n"}}},"Prepayment.BulkCreate":{"title":"Prepayment","required":["ReferenceId","Amount","OccupancyId","PrepaymentDate","PrepaymentGlAccountId"],"allOf":[{"$ref":"#/components/schemas/BulkCreatePrepayment"}]},"BulkCreatePrepayment":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual prepayments in the bulk-creation of prepayments."},"Amount":{"type":"string","description":"The amount paid for this GL Account. Must be a positive number."},"GlAccountApplyOption":{"type":"string","description":"The GL Account you want this prepayment to apply to. Must be either a UUID of a GL Account, 'any' or 'none'"},"OccupancyId":{"type":"string","format":"uuid","description":"The UUID of the occupancy associated with the primary tenant"},"Remarks":{"type":"string","description":"Remarks about the payment. Will only be visible internally for the clients"},"Reference":{"type":"string","description":"An external value, which will only be visible on owner statements"},"PrepaymentDate":{"type":"string","description":"The move-in date for this occupancy","format":"date","example":"2024-12-01"},"PrepaymentGlAccountId":{"type":"string","format":"uuid","description":"UUID for the Gl Account used for this prepayment "}}},"Property":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the property retrieved","format":"uuid"},"CustomFields":{"$ref":"#/components/schemas/CustomFields.Attribute"},"HasHomeWarrantyCoverage":{"type":"boolean","description":"Indicates whether or not the property has home warranty coverage"},"HomeWarrantyInfo":{"type":"object","description":"Contains information about the property's home warranty coverage.","properties":{"CompanyName":{"type":"string","description":"The name of the company providing the home warranty coverage"},"Expiration":{"type":"string","format":"date","description":"The expiration date of the home warranty policy"},"PolicyNumber":{"type":"string","description":"Unique reference number associated with the home warranty policy"},"ContactNumber":{"type":"string","description":"The contact phone number for the home warranty company or policy administrator"}}},"HiddenAt":{"type":"string","format":"date-time","description":"When the property was placed into an inactive state by an AppFolio Property Manager user"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the property group's details were last updated"},"LeaseFeePolicy":{"type":"object","description":"Contains details about the property’s lease fee policy","properties":{"FeeType":{"type":"string","enum":["Percent","Flat"],"description":"The property’s lease fee type. This type determines how much is billed to a property per executed lease by the management company.\n#### Lease Fee Type Required Attributes\n| FeeType            | Required Attributes   |\n|--------------------|-----------------------|\n| Flat               | FlatAmount            |\n| Percent            | Percentage            |\n"},"FlatAmount":{"type":"string","format":"decimal","description":"The dollar amount billed to an owner per move in. The attribute can only be used when LeaseFeeType is set to 'Flat'. If no value is provided, the default is 0.0"},"Percentage":{"type":"string","format":"decimal","description":"The percentage an owner is billed based on a full month’s rent amount of an executed lease after move in, rounded to 2 decimal places. The attribute can only be used when LeaseFeeType is set to 'Percent'. If no value is provided, will default to 0.0"}}},"Link":{"type":"string","format":"uri","description":"A link to the property page in the AppFolio Property Manager"},"PortfolioId":{"type":"string","description":"Unique identifier of the portfolio associated with the property","format":"uuid"},"PropertyGroupIds":{"type":"array","description":"Unique identifier(s) of the property group(s) associated with the property","example":["3245edfe-a17d-11ec-b909-0242ac120002","aecf8210-a17d-11ec-b909-0242ac120002"],"items":{"type":"string"}},"PropertyType":{"type":"string","enum":["Commercial","Manufactured-Housing","Mixed-Use","Multi-Family","Self-Storage","Single-Family","Student-Housing","Vacation"],"description":"The type of property\n#### Property Type Options\n| Options         | Description                                |\n|-----------------|--------------------------------------------|\n| Single-Family   | The property is for single-family use                   |\n| Multi-Family    | The property is for multiple family use                            |\n| Student-Housing | The property houses students, and supports by-the-bed units. |\n| Commercial      | The property is used for commercial purposes                                 |\n| Mixed-Use       | The property has mixed usages                                  |\n| Vacation        | The property is used for vacations                                |\n| Manufactured-Housing    | The property is built offsite, and transferred to sites of use                               |\n| Self-Storage        | The property is used for self-storage                            |\n"},"PostedToInternet":{"type":"boolean","description":"Indicates whether the Single-Family (SFR) property has been posted to a third-party listings page. If `true,` the unit is displayed on a third-party listings page and accepts applications. If false, the unit is not displayed on the third-party listings page. This field will return null if the property type is not SFR."},"PostedToWebsite":{"type":"boolean","description":"Indicates whether a vacant Single-Family (SFR) property was posted to the AppFolio listings page. If `true`, the unit is displayed on the AppFolio listings page and accepts applications. If false, the unit is not displayed on the AppFolio listings page. This field will return null if the property type is not SFR. "},"TenantPortalLink":{"type":"string","description":"Link that can be used to direct a resident to their tenant portal"}},"allOf":[{"$ref":"#/components/schemas/Property.Base"}]},"Properties.Attachments":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Properties.Attachment"}},"next_page_path":{"example":"/api/v0/properties/attachments?page[number]=2","description":"The URL path to the next page of responses"}}},"Properties.Attachment":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the attachment"},"Name":{"type":"string","description":"The name given to describe the attachment"},"ContentType":{"type":"string","description":"The content type of the attachment. An example content type is a photo or a PDF.","example":"application/pdf"},"CreatedAt":{"type":"string","format":"date-time","description":"The date and time the attachment was created by an AppFolio Property Manager user"},"EntityId":{"type":"string","format":"uuid","description":"Unique identifier of the property associated with the attachment"},"FolderId":{"type":"string","format":"uuid","description":"Unique identifier of the folder the attachment is filed under, if any"},"URL":{"type":"string","description":"The link to download the file in the attachment"}}},"Properties.Notes":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Properties.Note"}},"next_page_path":{"example":"/api/v0/properties/notes?page[number]=2","description":"The URL path to the next page of responses"}}},"Properties.Note":{"type":"object","properties":{"Body":{"type":"string","description":"A brief informative message about the property note. A property note cannot exceed `63,535` characters."},"EntityId":{"type":"string","format":"uuid","description":"The property to which the note will be attached"},"LastUpdatedAt":{"type":"string","description":"The date the property note’s details were last updated"},"Id":{"type":"string","format":"uuid","description":"Unique identifier of the note associated with the property"},"NoteId":{"deprecated":true,"type":"string","format":"uuid","description":"Unique identifier of the note associated with the property. Deprecated in favor of `Id`."}}},"Property.Base":{"type":"object","properties":{"AdminFee":{"type":"number","description":"The admin fee associated with the property"},"Amenities":{"type":"array","description":"The amenities associated with the property","items":{"type":"string"}},"CatsAllowed":{"type":"string","enum":["Yes","No"],"description":"The property’s cat policy. Valid values include “Yes”, “No” or `null`. A null value indicates that the property may not have specified a policy for cats.\n| Attribute | Type   | Description                                |\n|-----------|--------|--------------------------------------------|\n| Yes       | String | Cats are permitted on the property         |\n| No        | String | Cats are not permitted on the property     |\n| null      | String | No cat policy has been set for the property |\n"},"Class":{"type":"string","enum":["A+","A","A-","B+","B","B-","C+","C","C-"],"description":"Indicates the type and quality of the property based on factors such as age, location, amenities, and overall condition. Valid values for the `Class` attribute include “A+“, “A“, “A-“, “B+”, “B”, “B-”, “C+“, “C“, and “C-“.\n#### Property Class Options\n| Attribute | Type   | Description                                                        |\n|-----------|--------|--------------------------------------------------------------------|\n| A+        | String | Exceptional properties with top amenities and prime location       |\n| A         | String | High-quality properties with above-average amenities               |\n| A-        | String | Well-maintained properties in desirable areas                      |\n| B+        | String | Properties with good amenities and minor issues                    |\n| B         | String | Properties with average amenities and minor maintenance issues     |\n| B-        | String | Properties with below-average amenities and some maintenance needs |\n| C+        | String | Properties needing renovation, with limited amenities              |\n| C         | String | Properties in fair condition with minimal amenities                |\n| C-        | String | Properties in poor condition with minimal amenities                |\n"},"CurrentManagementFeePolicy":{"$ref":"#/components/schemas/CurrentManagementFeePolicy"},"DogsAllowed":{"type":"string","enum":["Large \u0026 Small","Small Only","No"],"description":"| Attribute     | Type   | Description                                    |\n|---------------|--------|------------------------------------------------|\n| Large \u0026 Small | String | Large and small dogs are permitted on property |\n| Small Only    | String | Only small dogs are permitted on the property  |\n| No            | String | No dogs are permitted on the property          |\n| null          | String | No dog policy has been set for the property    |\n"},"InsuranceExpiration":{"type":"string","description":"The date the property’s insurance expires","format":"date","example":"2020-12-01"},"MaintenanceLimit":{"type":"string","format":"decimal","description":"The dollar amount limit to not exceed for maintenance"},"MaintenanceNotes":{"type":"string","description":"A brief informative message about the property's maintenance"},"ManagementEndDate":{"type":"string","format":"date-time","description":"The date when the current management of the property ended"},"ManagementEndReason":{"type":"string","enum":["Foreclosure","Maintenance","Management Company Concerns","Management Company Terminated","Owner Moved In","Owner Self-Managing","Owner Sold","Owner Terminated Management","Property Uninhabitable/Demolition","Tenant Placement","Other"],"description":"The reason for the end of the current management of the property\n#### Management End Reason Options\n| Management End Reasons            | Type   | Description                                                                       |\n|-----------------------------------|--------|-----------------------------------------------------------------------------------|\n| Foreclosure                       | String | Property management ended due to foreclosure                                      |\n| Maintenance                       | String | Property management ended due to completion of maintenance tasks                  |\n| Management Company Concerns       | String | Property management ended due to concerns raised by the management company        |\n| Management Company Terminated     | String | Property management ended because the management company terminated the agreement |\n| Owner Moved In                    | String | Property management ended because the owner moved into the property               |\n| Owner Self-Managing               | String | Property management ended because the owner is managing the property themselves   |\n| Owner Terminated Management       | String | Property management ended because the owner terminated the management agreement   |\n| Property Uninhabitable/Demolition | String | Property management ended because the property uninhabitable or was demolished    |\n| Tenant Placement                  | String | Property management ended after tenant placement                                  |\n| Other                             | String | Property management ended due to a reason not listed\n"},"ManagementStartDate":{"type":"string","format":"date-time","description":"The date when the current management of the property began"},"Name":{"type":"string","description":"The name of the property"},"NsfFee":{"type":"number","description":"The non-sufficient funds (NSF) fee associated with the property. This fee is charged when a payment made for the property is rejected due to insufficient funds in the payer's account."},"SiteManager":{"type":"object","$ref":"#/components/schemas/Property.SiteManager"},"UnitEntryPreAuthorized":{"type":"boolean","description":"Indicates whether or not entry to the unit was pre-authorized"},"YearBuilt":{"type":"integer","description":"The year in which the property was constructed"},"Address1":{"type":"string","description":"The primary street address of the property"},"Address2":{"type":"string","description":"Additional street address information pertaining to the property"},"City":{"type":"string","description":"The city where the property is located"},"State":{"type":"string","description":"The state where the property is located"},"Zip":{"type":"string","description":"The zip code where the property is located"}}},"Properties.MarketingPhotos":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Properties.MarketingPhoto"}},"next_page_path":{"example":"/api/v0/properties/marketing_photos?page[number]=2","description":"The URL path to the next page of responses"}}},"Properties.MarketingPhoto":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the marketing photo"},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property associated with the marketing photo"},"Position":{"type":"integer","description":"The position of the photo in the property photo gallery. If multiple photos are associated with a property, the order of the remaining photos (positions 1 and above) will not change automatically if some photos are deleted. For example, if there are photos in positions 1, 2, 3, and 4, and photos 1 and 3 are deleted, the remaining photos will retain their original positions of 2 and 4."},"Url":{"type":"string","format":"uri","description":"The public link to the marketing photo"},"ContentType":{"type":"string","description":"The content type of the marketing photo","example":"image/jpg"}}},"Units.Photos":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Units.Photo"}},"next_page_path":{"example":"/api/v0/units/photos?page[number]=2","description":"The URL path to the next page of responses"}}},"Units.Photo":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the photo"},"UnitId":{"type":"string","format":"uuid","description":"Unique identifier of the unit associated with the photo"},"UnitTypeId":{"type":"string","format":"uuid","nullable":true,"description":"Unique identifier of the unit type associated with the photo. Populated when the photo is attached to the unit type rather than directly to the unit. Null when the photo is attached directly to the unit. Photos attached to a unit type cannot be created, updated, or deleted via the unit photos endpoints."},"Position":{"type":"integer","description":"The position of the photo in the unit photo gallery. If multiple photos are associated with a unit, the order of the remaining photos (positions 1 and above) will not change automatically if some photos are deleted. For example, if there are photos in positions 1, 2, 3, and 4, and photos 1 and 3 are deleted, the remaining photos will retain their original positions of 2 and 4."},"Url":{"type":"string","format":"uri","description":"The public link to the photo"},"ContentType":{"type":"string","description":"The content type of the photo","example":"image/jpg"}}},"Properties.Photos":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Properties.Photo"}},"next_page_path":{"example":"/api/v0/properties/photos?page[number]=2","description":"The URL path to the next page of responses"}}},"Properties.Photo":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the photo"},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property associated with the photo"},"Position":{"type":"integer","description":"The position of the photo in the property photo gallery. If multiple photos are associated with a property, the order of the remaining photos (positions 1 and above) will not change automatically if some photos are deleted. For example, if there are photos in positions 1, 2, 3, and 4, and photos 1 and 3 are deleted, the remaining photos will retain their original positions of 2 and 4."},"Url":{"type":"string","format":"uri","description":"The public link to the photo"},"ContentType":{"type":"string","description":"The content type of the photo","example":"image/jpg"}}},"Properties":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Property"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/properties?page[number]=2"}}},"Property.BulkCreate":{"title":"Properties","required":["Name","ReferenceId","PropertyType","Address1","City","State","Zip","OperatingCashBankAccountId","EscrowCashBankAccountId"],"allOf":[{"$ref":"#/components/schemas/BulkCreateProperty"}]},"BulkCreateProperty":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual properties in the bulk-creation of properties."},"Name":{"type":"string","description":"The name of the property"},"ExpensesCashBankAccountId":{"type":"string","example":"3245edfe-a17d-11ec-b909-0242ac120002","description":"Unique identifier of the expenses cash bank account associated with the property. Used for Dual-Operating Bank Accounts.","format":"uuid"},"AdditionalCashAccounts":{"$ref":"#/components/schemas/Property.AdditionalCashAccounts"},"CurrentManagementFeePolicy":{"type":"object","required":["FeeType","StartDate","WaiveWhenVacant"],"description":"Contains details about the property’s management fee policy","properties":{"FeeType":{"type":"string","enum":["Percent","Flat"],"description":"The property’s fee type. This type determines how much is billed to a property per month by the management company\n#### Management Fee Type Required Attributes\n| FeeType            | Required Attributes   |\n|--------------------|-----------------------|\n| Flat               | FlatAmount            |\n| Percentage         | Percentage, Minimum   |\n"},"FlatAmount":{"type":"string","format":"decimal","description":"The dollar amount billed once a month. The attribute can only be used when FeeType is set to 'Flat'"},"Percentage":{"type":"string","format":"decimal","description":"The percentage a property is billed based on the net income generated from General Ledger accounts subject to management fees"},"Minimum":{"type":"string","format":"decimal","description":"The minimum management fee billed. The attribute can only be used when FeeType is set to 'Percent'"},"Maximum":{"type":"string","format":"decimal","description":"The maximum management fee billed. The attribute can only be used when FeeType is set to 'Percent'"},"StartDate":{"type":"string","format":"date-time","description":"The start date of the management fee policy. The date must be the first of a month. May be a future date."},"WaiveWhenVacant":{"type":"boolean","description":"Sets whether to waive the management fee when the property is vacant"}}},"LeaseFeePolicy":{"type":"object","required":["FeeType"],"description":"Contains details about the property’s lease fee policy","properties":{"FeeType":{"type":"string","enum":["Percent","Flat"],"description":"The property’s lease fee type. This type determines how much is billed to a property per executed lease by the management company.\n#### Management Fee Type Required Attributes\n| FeeType            | Required Attributes   |\n|--------------------|-----------------------|\n| Flat               | FlatAmount            |\n| Percentage         | Percentage            |\n"},"FlatAmount":{"type":"string","format":"decimal","description":"The dollar amount billed to an owner per move in. The attribute can only be used when LeaseFeeType is set to 'Flat'. If no value is provided, the default is 0.0"},"Percentage":{"type":"string","format":"decimal","description":"The percentage an owner is billed based on a full month’s rent amount of an executed lease after move in, rounded to 2 decimal places. The attribute can only be used when LeaseFeeType is set to 'Percent'. If no value is provided, will default to 0.0"}}},"HomeWarrantyInfo":{"type":"object","description":"Object containing information about the property’s home warranty policy.","$ref":"#/components/schemas/Property.HomeWarrantyInfo"},"PropertyType":{"type":"string","enum":["Commercial","Multi-Family","Self-Storage","Single-Family","Student-Housing"],"description":"The type of property\n#### Property Type Options\n| Options         | Description                                |\n|-----------------|--------------------------------------------|\n| Single-Family   | The property is for single-family use                   |\n| Multi-Family    | The property is for multiple family use                            |\n| Self-Storage    | The property is for self-storage use                      |\n| Student-Housing | The property houses students, and supports by-the-bed units. |\n| Commercial      | The property is used for commercial purposes                                 |\n"},"OperatingCashBankAccountId":{"type":"string","example":"3245edfe-a17d-11ec-b909-0242ac120002","description":"Unique identifier of the operating cash bank account associated with the property","format":"uuid"},"EscrowCashBankAccountId":{"type":"string","example":"3245edfe-a17d-11ec-b909-0242ac120002","description":"Unique identifier of the escrow cash bank account associated with the property","format":"uuid"}},"allOf":[{"$ref":"#/components/schemas/Property.Base"}]},"Property.HomeWarrantyInfo":{"type":"object","description":"Object containing information about the property’s home warranty policy.","required":["CompanyName","ContactNumber","Expiration","PolicyNumber"],"properties":{"CompanyName":{"type":"string","description":"The name of the company providing the home warranty coverage."},"ContactNumber":{"type":"string","description":"The contact phone number for the home warranty company or policy administrator"},"Expiration":{"type":"string","format":"date","description":"The expiration date of the home warranty policy"},"PolicyNumber":{"type":"string","description":"Unique reference number associated with the home warranty policy"}}},"Property.SiteManager":{"description":"Contains the property site manager’s contact information and details","properties":{"Salutation":{"type":"string","description":"The site manager’s salutation. Valid values include null, Mr., Ms. Mrs., Mr. \u0026 Mrs. or Dr."},"FirstName":{"type":"string","description":"The site manager’s first name"},"LastName":{"type":"string","description":"The site manager’s last name"},"PhoneNumber":{"type":"string","description":"The site manager’s phone number"}}},"Property.Update":{"type":"object","properties":{"Name":{"type":"string","description":"The name of the property"},"Amenities":{"type":"array","description":"Array of strings to add to the property. Providing an array of valid strings will overwrite all existing amenities. Passing in an empty array `[]` or an array of empty strings `[\"\"]` or `[\"\", \"\"]` will clear all existing amenities. Passing in an array of a valid string and an empty string `[\"amenity_name\", \"\"]` will result in `Amenities: [\"amenity_name\"]`. Passing in `null` will result in no change.","items":{"type":"string"}},"CurrentManagementFeePolicy":{"type":"object","description":"Contains details about the property’s management fee policy","properties":{"FeeType":{"type":"string","enum":["Percent","Flat"],"description":"The property’s fee type. This type determines how much is billed to a property per month by the management company\n#### Management Fee Type Required Attributes\n| FeeType            | Required Attributes   |\n|--------------------|-----------------------|\n| Flat               | FlatAmount            |\n| Percentage         | Percentage, Minimum   |\n"},"FlatAmount":{"type":"string","format":"decimal","description":"The dollar amount billed once a month. The attribute can only be used when FeeType is set to 'Flat'"},"Percentage":{"type":"string","format":"decimal","description":"The percentage a property is billed based on the net income generated from General Ledger accounts subject to management fees"},"Minimum":{"type":"string","format":"decimal","description":"The minimum management fee billed. The attribute can only be used when FeeType is set to 'Percent'"},"Maximum":{"type":"string","format":"decimal","description":"The maximum management fee billed. The attribute can only be used when FeeType is set to 'Percent'"},"StartDate":{"type":"string","format":"date-time","description":"The start date of the management fee policy. The date must be the first of a month. Cannot be in the future. If a StartDate already exists, passing in `null` will result in no change."},"WaiveWhenVacant":{"type":"boolean","description":"Sets whether to waive the management fee when the property is vacant"}}},"HomeWarrantyInfo":{"type":"object","description":"Object containing information about the property’s home warranty policy. If HomeWarrantyInfo is set to null in an update request, all values within the HomeWarrantyInfo will be deleted from the updated property.","properties":{"CompanyName":{"type":"string","description":"The name of the company providing the home warranty coverage."},"ContactNumber":{"type":"string","description":"The contact phone number for the home warranty company or policy administrator"},"Expiration":{"type":"string","format":"date","description":"The expiration date of the home warranty policy"},"PolicyNumber":{"type":"string","description":"Unique reference number associated with the home warranty policy"}}},"LeaseFeePolicy":{"type":"object","description":"Contains details about the property’s lease fee policy","properties":{"FeeType":{"type":"string","enum":["Percent","Flat"],"description":"The property’s lease fee type. This type determines how much is billed to a property per executed lease by the management company.\n#### Management Fee Type Required Attributes\n| FeeType            | Required Attributes   |\n|--------------------|-----------------------|\n| Flat               | FlatAmount            |\n| Percentage         | Percentage            |\n"},"FlatAmount":{"type":"string","format":"decimal","description":"The dollar amount billed to an owner per move in. The attribute can only be used when LeaseFeeType is set to 'Flat'. If no value is provided, the default is 0.0"},"Percentage":{"type":"string","format":"decimal","description":"The percentage an owner is billed based on a full month’s rent amount of an executed lease after move in, rounded to 2 decimal places. The attribute can only be used when LeaseFeeType is set to 'Percent'. If no value is provided, will default to 0.0"}}},"PropertyType":{"type":"string","enum":["Commercial","Multi-Family","Self-Storage","Single-Family","Student-Housing"],"description":"The type of property\n#### Property Type Options\n| Options         | Description                                |\n|-----------------|--------------------------------------------|\n| Single-Family   | The property is for single-family use                   |\n| Multi-Family    | The property is for multiple family use                            |\n| Self-Storage    | The property is for self-storage use                            |\n| Student-Housing | The property houses students, and supports by-the-bed units. |\n| Commercial      | The property is used for commercial purposes                                 |\n"},"PostedToInternet":{"type":"boolean","description":"Sets whether to post the Single-Family (SFR) property to third-party listings pages. Set to true to display and accept applications and false to remove the listing. Requests containing this attribute for non-SFR property types will return an error."},"PostedToWebsite":{"type":"boolean","description":"Sets whether to post the Single-Family (SFR) property to the AppFolio listings page. Set to true to display and accept applications and false to remove the listing. Requests containing this attribute for non-SFR property types will return an error."},"CustomFields":{"$ref":"#/components/schemas/CustomFields.UpdateAttribute"}},"allOf":[{"$ref":"#/components/schemas/Property.Base"}]},"Property.AdditionalCashAccounts":{"title":"AdditionalCashAccount","type":"array","description":"Array of additional cash GL \u0026 bank account combinations associated with the property. Cash accounts can only be assigned once per property.\n#### Property Additional Cash Accounts\n| Attributes     | Type   | Description                                                                         | Notes                                                   |\n|----------------|--------|-------------------------------------------------------------------------------------|---------------------------------------------------------|\n| BankAccountId  | String | Unique identifier of the additional cash bank account associated with the property  | UUID format e.g. \"d9009724-9f32-11ec-bc31-d46a96ab9b08\" |\n| GlAccountId    | String | Unique identifier of the additional cash GL account associated with the property    | UUID format e.g. \"914a2a8e-f5d3-11e9-a485-1876da4c83b5\" |\n","items":{"properties":{"BankAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the additional cash bank account associated with the property"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the additional cash GL account associated with the property. Must be a cash gl account that is a non-operating, non-escrow, non-expense or non-corporate cash account."}}}},"PropertyGroup":{"type":"object","properties":{"Id":{"type":"string","example":"3245edfe-a17d-11ec-b909-0242ac120002","description":"Unique identifier of the property group","format":"uuid"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the property group's details were last updated"},"Name":{"type":"string","example":"West Creek Apartments","description":"The name of the property group"},"Type":{"deprecated":true,"type":"string","enum":["PropertyGroup","Portfolio"],"description":"The type of property groups\n#### Type Options\n| Options         | Description                                |\n|-----------------|--------------------------------------------|\n| PropertyGroup   | The entity is a Property Group              |\n| Portfolio       | The entity is a Portfolio                  |\n"},"PropertyIds":{"type":"array","example":["ab0964fb-bc9b-4f9a-b649-01cfe309cb52","ac0964fb-bc9b-4f9a-b649-01cfe309cb52"],"description":"Array of `PropertyIds` linked to the property group. Hidden properties within a property group are returned by default. Polling for a `PropertyId` that is hidden will return no data. **Note**: To associate hidden properties yielded from this endpoint with those from the Properties endpoint, ensure the `IncludeHidden` filter is enabled.","format":"uuid"}}},"PropertyGroups":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PropertyGroup"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/property_groups?page[number]=2"}}},"PropertyGroup.Update":{"type":"object","properties":{"PropertyIds":{"type":"array","example":["ab0964fb-bc9b-4f9a-b649-01cfe309cb52","ac0964fb-bc9b-4f9a-b649-01cfe309cb52"],"description":"Array of `PropertyIds` to add to the property group. Any properties previously linked to the property group before this update will be substituted with the properties specified by this attribute. Passing in an empty array will clear all properties from the property group.","format":"uuid"}}},"PurchaseOrder":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the purchase order"},"Number":{"type":"string","description":"The purchase order number. Numeric for native purchase orders; may be alphanumeric for procurement purchase orders.","example":"19"},"CreatedOn":{"type":"string","format":"date-time","description":"The date and time the purchase order was created"},"LastUpdatedAt":{"type":"string","format":"date-time","description":"The date and time the purchase order was last updated"},"VendorId":{"type":"string","format":"uuid","description":"Unique identifier of the vendor associated with the purchase order. Null when the purchase order is billed to a supplier or the management company rather than a vendor."},"ApprovalStatus":{"type":"string","enum":["Approved","In Progress","Pending Revision"],"description":"The current approval status of the purchase order. Returns one of `Approved`, `In Progress`, or `Pending Revision`. Note: `filters[Approved]=true` returns purchase orders that are approved or exempt from approval; exempt purchase orders appear here as `In Progress`."},"Completed":{"type":"boolean","description":"Indicates whether the purchase order has been marked as completed"},"Canceled":{"type":"boolean","description":"Indicates whether the purchase order has been canceled"},"LineItems":{"$ref":"#/components/schemas/PurchaseOrder.LineItems"}}},"PurchaseOrder.LineItems":{"title":"LineItem","type":"array","description":"Array of line items on the purchase order. Line total is `Quantity × ItemAmount + TaxAmount + ShippingAmount`.","items":{"properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the purchase order line item"},"Description":{"type":"string","description":"A description of the line item"},"ItemAmount":{"type":"string","format":"decimal","description":"The per-unit item price for this line item. Multiply by `Quantity` for the line subtotal.","example":"150.75"},"Quantity":{"type":"number","description":"The number of units on this line item","example":5},"TaxAmount":{"type":"string","format":"decimal","description":"The tax amount applied to this line item","example":"10.00"},"ShippingAmount":{"type":"string","format":"decimal","description":"The shipping amount applied to this line item","example":"5.00"},"GlAccountId":{"type":"string","format":"uuid","description":"The general ledger account ID relevant to this line item"},"PropertyId":{"type":"string","format":"uuid","description":"The `PropertyId` associated with this line item"},"UnitId":{"type":"string","format":"uuid","description":"The unit ID associated with this line item"}}}},"PurchaseOrders":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PurchaseOrder"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/purchase_orders?page[number]=2"}}},"AmenityPricing.BulkUpdate":{"title":"AmenityPricing","required":["PropertyId","AmenityPricings"],"allOf":[{"$ref":"#/components/schemas/BulkUpdateAmenityPricing"}]},"BulkUpdateAmenityPricing":{"type":"object","properties":{"PropertyId":{"type":"string","format":"uuid","description":"The UUID of the property whose amenity pricing is being set. A property should only be included once per call."},"AmenityPricings":{"type":"array","description":"The amenity prices to set for the property. Amenities omitted from the request keep their existing price.","items":{"required":["Name","Price"],"properties":{"Name":{"type":"string","description":"The name of the amenity. Case-sensitive; must match an amenity tag present on a unit in the property."},"Price":{"type":"number","minimum":0,"description":"The price of the amenity. Must be zero or greater."}}}}}},"SecurityDeposit.BulkCreate":{"title":"SecurityDeposit","required":["ReferenceId","Amount","OccupancyId","SecurityDepositDate","SecurityDepositGlAccountId"],"allOf":[{"$ref":"#/components/schemas/BulkCreateSecurityDeposit"}]},"BulkCreateSecurityDeposit":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual security deposit in the bulk-creation of security deposits."},"Amount":{"type":"string","description":"The amount paid for this GL Account. Must be a positive number."},"OccupancyId":{"type":"string","format":"uuid","description":"The UUID of the occupancy associated with the primary tenant"},"Remarks":{"type":"string","description":"Remarks about the payment. Will only be visible internally for the clients"},"Reference":{"type":"string","description":"An external value, which will only be visible on owner statements"},"SecurityDepositDate":{"type":"string","description":"The move-in date for this occupancy","format":"date","example":"2024-12-01"},"SecurityDepositGlAccountId":{"type":"string","format":"uuid","description":"UUID for the Gl Account used for this security deposit "}}},"Tenant":{"type":"object","description":"Tenants will always have (`FirstName` AND `LastName`) AND/OR `CompanyName`","properties":{"Id":{"description":"Unique identifier of the tenant","type":"string","format":"uuid"},"OccupancyId":{"type":"string","description":"Unique Identifier of an occupancy of one or more tenants","format":"uuid"},"UnitId":{"type":"string","description":"The unit the tenant occupies","format":"uuid"},"PropertyId":{"type":"string","description":"The property with the unit occupied by the tenant","format":"uuid"},"FirstName":{"type":"string","description":"The tenant's first name"},"MiddleName":{"type":"string","description":"The tenant's middle name"},"LastName":{"type":"string","description":"The tenant's last name"},"BirthDate":{"type":"string","format":"date","description":"The tenant's birthdate"},"SocialSecurityNumber":{"type":"string","description":"The tenant's social security number"},"Link":{"type":"string","format":"uri","description":"A link to the tenant's page in the AppFolio Property manager"},"CompanyName":{"type":"string","description":"The display name of the tenant's company"},"IsCompany":{"type":"boolean","description":"Indicates whether or not the tenant is a company"},"CurrentRent":{"type":"number","format":"float","example":1750.0,"description":"The amount the tenant currently pays for rent"},"Status":{"$ref":"#/components/schemas/Tenant.Status"},"Addresses":{"type":"array","description":"The tenant's address(es)","items":{"$ref":"#/components/schemas/Tenant.Addresses"}},"PhoneNumber":{"deprecated":true,"type":"string","description":"The tenant's primary phone number"},"PhoneNumbers":{"type":"array","description":"The tenant's phone number(s)","items":{"$ref":"#/components/schemas/Tenant.PhoneNumbers"}},"Email":{"deprecated":true,"type":"string","format":"email","description":"The tenant's primary email address"},"Emails":{"type":"array","description":"The tenant's emails","items":{"$ref":"#/components/schemas/Tenant.Emails"}},"MoveInOn":{"type":"string","description":"The date the tenant physically started or will start occupancy. Dictates whether the \"future\" or \"current\" option is displayed in the status field.","format":"date","example":"2020-12-01"},"MoveOutOn":{"type":"string","description":"The date the tenant physically ended or will end occupancy. Dictates whether the \"notice\" or \"past\" option is displayed in the status field.","format":"date","example":"2020-12-01"},"OccupancyCustomFields":{"$ref":"#/components/schemas/CustomFields.Attribute"},"RentalApplicationId":{"type":"string","description":"Unique identifier for a tenant-submitted rental application","example":"bb1935bf-pl4f-4f7a-b837-32gfr321ld36","format":"uuid"},"TenantType":{"type":"string","enum":["Financially Responsible","Other Occupant","Co-signer"],"description":"The type of tenant\n#### TenantType Options\n| Options                 | Description                                     |\n|-------------------------|-------------------------------------------------|\n| Financially Responsible | The tenant is responsible for payments                        |\n| Other Occupant          | The tenant is not responsible for payments (e.g., dependents) |\n| Co-signer               | A co-signer, or guarantor is responsible for payments                          |\n"},"PrimaryTenant":{"type":"boolean","description":"Indicates whether or not the tenant is the primary leaseholder for the occupancy"},"LastLeaseRenewal":{"type":"string","description":"The date the last lease renewal agreement was started","format":"date","example":"2021-12-01"},"LeaseSignedDate":{"type":"string","description":"The date the lease was executed by the tenant","format":"date","example":"2020-11-01"},"LeaseStartDate":{"type":"string","description":"The day the lease agreement starts","format":"date","example":"2020-12-01"},"LeaseEndDate":{"type":"string","description":"The last day of the lease agreement","format":"date","example":"2020-12-01"},"IsMonthlyLease":{"type":"boolean","description":"Indicates whether the tenant is currently on a month-to-month lease"},"NextRentIncrease":{"type":"string","description":"The date a tenant is eligible for a rent increase. Shared by all tenants on an occupancy.","format":"date","example":"2020-12-01"},"Pets":{"type":"array","description":"Contains details about the tenant’s pet(s)","items":{"$ref":"#/components/schemas/Pet"}},"Vehicles":{"type":"array","description":"Contains details about the tenant’s vehicle(s)","items":{"$ref":"#/components/schemas/Vehicle"}},"Tags":{"type":"array","description":"User-defined tag(s) that categorize the tenant","items":{"type":"string"}},"HiddenAt":{"description":"When the tenant was placed into an inactive state by an AppFolio Property Manager user","type":"string","format":"date-time"},"LastUpdatedAt":{"type":"string","description":"The date the tenant’s details were last updated","format":"date-time","example":"2021-11-15T16:30:46Z"}}},"Tenant.Update":{"properties":{"OccupancyCustomFields":{"$ref":"#/components/schemas/CustomFields.UpdateAttribute"}}},"Tenant.BulkUpdate":{"title":"Tenant","required":["Id"],"allOf":[{"$ref":"#/components/schemas/BulkUpdateTenant"}]},"BulkUpdateTenant":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier for the tenant","format":"uuid"},"FirstName":{"type":"string","description":"The tenant's first name"},"LastName":{"type":"string","description":"The tenant's last name"},"MiddleName":{"type":"string","description":"The tenant's middle name"},"CompanyName":{"type":"string","description":"The display name of the tenant's company. Cannot be blank unless IsCompany is false."},"IsCompany":{"type":"boolean","description":"Whether the tenant is a company (controls if the company name should be used as the name of the tenant). When true, CompanyName must be set. When false, FirstName and LastName must both be set."},"MoveInOn":{"type":"string","description":"The date the tenant physically started or will start occupancy. Dictates whether the \"future\" or \"current\" option is displayed in the status field. Must not overlap with the Move In and Move Out date range of a Financially Responsible Tenant in another occupancy on the same unit.","format":"date","example":"2020-12-01"},"MoveOutOn":{"type":"string","description":"The date the tenant physically ended or will end occupancy. Dictates whether the \"notice\" or \"past\" option is displayed in the status field. Must not overlap with the Move In and Move Out date range of a Financially Responsible Tenant in another occupancy on the same unit.","format":"date","example":"2020-12-01"},"PrimaryTenant":{"type":"boolean","description":"Indicates whether or not the tenant is the primary leaseholder for the occupancy. At least one PrimaryTenant is required per `UnitId`. Note: `PrimaryTenant: true` automatically sets the TenantType to `Financially Responsible` when TenantType is not provided or `null`."},"TenantType":{"type":"string","enum":["Financially Responsible","Other Occupant","Co-signer"],"description":"The type of tenant. At least one tenant with TenantType `Financially Responsible` is required per `UnitId`. A primary tenant must have TenantType `Financially Responsible`."},"Addresses":{"type":"array","description":"The tenant's address(es). Passing any number of addresses will replace all existing addresses for the tenant. Passing an empty array `[]` will remove all existing addresses for the tenant.","items":{"$ref":"#/components/schemas/Tenant.BulkCreate.Addresses"}},"PhoneNumbers":{"type":"array","description":"The tenant's phone number(s). Passing any number of phone numbers will replace all existing phone numbers for the tenant. Passing an empty array `[]` will remove all existing phone numbers for the tenant.","items":{"$ref":"#/components/schemas/Tenant.PhoneNumbers"}},"Pets":{"type":"array","description":"Contains details about the tenant’s pet(s). This will add new pets to the tenant and not remove any existing pets.","items":{"$ref":"#/components/schemas/Pet"}},"Vehicles":{"type":"array","description":"Contains details about the tenant’s vehicle(s). This will add new vehicles to the tenant and not remove any existing vehicles.","items":{"$ref":"#/components/schemas/Vehicle"}},"Emails":{"type":"array","description":"The tenant's email address(es). Passing any number of emails will replace all existing email addresses for the tenant. Passing an empty array `[]` will remove all existing email addresses for the tenant.","items":{"$ref":"#/components/schemas/Tenant.Emails"}},"Tags":{"type":"array","description":"User-defined tag(s) that categorize the tenant. Providing an array of valid strings will overwrite all existing tags. Passing in an empty array `[]` or an array of empty strings `[\"\"]` or `[\"\", \"\"]` will clear all existing tags. Passing in an array of a valid string and an empty string `[\"tag_name\", \"\"]` will result in `Tags: [\"tag_name\"]`. Passing in `null` will result in no change.","items":{"type":"string"}},"NextRentIncrease":{"type":"string","description":"The date a tenant is eligible for a rent increase. Setting this value for any tenant in an occupancy updates it for all tenants on that occupancy. Tenants belonging to the same occupancy in a request must have matching values. Passing `null` reverts to the system default: the later of (1) lease start date, or earliest financially-responsible tenant move-in date if no lease start date, and (2) most recent rent charge start date; plus 12 months.","format":"date","example":"2020-12-01"}}},"Tenants":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Tenant"}},"next_page_path":{"example":"/api/v0/tenants?page[number]=2","description":"The URL path to the next page of responses"}}},"Tenants.Notes":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Tenant.Note"}},"next_page_path":{"example":"/api/v0/tenants/notes?page[number]=2","description":"The URL path to the next page of responses"}}},"Tenant.Note":{"type":"object","properties":{"Body":{"type":"string","description":"A brief informative message about the tenant note. A tenant note cannot exceed `63,535` characters."},"EntityId":{"type":"string","format":"uuid","description":"The tenant to which the note will be attached"},"LastUpdatedAt":{"type":"string","description":"The date the tenant note’s details were last updated"},"Id":{"type":"string","format":"uuid","description":"Unique identifier of the note associated with the tenant"},"NoteId":{"deprecated":true,"type":"string","format":"uuid","description":"Unique identifier of the note associated with the tenant. Deprecated in favor of `Id`."}}},"Tenant.Addresses":{"properties":{"Address1":{"type":"string","description":"The primary street address of the tenant"},"Address2":{"type":"string","description":"The secondary street address of the tenant"},"City":{"type":"string","description":"The city where the tenant resides"},"State":{"type":"string","example":"CA","description":"The state where the tenant resides"},"PostalCode":{"type":"string","description":"The postal code where the tenant resides"},"CountryCode":{"type":"string","example":"US","description":"The country code of the tenant (e.g. \"US\" for United States)"},"IsPrimary":{"type":"boolean","description":"Indicates whether the address provided is the tenant’s primary address"}}},"Tenant.BulkCreate.Addresses":{"required":["Address1","City","CountryCode"],"properties":{"Address1":{"type":"string","description":"The primary street address of the tenant"},"Address2":{"type":"string","description":"The secondary street address of the tenant"},"City":{"type":"string","description":"The city where the tenant resides"},"State":{"type":"string","example":"CA","description":"The state where the tenant resides"},"PostalCode":{"type":"string","description":"The postal code where the tenant resides"},"CountryCode":{"type":"string","example":"US","description":"The country code of the tenant (e.g. \"US\" for United States)"},"IsPrimary":{"type":"boolean","description":"Indicates whether the address provided is the tenant’s primary address"}}},"Tenant.PhoneNumbers":{"properties":{"AdditionalDetails":{"type":"string","description":"Additional detailed information pertaining to the phone number associated with the tenant"},"IsPrimary":{"type":"boolean","description":"Indicates whether the phone number provided is the tenant’s main contact number"},"Label":{"type":"string","enum":["Fax","Home","Mobile","Office"],"description":"The label of the phone number, e.g. 'Home'"},"Number":{"type":"string","description":"The tenant's phone number"}}},"Tenant.Emails":{"properties":{"EmailAddress":{"type":"string","description":"The tenant's email address"},"IsPrimary":{"type":"boolean","description":"Indicates whether the email address provided is the tenant’s primary email address"}}},"CurrentManagementFeePolicy":{"type":"object","description":"Contains details about the property’s current management fee policy. A policy with a future start date is not returned here until it takes effect.","properties":{"FeeType":{"type":"string","enum":["Percent","Flat"],"description":"The property’s fee type. This type determines how much is billed to a property per month by the management company\n#### Management Fee Type Required Attributes\n| FeeType            | Required Attributes   |\n|--------------------|-----------------------|\n| Flat               | FlatAmount            |\n| Percentage         | Percentage, Minimum   |\n"},"FlatAmount":{"type":"string","format":"decimal","description":"The dollar amount billed once a month. The attribute can only be used when FeeType is set to 'Flat'"},"Percentage":{"type":"string","format":"decimal","description":"The percentage a property is billed based on the net income generated from General Ledger accounts subject to management fees"},"Minimum":{"type":"string","format":"decimal","description":"The minimum management fee billed. The attribute can only be used when FeeType is set to 'Percent'"},"Maximum":{"type":"string","format":"decimal","description":"The maximum management fee billed. The attribute can only be used when FeeType is set to 'Percent'"},"StartDate":{"type":"string","format":"date-time","description":"The start date of the management fee policy. The date must be the first of a month. Cannot be in the future. A policy with a future start date is not returned until it takes effect."},"WaiveWhenVacant":{"type":"boolean","description":"Sets whether to waive the management fee when the property is vacant"}}},"CollectionsPlacements":{"title":"Collections Placements","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CollectionsPlacement"}},"next_page_path":{"example":"/api/v0/collections_placements?page[number]=2","description":"The URL path to the next page of responses"}}},"CollectionsPlacement":{"type":"object","properties":{"Id":{"description":"Unique identifier of the collections placement","type":"string","format":"uuid"},"PropertyId":{"description":"Unique identifier of the property associated with the collections placement","type":"string","format":"uuid"},"OccupancyId":{"description":"Unique identifier of the occupancy associated with the collections placement","type":"string","format":"uuid"},"UnitId":{"description":"Unique identifier of the unit associated with the collections placement","type":"string","format":"uuid"},"ContactName":{"description":"The name of the person who is the point of contact for all collections-related matters","type":"string"},"ContactEmail":{"description":"The email address of the person who is the point of contact for all collections-related matters","type":"string"},"ContactPhone":{"description":"The phone number of the person who is the point of contact for all collections-related matters","type":"string"},"PhoneExtension":{"description":"The phone extension number of the person who is the point of contact for all collections-related matters","type":"string"},"CorrespondenceName":{"description":"The company or community name used on email and letter correspondence with the tenant that is in collections","type":"string"},"Evicting":{"type":"boolean","description":"Indicates whether or not the tenant is being evicted from the premises"},"FirstDelinquencyDate":{"type":"string","format":"date","description":"The date of the first delinquent payment resulting the collections placement"},"Lease":{"$ref":"#/components/schemas/CollectionsLease"},"LastPaidDate":{"description":"The date of the last payment made by the tenant","type":"string","format":"date"},"LegalName":{"description":"The legal name of the entity placing the financially responsible person(s) in collections","type":"string"},"MoveOutDate":{"description":"The date the tenant vacated the premises","type":"string","format":"date"},"SubmittedToCollectionsAt":{"type":"string","format":"date-time","description":"When the occupancy was submitted to collections by an AppFolio Property Manager user"},"Status":{"$ref":"#/components/schemas/CollectionsPlacement.Status"},"SupportingDocuments":{"type":"array","description":"Array of supporting document data. Expand to view a supporting document in collections details.","items":{"$ref":"#/components/schemas/CollectionsSupportingDocuments"}},"Tenants":{"type":"array","description":"Array of tenant data. Expand to view a tenant in collections details.","items":{"$ref":"#/components/schemas/CollectionsTenant"}},"PaymentAddress":{"type":"array","description":"The collections placement payment address","items":{"$ref":"#/components/schemas/CollectionsTenant.Address"}},"UnpaidCharges":{"type":"array","description":"Array containing the details of an unpaid charge on the tenant's ledger","items":{"$ref":"#/components/schemas/CollectionsUnpaidCharge"}}}},"CollectionsLease":{"type":"object","description":"The collections placement lease information","properties":{"StartOn":{"type":"string","format":"date","example":"2021-10-27","description":"The date the tenant's lease started"},"EndOn":{"type":"string","format":"date","example":"2021-10-27","description":"The date the tenant's lease ended"},"RenewedOn":{"type":"string","format":"date","example":"2021-10-27","description":"The date the tenant's lease was renewed on"},"SignedOn":{"type":"string","format":"date","example":"2021-10-27","description":"The date the tenant's lease was signed on"}}},"CollectionsSupportingDocuments":{"type":"object","properties":{"Id":{"description":"Unique identifier of the supporting document","type":"string","format":"uuid"},"ContentType":{"description":"The type of supporting document in mime format","type":"string"},"FileName":{"description":"The file name of the supporting document","type":"string"},"Url":{"description":"The URL to download the supporting document. This URL will expire 5 minutes after the call to the endpoint that retrieved it. Downloads that started before the expiration period ended will still succeed. A new URL is created every time a URL is returned.","type":"string"},"Category":{"enum":["lease","supporting_document"],"description":"Type of supporting document\n#### Supporting Document Categories\n| Category              | Description            |\n|-----------------------|------------------------|\n| lease                 | Lease document         |\n| supporting_document   | Other document         |\n"}}},"CollectionsTenant":{"type":"object","description":"Tenants will always have (`FirstName` AND `LastName`) AND/OR `CompanyName`","properties":{"Id":{"description":"Unique identifier of the tenant","type":"string","format":"uuid"},"ForwardingAddress":{"type":"array","description":"The tenant's forwarding addresses. The first address in the list should be the forwarding address for tenants that have moved out.","items":{"$ref":"#/components/schemas/CollectionsTenant.Address"}},"Birthdate":{"type":"string","format":"date","description":"The tenant's birthdate"},"DriversLicenseNumber":{"type":"string","description":"The tenant's driver's license identification number"},"DriversLicenseState":{"type":"string","description":"The state where the tenant's driver's license was issued"},"PhoneNumbers":{"type":"array","description":"The tenant's phone number(s)","items":{"$ref":"#/components/schemas/CollectionsTenant.PhoneNumber"}},"EmergencyContact":{"$ref":"#/components/schemas/CollectionsTenant.EmergencyContact"},"EmploymentDetails":{"$ref":"#/components/schemas/CollectionsTenant.EmploymentDetails"},"FirstName":{"type":"string","description":"The tenant's first name"},"LastName":{"type":"string","description":"The tenant's last name"},"PrimaryTenant":{"type":"boolean","description":"Indicates whether or not the tenant is the primary leaseholder for the occupancy"},"Status":{"type":"string","description":"The status of the tenant. Valid values are \"Past\", \"Evict\" or \"Notice\"."},"SocialSecurityNumber":{"type":"string","description":"The tenant's social security number"},"TenantType":{"type":"string","enum":["Financially Responsible","Co-signer"],"description":"The type of tenant\n#### TenantType Options\n| Options                 | Description                                     |\n|-------------------------|-------------------------------------------------|\n| Financially Responsible | The tenant is responsible for payments                        |\n| Co-signer               | A co-signer, or guarantor is responsible for payments                          |\n"}}},"CollectionsTenant.PhoneNumber":{"properties":{"Label":{"type":"string","enum":["Fax","Home","Mobile","Office"],"description":"The label of the phone number, e.g. 'Home'"},"Number":{"type":"string","description":"The tenant's phone number"},"AdditionalDetails":{"type":"string","description":"Additional detailed information pertaining to the phone number(s) associated with the tenant"}}},"CollectionsTenant.Email":{"properties":{"EmailAddress":{"type":"string","description":"The tenant's email address"}}},"CollectionsTenant.Address":{"properties":{"Address1":{"type":"string","description":"The primary street address of the tenant"},"Address2":{"type":"string","description":"The secondary street address of the tenant"},"City":{"type":"string","description":"The city where the tenant resides"},"State":{"type":"string","description":"The state where the tenant resides"},"PostalCode":{"type":"string","description":"The postal code where the tenant resides"},"CountryCode":{"type":"string","description":"The country code of the tenant (e.g. \"US\" for United States)"}}},"CollectionsTenant.EmergencyContact":{"type":"object","description":"The tenant's emergency contact. The first person to contact in the event of an emergency.","properties":{"Address":{"type":"string","description":"The emergency contact's primary street address"},"FullName":{"type":"string","description":"The emergency contact's full name"},"PhoneNumber":{"type":"string","description":"The emergency contact's phone number"},"Relationship":{"type":"string","description":"The emergency contact's relationship with the tenant"}}},"CollectionsTenant.EmploymentDetails":{"type":"object","description":"The tenant's current employment information","properties":{"EmployerName":{"type":"string","description":"The name of the tenant's employer"},"EmployerPhoneNumber":{"type":"string","description":"The phone number of the tenant's employer"},"SupervisorName":{"type":"string","description":"The name of the tenant's supervisor"},"SupervisorTitle":{"type":"string","description":"The title of the tenant's supervisor"},"PositionHeld":{"type":"string","description":"The name of the tenant's position or job held"},"MonthlySalary":{"type":"number","format":"float","description":"The tenant's monthly salary"},"Address1":{"type":"string","description":"The employer's primary street address"},"Address2":{"type":"string","description":"Additional street address information pertaining to the employer"},"City":{"type":"string","description":"The city where the tenant's employer is locateds"},"State":{"type":"string","description":"The state where the tenant's employer is located"},"PostalCode":{"type":"string","description":"The postal code where the tenant's employer is located"},"CountryCode":{"type":"string","description":"The country code of the tenant's employer (e.g. \"US\" for United States)"}}},"CollectionsUnpaidCharge":{"type":"object","properties":{"ChargeDate":{"description":"The date of the charge","format":"date-time"},"Description":{"description":"A brief description or summary of the charge","type":"string"},"GlAccountId":{"description":"Unique identifier of the general ledger account associated with the charge","type":"string","format":"uuid"},"GlAccountName":{"description":"The name of the general ledger account associated with the charge","type":"string","format":"uuid"},"TotalChargeAmount":{"description":"The total amount of the charge","type":"number","format":"float"},"UnpaidChargeAmount":{"description":"The amount of the charge that was unpaid","type":"number","format":"float"}}},"CollectionsPlacementStatus.BulkCreate":{"title":"Collections Placement Statuses","required":["CollectionsPlacementId","Status"],"allOf":[{"$ref":"#/components/schemas/CollectionsPlacementStatus"}]},"CollectionsPlacementStatus":{"type":"object","properties":{"CollectionsPlacementId":{"type":"string","format":"uuid","description":"Unique identifier of the collections placement to add a status to"},"AmountCollected":{"type":"string","description":"The amount of funds collected"},"BalanceDue":{"type":"string","description":"The remaining balance due to collections"},"BalanceCancelled":{"type":"string","description":"The amount of the balance that has been canceled or forgiven"},"CancelledAt":{"type":"string","format":"date","description":"The date the balance or a portion of the balance was canceled or forgiven"},"LastPaidAt":{"type":"string","format":"date","description":"The date the balance or a portion of the balance was last paid"},"PlacementUrl":{"type":"string","format":"uri","description":"A URL that links to the collections placement case in the developer's platform"},"ReferenceId":{"type":"string","description":"Unique identifier of the tenant's pending placement with the collections partner, used to track and reference their placements"},"Status":{"$ref":"#/components/schemas/CollectionsPlacement.Status"},"VendorAccountNumber":{"type":"string","description":"Unique identifier of the tenant's successful placement with the collections partner, used to track and reference their placements"}}},"CollectionsPlacement.StatusFilter":{"title":"Status","type":"string","enum":["ACT","APP","CAN","DPP","HLD","PEN","PIF","RFC","SET"],"description":"Filter by the current status(es) of the collection placement. Multiple values should be separated by commas. \u003cbr\u003e Example: `filters[Status]=ACT,APP` \u003cbr\u003e\n#### Status Options\n| Options  | Notes                   |     Description                                                                   |\n|----------|-------------------------|-----------------------------------------------------------------------------------|\n| ACT      | Active                  | The collections placement is active                                               |\n| APP      | Active Payment Plan     | The collections placement is active and a payment plan is in effect               |\n| CAN      | Canceled                | The collections placement was canceled                                            |\n| DPP      | Disrupted Payment Plan  | The collections placement is active and a disruptive payment plan is in effect    |                                                                                                                                         |\n| HLD      | On Hold                 | The collections placement is on hold                                              |                                                                                                                                         |\n| PEN      | Pending                 | The collections placement is pending                                              |                                                                                                                                         |\n| PIF      | Paid in Full            | The collections placement was paid in full                                        |                                                                                                                                         |\n| RFC      | Ready for Collections   | The collections placement is ready for collections                                |                                                                                                                                         |\n| SET      | Settled                 | The collections placement was settled                                             |                                                                                                                                         |\n"},"CollectionsPlacement.Status":{"title":"Status","type":"string","enum":["ACT","APP","CAN","DPP","HLD","PEN","PIF","RFC","SET"],"description":"Indicates the current status of the collection placement\n#### Status Options\n| Options  | Notes                   |     Description                                                                   |\n|----------|-------------------------|-----------------------------------------------------------------------------------|\n| ACT      | Active                  | The collections placement is active                                               |\n| APP      | Active Payment Plan     | The collections placement is active and a payment plan is in effect               |\n| CAN      | Canceled                | The collections placement was canceled                                            |\n| DPP      | Disrupted Payment Plan  | The collections placement is active and a disruptive payment plan is in effect    |                                                                                                                                         |\n| HLD      | On Hold                 | The collections placement is on hold                                              |                                                                                                                                         |\n| PEN      | Pending                 | The collections placement is pending                                              |                                                                                                                                         |\n| PIF      | Paid in Full            | The collections placement was paid in full                                        |                                                                                                                                         |\n| RFC      | Ready for Collections   | The collections placement is ready for collections                                |                                                                                                                                         |\n| SET      | Settled                 | The collections placement was settled                                             |                                                                                                                                          |\n"},"Unit":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the unit","format":"uuid"},"Name":{"type":"string","description":"The unit name as displayed in the AppFolio Property Manager"},"Bathrooms":{"type":"string","format":"decimal","example":"2.5","description":"The number of desired bathrooms"},"Bedrooms":{"type":"integer","description":"The number of desired bedrooms"},"CustomFields":{"$ref":"#/components/schemas/CustomFields.Attribute"},"SquareFeet":{"type":"string","description":"The size of the unit in square feet"},"ListedMarketRent":{"type":"string","format":"decimal","description":"The rent per month as listed on the market","deprecated":true},"ListedRent":{"type":"string","format":"decimal","description":"The rent per month as listed on the market. This value reflects either the market rent plus amenities fees or the advertised rent, depending on whether “Use Market Rent On Ads” is enabled in AppFolio Property Manager."},"MarketRent":{"type":"string","format":"decimal","description":"The unit's base market rent, representing its estimated fair market value based on current market conditions and comparable properties. This value may differ from `ListedRent`, as it does not include advertised adjustments or amenity fees. Additionally, if the unit is associated with a Unit Type, the market rent may be overridden by the unit type’s configured value."},"Status":{"type":"string","enum":["Occupied","Vacant","Vacant Rented","Notice","Notice Rented"],"description":"The status of the unit. Vald values are \"Occupied\", \"Vacant\", \"Vacant Rented\", \"Notice\" or \"Notice Rented\".\n#### Status Options\n| Options       | Description                                                                                             |\n|---------------|---------------------------------------------------------------------------------------------------------|\n| Occupied      | The unit is currently occupied                                                                              |\n| Vacant        | The unit is vacant                                                                                          |\n| Vacant Rented | the unit is currently vacant but has an upcoming occupancy. Reference the `MoveIn` and `MoveOut` (from and to) attributes on the **Tenant** endpoint for any necessary associations. |\n| Notice        | The occupancy has communicated intent to vacate. Reference the `MoveIn` and `MoveOut` (from and to) attributes on the **Tenant** endpoint for any necessary associations.           |\n| Notice Rented | The occupancy has communicated intent to vacate, and a future occupancy is scheduled                        |\n"},"PropertyId":{"type":"string","description":"Unique identifier of the property associated with the unit","format":"uuid"},"CurrentOccupancyId":{"type":"string","description":"Unique identifier of the current occupant of the unit","format":"uuid"},"UnitGroupId":{"type":"string","description":"Unique identifier of the unit group the unit is a part of","format":"uuid"},"LeasingType":{"$ref":"#/components/schemas/Unit.LeasingType"},"Description":{"type":"string","description":"A brief, informative description of the unit"},"Address1":{"type":"string","description":"The primary street address of the unit"},"Address2":{"type":"string","description":"Additional street address information pertaining to the unit"},"City":{"type":"string","description":"The city where the unit is located"},"State":{"type":"string","description":"The state where the unit is located"},"Zip":{"type":"string","description":"The zip code where the unit is located"},"MaintenanceNotes":{"type":"string","description":"A brief informative message about the unit's maintenance"},"MarketingTitle":{"type":"string","description":"The title of the listing for syndication"},"MarketingDescription":{"type":"string","description":"A description of the listing for syndication"},"NonRevenue":{"type":"boolean","description":"Indicates whether or not the unit is rentable and is a model unit, office or other non revenue unit"},"NonRevenueType":{"type":"string","enum":["Model","Other","Renovation","Office"],"description":"The type of non-revenue unit"},"NonRevenueStart":{"type":"string","format":"date","description":"The date on which the current non-revenue period began","example":"2024-01-15"},"ApplicationURL":{"type":"string","description":"The URL to the online rental application for the unit. When `AcceptingApplications` is false, this link resolves to the general listings page for the account rather than to an application."},"AppliancesIncluded":{"type":"array","description":"User-defined appliances that are included with the unit","items":{"type":"string"}},"AcceptingApplications":{"type":"boolean","description":"Indicates whether or not the unit is accepting applications"},"PostedToInternet":{"type":"boolean","description":"Indicates whether the unit has been posted to a third-party listings page. If `true,` the unit is displayed on a third-party listings page and accepts applications. If `false`, the unit is not displayed on the third-party listings page."},"PostedToWebsite":{"type":"boolean","description":"Indicates whether a vacant unit was posted to the AppFolio listings page. If `true`, the unit is displayed on the AppFolio listings page and accepts applications. If `false`, the unit is not displayed on the AppFolio listings page."},"YouTubeURL":{"type":"string","format":"uri","description":"The URL of the YouTube video for the listing(s)"},"Link":{"type":"string","format":"uri","description":"A link to the unit page in the AppFolio Property Manager"},"Deposit":{"type":"string","description":"The security deposit amount"},"CatsAllowed":{"type":"string","enum":["Yes","No"],"description":"The unit’s cat policy. Valid values include “Yes”, “No” or `null`. A null value indicates that the unit may not have specified a policy for cats.\n| Attribute | Type   | Description                                |\n|-----------|--------|--------------------------------------------|\n| Yes       | String | Cats are permitted on the unit         |\n| No        | String | Cats are not permitted on the unit     |\n| null      | String | No cat policy has been set for the unit |\n"},"DogsAllowed":{"type":"string","enum":["Large \u0026 Small","Small Only","No"],"description":"The unit’s dog policy. Valid values include “Large \u0026 Small”, “Small Only”, \"No\" or `null`. A null value indicates that the unit may not have specified a policy for dogs.\n| Attribute     | Type   | Description                                    |\n|---------------|--------|------------------------------------------------|\n| Large \u0026 Small | String | Large and small dogs are permitted on unit |\n| Small Only    | String | Only small dogs are permitted on the unit  |\n| No            | String | No dogs are permitted on the unit          |\n| null          | String | No dog policy has been set for the unit    |\n"},"Tags":{"type":"array","description":"User-defined tag(s) that categorize the unit","items":{"type":"string"}},"UnitType":{"type":"string","description":"The floor plan of the unit"},"UnitTypeId":{"type":"string","description":"Unique identifier of the floor plan associated with the unit","format":"uuid"},"UtilitiesIncluded":{"type":"array","description":"User-defined utilities that are included with the unit","items":{"type":"string"}},"CreatedAt":{"type":"string","example":"2015-03-11T11:33:35Z","description":"When the unit was created in the AppFolio Property Manager"},"RentStatus":{"oneOf":[{"type":"null"},{"type":"string"}],"enum":[null,"RentControlled","RentStabilized","Decontrolled"],"description":"Status / type of rent control\n#### RentStatus Options\n| Options        | Description            |\n|----------------|-----------------------|\n| null           | The rent has no status     |\n| RentControlled | The unit is rent-controlled     |\n| RentStabilized | The unit is rent-stabilized     |\n| Decontrolled   | The rent for the unit is not controlled |\n"},"ApplicationFee":{"type":"string","description":"The application fee amount"},"Amenities":{"type":"array","description":"Array containing a unit’s amenities","items":{"properties":{"Name":{"type":"string","description":"The name of the amenity."},"Price":{"type":"number","description":"The price of the amenity. If no price was provided, the price defaults to 0."}}}},"HvacFilters":{"type":"array","description":"Array containing a unit’s HVAC filters","items":{"properties":{"Length":{"type":"number","format":"float","description":"The length of the HVAC filter"},"Width":{"type":"number","format":"float","description":"The width of the HVAC filter"},"Thickness":{"type":"number","format":"float","description":"The thickness of the HVAC filter"},"Quantity":{"type":"integer","description":"The quantity of the HVAC filter"},"Model":{"type":"string","description":"The model of the HVAC filter"},"Brand":{"type":"string","description":"The brand of the HVAC filter"}}}},"HvacDetail":{"type":"object","description":"The HVAC details of the unit","properties":{"ConfirmedNoFiltersNeeded":{"type":"boolean","description":"Indicates whether or not the unit does not require HVAC filters"}}},"RentReady":{"type":"boolean","description":"Indicates whether or not the unit is ready to be occupied by a tenant"},"AvailableOn":{"type":"string","description":"The date upon which the unit can be leased","format":"date","example":"2021-12-01"},"LastInspectedDate":{"type":"string","description":"The date the unit was last inspected","format":"date","example":"2021-12-01"},"ReadyForShowingOn":{"type":"string","description":"The date upon which the unit is ready for showing","format":"date","example":"2021-12-01"},"HiddenAt":{"type":"string","format":"date-time","description":"When the property was marked inactive state by an AppFolio Property Manager user"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the unit's details were last updated"}}},"Unit.BulkCreate":{"title":"Units","required":["Name","ReferenceId","PropertyId","Address1","City","State","Zip"],"allOf":[{"$ref":"#/components/schemas/BulkCreateUnit"}]},"Unit.UpdatableAttributes":{"type":"object","properties":{"Name":{"type":"string","description":"The unit name as displayed in the AppFolio Property Manager"},"Bathrooms":{"type":"string","format":"decimal","example":"2.5","description":"The number of desired bathrooms"},"Bedrooms":{"type":"integer","description":"The number of desired bedrooms"},"SquareFeet":{"type":"string","description":"The size of the unit in square feet"},"Description":{"type":"string","description":"A brief, informative description of the unit"},"ListedMarketRent":{"type":"string","format":"decimal","description":"The rent per month as listed on the market","deprecated":true},"ListedRent":{"type":"string","format":"decimal","description":"The rent per month as listed on the market. This value reflects either the market rent or the advertised rent, depending on whether “Use Market Rent On Ads” is enabled in AppFolio Property Manager.","deprecated":true},"MarketRent":{"type":"string","format":"decimal","description":"The unit's base market rent, representing its estimated fair market value based on current market conditions and comparable properties. It does not include advertised adjustments or amenity fees. This value directly updates the unit's market rent unless overridden by a configured unit type."},"AdvertiseUsingListedMarketRent":{"type":"boolean","description":"Indicates whether or not to use the listed market rent as the advertised rent. Passing in `null` will result in no change."},"CatsAllowed":{"type":"string","enum":["Yes","No"],"description":"The unit’s cat policy. Valid values include “Yes”, “No” or `null`. A null value indicates that the unit may not have specified a policy for cats.\n| Attribute | Type   | Description                                |\n|-----------|--------|--------------------------------------------|\n| Yes       | String | Cats are permitted on the unit         |\n| No        | String | Cats are not permitted on the unit     |\n| null      | String | No cat policy has been set for the unit |\n"},"DogsAllowed":{"type":"string","enum":["Large \u0026 Small","Small Only","No"],"description":"The unit’s dog policy. Valid values include “Large \u0026 Small”, “Small Only”, \"No\" or `null`. A null value indicates that the unit may not have specified a policy for dogs.\n| Attribute     | Type   | Description                                    |\n|---------------|--------|------------------------------------------------|\n| Large \u0026 Small | String | Large and small dogs are permitted on unit |\n| Small Only    | String | Only small dogs are permitted on the unit  |\n| No            | String | No dogs are permitted on the unit          |\n| null          | String | No dog policy has been set for the unit    |\n"},"CustomFields":{"$ref":"#/components/schemas/CustomFields.UpdateAttribute"},"Address1":{"type":"string","description":"The primary street address of the unit"},"Address2":{"type":"string","description":"Additional street address information pertaining to the unit"},"City":{"type":"string","description":"The city where the unit is located"},"State":{"type":"string","description":"The state where the unit is located"},"Zip":{"type":"string","description":"The zip code where the unit is located"},"MaintenanceNotes":{"type":"string","description":"A brief informative message about the unit's maintenance"},"MarketingTitle":{"type":"string","description":"The title of the listing for syndication"},"MarketingDescription":{"type":"string","description":"A description of the listing for syndication"},"NonRevenue":{"type":"boolean","description":"Indicates whether or not the unit is rentable and is a model unit, office or other non revenue unit"},"Deposit":{"type":"number","description":"The security deposit amount"},"ApplicationFee":{"type":"number","description":"The application fee amount"},"RentReady":{"type":"boolean","description":"Indicates whether or not the unit is ready to be occupied by a tenant"},"Amenities":{"type":"array","description":"The amenities associated with the unit. Amenity names are case-sensitive. Providing an array of valid strings will overwrite all existing amenities. Passing in an empty array `[]` or an array of empty strings `[\"\"]` or `[\"\", \"\"]` will clear all existing amenities. Passing in an array of a valid string and an empty string `[\"amenity_name\", \"\"]` will result in `Amenities: [\"amenity_name\"]`. Passing in `null` will result in no change. Cannot be specified when a Unit Type that defines amenities is assigned.","items":{"type":"string"}},"Tags":{"type":"array","description":"User-defined tag(s) that categorize the unit. Providing an array of valid strings will overwrite all existing tags. Passing in an empty array `[]` or an array of empty strings `[\"\"]` or `[\"\", \"\"]` will clear all existing tags. Passing in an array of a valid string and an empty string `[\"tag_name\", \"\"]` will result in `Tags: [\"tag_name\"]`. Passing in `null` will result in no change.","items":{"type":"string"}},"LastInspectedDate":{"type":"string","description":"The date the unit was last inspected","format":"date","example":"2021-12-01"},"YouTubeURL":{"type":"string","format":"uri","description":"The URL of the YouTube video for the listing(s)"},"PostedToInternet":{"type":"boolean","description":"Sets whether to post the unit to third-party listings pages. Set to `true` to display and accept applications and `false` to remove the listing."},"PostedToWebsite":{"type":"boolean","description":"Sets whether to post the unit to the AppFolio listings page. Set to `true` to display and accept applications and `false` to remove the listing."},"AvailableOn":{"type":"string","description":"The date upon which the unit can be leased. The date must be within three years of today's date","format":"date","example":"2021-12-01"},"ReadyForShowingOn":{"type":"string","description":"The date upon which the unit is ready for showing","format":"date","example":"2021-12-01"},"UnitTypeId":{"type":"string","description":"When present, the unit type can dictate fields like bedrooms, bathrooms, sq. feet, etc. Attempting to update a Unit with values that conflict with the Unit Type will cause an error.","format":"uuid"}}},"Unit.Update":{"allOf":[{"$ref":"#/components/schemas/Unit.UpdatableAttributes"},{"type":"object","properties":{"UtilitiesIncluded":{"type":"array","description":"User-defined utilities that are included with the unit. Utility names are case-sensitive. Providing an array of valid strings will overwrite all existing utilities. Passing in an empty array `[]` or an array of empty strings `[\"\"]` or `[\"\", \"\"]` will clear all existing utilities. Passing in an array of a valid string and an empty string `[\"Water\", \"\"]` will result in `UtilitiesIncluded: [\"Water\"]`. Passing in `null` will result in no change. Cannot be specified when a Unit Type that defines utilities is assigned.","items":{"type":"string"}},"AppliancesIncluded":{"type":"array","description":"User-defined appliances that are included with the unit. Appliance names are case-sensitive. Providing an array of valid strings will overwrite all existing appliances. Passing in an empty array `[]` or an array of empty strings `[\"\"]` or `[\"\", \"\"]` will clear all existing appliances. Passing in an array of a valid string and an empty string `[\"Refrigerator\", \"\"]` will result in `AppliancesIncluded: [\"Refrigerator\"]`. Passing in `null` will result in no change. Cannot be specified when a Unit Type that defines appliances is assigned. Cannot be set for units in Commercial or HOA properties.","items":{"type":"string"}},"HvacFilters":{"type":"array","description":"Array containing data about a unit's HVAC filters","items":{"properties":{"Length":{"type":"number","format":"float","description":"The length of the HVAC filter"},"Width":{"type":"number","format":"float","description":"The width of the HVAC filter"},"Thickness":{"type":"number","format":"float","description":"The thickness of the HVAC filter"},"Quantity":{"type":"integer","description":"The quantity of the HVAC filter"},"Model":{"type":"string","description":"The model of the HVAC filter"},"Brand":{"type":"string","description":"The brand of the HVAC filter"}}}},"HvacDetail":{"type":"object","description":"The HVAC details of the unit","properties":{"ConfirmedNoFiltersNeeded":{"type":"boolean","description":"Indicates whether or not the unit does not require HVAC filters"}}}}}]},"Unit.BulkUpdate":{"title":"Units","required":["Id"],"allOf":[{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the unit to update. Required for each row in the bulk update."},"Amenities":{"type":"array","description":"The amenities associated with the unit. Amenity names are case-sensitive. Cannot be specified when a Unit Type that defines amenities is assigned.","items":{"type":"string"}},"UtilitiesIncluded":{"type":"array","description":"User-defined utilities that are included with the unit. Utility names are case-sensitive. Providing an array of valid strings will overwrite all existing utilities. Passing in an empty array `[]` or an array of empty strings `[\"\"]` or `[\"\", \"\"]` will clear all existing utilities. Passing in an array of a valid string and an empty string `[\"Water\", \"\"]` will result in `UtilitiesIncluded: [\"Water\"]`. Passing in `null` will result in no change. Cannot be specified when a Unit Type that defines utilities is assigned.","items":{"type":"string"}},"AppliancesIncluded":{"type":"array","description":"User-defined appliances that are included with the unit. Appliance names are case-sensitive. Providing an array of valid strings will overwrite all existing appliances. Passing in an empty array `[]` or an array of empty strings `[\"\"]` or `[\"\", \"\"]` will clear all existing appliances. Passing in an array of a valid string and an empty string `[\"Refrigerator\", \"\"]` will result in `AppliancesIncluded: [\"Refrigerator\"]`. Passing in `null` will result in no change. Cannot be specified when a Unit Type that defines appliances is assigned. Cannot be set for units in Commercial or HOA properties.","items":{"type":"string"}}}},{"$ref":"#/components/schemas/Unit.UpdatableAttributes"}]},"BulkCreateUnit":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual units in the bulk-creation of units."},"PropertyId":{"type":"string","description":"Unique identifier of the property associated with the unit","format":"uuid"},"UnitTypeId":{"type":"string","description":"When present, the unit type can dictate fields like bedrooms, bathrooms, sq. feet, etc. Attempting to create a Unit with values that conflict with the Unit Type will cause an error.","format":"uuid"},"Name":{"type":"string","description":"The unit name as displayed in the AppFolio Property Manager"},"Bathrooms":{"type":"number","description":"The number of desired bathrooms"},"Bedrooms":{"type":"integer","description":"The number of desired bedrooms"},"SquareFeet":{"type":"number","description":"The size of the unit in square feet"},"Description":{"type":"string","description":"A brief, informative description of the unit"},"ListedMarketRent":{"type":"string","format":"decimal","description":"The rent per month as listed on the market","deprecated":true},"ListedRent":{"type":"string","format":"decimal","description":"The rent per month as listed on the market. This value reflects either the market rent or the advertised rent, depending on whether “Use Market Rent On Ads” is enabled in AppFolio Property Manager.","deprecated":true},"MarketRent":{"type":"string","format":"decimal","description":"The unit's base market rent, representing its estimated fair market value based on current market conditions and comparable properties. It does not include advertised adjustments or amenity fees."},"AdvertiseUsingListedMarketRent":{"type":"boolean","description":"Indicates whether or not to use the listed market rent as the advertised rent. Defaults to `true` if no value is provided or `null` is passed in."},"CatsAllowed":{"type":"string","enum":["Yes","No"],"description":"The unit’s cat policy. Valid values include “Yes”, “No” or `null`. A null value indicates that the unit may not have specified a policy for cats.\n| Attribute | Type   | Description                                |\n|-----------|--------|--------------------------------------------|\n| Yes       | String | Cats are permitted on the unit         |\n| No        | String | Cats are not permitted on the unit     |\n| null      | String | No cat policy has been set for the unit |\n"},"DogsAllowed":{"type":"string","enum":["Large \u0026 Small","Small Only","No"],"description":"The unit’s dog policy. Valid values include “Large \u0026 Small”, “Small Only”, \"No\" or `null`. A null value indicates that the unit may not have specified a policy for dogs.\n| Attribute     | Type   | Description                                    |\n|---------------|--------|------------------------------------------------|\n| Large \u0026 Small | String | Large and small dogs are permitted on unit |\n| Small Only    | String | Only small dogs are permitted on the unit  |\n| No            | String | No dogs are permitted on the unit          |\n| null          | String | No dog policy has been set for the unit    |\n"},"Address1":{"type":"string","description":"The primary street address of the unit"},"Address2":{"type":"string","description":"Additional street address information pertaining to the unit"},"City":{"type":"string","description":"The city where the unit is located"},"State":{"type":"string","description":"The state where the unit is located"},"Zip":{"type":"string","description":"The zip code where the unit is located"},"MaintenanceNotes":{"type":"string","description":"A brief informative message about the unit's maintenance"},"MarketingTitle":{"type":"string","description":"The title of the listing for syndication"},"MarketingDescription":{"type":"string","description":"A description of the listing for syndication"},"NonRevenue":{"type":"boolean","description":"Indicates whether or not the unit is rentable and is a model unit, office or other non revenue unit"},"NonRevenueType":{"type":"string","enum":["Model","Other","Renovation","Office"],"description":"The type of non-revenue unit. Requires `NonRevenue` to be `true`."},"NonRevenueStart":{"type":"string","format":"date","description":"The date on which the non-revenue period began. Required when `NonRevenueType` is provided. Cannot be a future date.","example":"2024-01-15"},"Deposit":{"type":"number","description":"The security deposit amount"},"ApplicationFee":{"type":"number","description":"The application fee amount"},"RentReady":{"type":"boolean","description":"Indicates whether or not the unit is ready to be occupied by a tenant"},"Amenities":{"type":"array","description":"The amenities associated with the unit. Amenity names are case-sensitive. Cannot be specified when a Unit Type that defines amenities is assigned.","items":{"type":"string"}},"Tags":{"type":"array","description":"User-defined tag(s) that categorize the unit","items":{"type":"string"}},"LastInspectedDate":{"type":"string","description":"The date the unit was last inspected","format":"date","example":"2021-12-01"},"YouTubeURL":{"type":"string","format":"uri","description":"The URL of the YouTube video for the listing(s)"},"AvailableOn":{"type":"string","description":"The date upon which the unit can be leased. The date must be within three years of today's date","format":"date","example":"2021-12-01"}}},"Units":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Unit"}},"next_page_path":{"example":"/api/v0/units?page[number]=2","description":"The URL path to the next page of responses"}}},"Units.Notes":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Unit.Note"}},"next_page_path":{"example":"/api/v0/units/notes?page[number]=2","description":"The URL path to the next page of responses"}}},"Unit.Note":{"type":"object","properties":{"Body":{"type":"string","description":"A brief informative message about the unit note. A unit note cannot exceed `63,535` characters."},"EntityId":{"type":"string","format":"uuid","description":"The unit to which the note will be attached"},"LastUpdatedAt":{"type":"string","description":"The date the unit note’s details were last updated"},"Id":{"type":"string","format":"uuid","description":"Unique identifier of the note associated with the unit"},"NoteId":{"deprecated":true,"type":"string","format":"uuid","description":"Unique identifier of the note associated with the unit. Deprecated in favor of `Id`."}}},"Unit.Attachments":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Unit.Attachment"}},"next_page_path":{"example":"/api/v0/units/attachments?page[number]=2","description":"The URL path to the next page of responses"}}},"Unit.Attachment":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the attachment"},"Name":{"type":"string","description":"The name given to describe the attachment"},"ContentType":{"type":"string","description":"The content type of the unit attachment. An example content type is a photo or a PDF.","example":"application/pdf"},"CreatedAt":{"type":"string","format":"date-time","description":"The date and time the unit attachment was created by an AppFolio Property Manager user"},"EntityId":{"type":"string","format":"uuid","description":"Unique identifier of the unit associated with the attachment"},"FolderId":{"type":"string","format":"uuid","description":"Unique identifier of the folder the attachment is filed under, if any"},"URL":{"type":"string","description":"The link to download the file in the attachment"}}},"User":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of an AppFolio Property Manager user","format":"uuid"},"Email":{"type":"string","description":"The user's email address"},"FirstName":{"type":"string","description":"The user's first name"},"LastName":{"type":"string","description":"The user's last name"},"UserRole":{"type":"string","description":"The system role assigned to the user that that dictates most permissions"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the user's details were last updated"}}},"Users":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/User"}},"next_page_path":{"example":"/api/v0/users?page[number]=2","description":"The URL path to the next page of responses"}}},"Vendor":{"type":"object","properties":{"Id":{"type":"string","example":"25113767-a69e-11ea-abac-0a41ffc49f5e","description":"Unique identifier of the vendor","format":"uuid"},"Tags":{"type":"array","description":"User-defined tag(s) that categorize the vendor","items":{"type":"string"}},"TaxpayerId":{"type":"string","description":"The tax identification number of the vendor. This field accepts either a Employer Identification Number (EIN), a Social Security Number (SSN), or an Individual Taxpayer Identification Number (ITIN)."},"TaxpayerName":{"type":"string","description":"The taxpayer name of the vendor"},"CompanyName":{"type":"string","description":"The display name of a vendor's company"},"IsCompany":{"type":"boolean","description":"Indicates whether or not the vendor identifies as a company"},"UseCompanyNameAsTaxpayerName":{"type":"boolean","description":"Indicates whether or not to use the company name as the taxpayer name"},"CustomFields":{"$ref":"#/components/schemas/CustomFields.Attribute"},"CheckConsolidation":{"oneOf":[{"type":"string"}],"enum":["Print 1 check for each bill","10 bills per check","All bills on single check (hide extra stub detail)","All bills on single check"],"description":"How to consolidate checks for payment\n#### Consolidation Options\n| Options            | Description                                                                       |\n|--------------------|-----------------------------------------------------------------------------------|\n| Print 1 check for each bill  | Print a single check for each bill |\n| 10 bills per check   | Print ten bills per check |\n| All bills on single check (hide extra stub detail) | Print all bills on a single check, hiding the extra stub detail |\n| All bills on single check (hide extra stub detail) | Print all bills on a single check |\n"},"CheckStubBreakdown":{"oneOf":[{"type":"string"}],"enum":["List each bill (consolidated view)","List each bill detail line item (expanded view)"],"description":"How to break down the components of a check stub\n#### Break Down Options\n| Options            | Description                                                                       |\n|--------------------|-----------------------------------------------------------------------------------|\n| List each bill (consolidated view) | List each bill on the check stub |\n| List each bill detail line item (expanded view) | List each bill, and additionally, the bill detail line item |\n"},"HoldPayments":{"type":"boolean","description":"Indicates whether or not to hold payments until the work order is completed"},"EmailEcheckReceipt":{"type":"boolean","description":"Indicates whether or not to send a notification to the payee after an eCheck payment is made"},"PaymentTerms":{"type":"integer","description":"Represents the number of days the payment is due after the invoice date. A null value indicates that no payment terms were defined. A value of 0 indicates the payment is due on receipt.  A value greater than 0, for example, 15, indicates the payment is due 15 days after the invoice date."},"UsingEomTerms":{"type":"boolean","description":"Indicates whether or not the payment terms include an end-of-month (EOM) stipulation. For example, if PaymentTerms is 15, and EOM is true, the payment is due within 15 days of the end of the month."},"DefaultCheckMemo":{"type":"string","description":"The check memo that will appear when creating a bill for this vendor"},"DefaultGlAccountId":{"type":"string","format":"uuid","example":"a1d7b69a-53e5-42f1-acb1-53fad637fe09","description":"Unique identifier of the general ledger account that will appear when creating a bill or work order for this vendor"},"DoNotUseForWorkOrder":{"type":"boolean","description":"Indicates whether the vendor is ineligible for work order assignments. When set to true, this vendor should not be considered for new work orders."},"WorkOrderAdjustment":{"type":"number","format":"float","example":98.0,"description":"The percent amount to discount or markup the work order's bill. The work order adjustment is defaulted to zero percent (Default to zero))"},"AdjustmentType":{"oneOf":[{"type":"string"}],"enum":["discount","markup"],"description":"The type of adjustment, discount or markup to apply to the work order. The default value is `discount`.\n#### Adjustment Type Options\n| Options            | Description                            |\n|--------------------|----------------------------------------|\n| discount | The percent amount to discount the work order |\n| markup | The percent amount to markup the work order |\n"},"Send1099":{"type":"boolean","description":"Whether or not the vendor needs a 1099 tax form from the management company"},"FirstName":{"type":"string","description":"The vendor's first name"},"LastName":{"type":"string","description":"The vendor's last name"},"Address1":{"type":"string","description":"The primary street address of the vendor"},"Address2":{"type":"string","description":"Additional street address information pertaining to the vendor"},"City":{"type":"string","description":"The city where the vendor is located"},"State":{"type":"string","description":"The state where the vendor is located"},"Zip":{"type":"string","description":"The zip code where the vendor is located"},"CountryCode":{"type":"string","example":"US","description":"The country code of the vendor (e.g. \"JP\" for Japan)"},"PhoneNumber":{"deprecated":true,"type":"string","description":"The vendor's primary phone number"},"PhoneNumbers":{"type":"array","description":"The vendor's phone numbers","items":{"$ref":"#/components/schemas/Vendor.PhoneNumbers"}},"Email":{"deprecated":true,"type":"string","format":"email","description":"The vendor's primary email address"},"Emails":{"type":"array","description":"The vendor's emails","items":{"$ref":"#/components/schemas/Vendor.Emails"}},"CompanyURL":{"type":"string","format":"uri","description":"The internet address of the vendor's website"},"LiabilityInsuranceExpiration":{"type":"string","format":"date","example":"2022-12-31","description":"The expiration date of the vendor's liability insurance"},"AutoInsuranceExpiration":{"type":"string","format":"date","example":"2022-12-31","description":"The expiration date of the vendor's autmobile insurance"},"WorkersCompExpiration":{"type":"string","format":"date","example":"2022-12-31","description":"The expiration date of the vendor's worker's compensation insurance"},"ContractExpiration":{"type":"string","format":"date","example":"2022-12-31","description":"The expiration date of the vendor's contract"},"UmbrellaInsuranceExpiration":{"type":"string","format":"date","example":"2022-12-31","description":"The expiration date of the vendor's umbrella insurance"},"CompliantStatus":{"type":"boolean","description":"Indicates whether or not the vendor meets compliance"},"NetVendorId":{"type":"string","description":"The vendor's NetVendor ID"},"Link":{"type":"string","format":"uri","description":"A link to the vendor's page in the AppFolio Property Manager"},"HiddenAt":{"type":"string","format":"date-time","description":"When the vendor was marked inactive by an AppFolio Property Manager user"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the vendor's details were last updated"},"DefaultAutoAcceptWorkOrders":{"type":"boolean","description":"Indicates whether the vendor is ineligible for auto-accept work order assignments. When set to true, this vendor will auto-accept all work orders assigned to them."}}},"Vendors":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Vendor"}},"next_page_path":{"example":"/api/v0/vendors?page[number]=2","description":"The URL path to the next page of responses"}}},"Vendors.Notes":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Vendor.Note"}},"next_page_path":{"example":"/api/v0/vendors/notes?page[number]=2","description":"The URL path to the next page of responses"}}},"Vendor.Note":{"type":"object","properties":{"Body":{"type":"string","description":"A brief informative message related to the vendor. A vendor note cannot exceed `65,535` characters."},"EntityId":{"type":"string","format":"uuid","description":"The vendor to which the note will be attached"},"LastUpdatedAt":{"type":"string","description":"The date the vendor note's details were last updated"},"Id":{"type":"string","format":"uuid","description":"Unique identifier of the note associated with the vendor"},"NoteId":{"deprecated":true,"type":"string","format":"uuid","description":"Unique identifier of the note associated with the vendor. Deprecated in favor of `Id`."}}},"Vendor.PhoneNumbers":{"properties":{"AdditionalDetails":{"type":"string","description":"Additional detailed information pertaining to the phone number associated with the vendor"},"IsPrimary":{"type":"boolean","description":"Indicates whether the phone number provided is the vendor's main contact number"},"Label":{"type":"string","enum":["Fax","Home","Mobile","Office"],"description":"The label of the phone number, e.g. 'Home'"},"Number":{"type":"string","description":"The vendor's phone number"}}},"Vendor.Emails":{"properties":{"EmailAddress":{"type":"string","description":"The vendor's email address"},"IsPrimary":{"type":"boolean","description":"Indicates whether the email address provided is the vendor's primary email address"}}},"Vendor.BulkCreate":{"title":"Vendor","required":["ReferenceId","IsCompany","UseCompanyNameAsTaxpayerName"],"allOf":[{"$ref":"#/components/schemas/BulkCreateVendor"}]},"BulkCreateVendor":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual vendors in the bulk-creation of vendors."},"TaxpayerName":{"type":"string","description":"The taxpayer name of the vendor \u003cbr /\u003e\nIf `UseCompanyNameAsTaxpayerName` is true, then `TaxpayerName` will be `CompanyName`.\u003cbr /\u003e\nIf `IsCompany` is true, and `TaxpayerName` is not provided, then `TaxpayerName` will be set to `CompanyName`.\u003cbr /\u003e\nIf `IsCompany `is false, and `TaxpayerName` is not provided, then `TaxpayerName` will be set to the concatenation of `FirstName` and `LastName`.\u003cbr /\u003e\nIf `TaxpayerName` is provided, and `UseCompanyNameAsTaxpayerName` is false, then `TaxpayerName` will be set as provided value.\n"},"TaxpayerId":{"type":"string","description":"The tax identification number of the vendor. This field accepts either a Employer Identification Number (EIN), a Social Security Number (SSN), or an Individual Taxpayer Identification Number (ITIN)."},"CompanyName":{"type":"string","description":"The display name of a vendor's company. If `IsCompany` is true, this field is required."},"Send1099":{"type":"boolean","description":"Indicates whether or not the vendor needs a 1099 tax form from the management company"},"FirstName":{"type":"string","description":"The vendor's first name. If `IsCompany` is false, this field is required."},"LastName":{"type":"string","description":"The vendor's last name. If `IsCompany` is false, this field is required."},"Address1":{"type":"string","description":"The primary street address of the vendor. If provided, `City` and `CountryCode` must also be provided. A primary address is required when `UseOnlinePayables` is true."},"Address2":{"type":"string","description":"Additional street information pertaining to the vendor. If provided, `Address1`, `City` and `CountryCode` must also be provided."},"City":{"type":"string","description":"The city where the vendor is located. If provided, `Address1` and `CountryCode` must also be provided. This attribute is required when `UseOnlinePayables` is true."},"State":{"type":"string","description":"The state where the vendor is located (e.g. \"CA\" for California). If provided, `Address1`, `City` and `CountryCode` must also be provided. This attribute is required when `UseOnlinePayables` is true. This value must not be an unincorporated US territory (AS, FM, MH, MP, or VI) for primary address when `UseOnlinePayables` and `VendorPaidByACH` are both true."},"Zip":{"type":"string","description":"The zip code where the vendor is located. Must be a valid 5-digit ZIP code (e.g., 93013) or ZIP+4 format (e.g., 93013-0429). If provided, `Address1`, `City` and `CountryCode` must also be provided. This attribute is required for primary address when `UseOnlinePayables` is true."},"CountryCode":{"type":"string","description":"The country code of the vendor (e.g. \"US\" for United States). If provided, `Address1` and `City` must also be provided. This attribute is required when `UseOnlinePayables` is true. This value must be \"US\" for primary address when `UseOnlinePayables` and `VendorPaidByAch` are both true."},"PhoneNumbers":{"type":"array","description":"The vendor's phone number(s)","items":{"$ref":"#/components/schemas/Vendor.PhoneNumbers"}},"Emails":{"type":"array","description":"The vendor's email address(es)","items":{"$ref":"#/components/schemas/Vendor.Emails"}},"CompanyURL":{"type":"string","description":"The internet address of the vendor's website"},"LiabilityInsuranceExpiration":{"type":"string","format":"date","description":"The expiration date of the vendor's liability insurance"},"AutoInsuranceExpiration":{"type":"string","format":"date","description":"The expiration date of the vendor's automobile insurance"},"WorkersCompExpiration":{"type":"string","format":"date","description":"The expiration date of the vendor's worker's compensation insurance"},"ContractExpiration":{"type":"string","format":"date","description":"The expiration date of the contract"},"UmbrellaInsuranceExpiration":{"type":"string","format":"date","description":"The expiration date of the vendor's umbrella insurance"},"CompliantStatus":{"type":"boolean","description":"Indicates whether or not the vendor meets compliance"},"NetVendorId":{"type":"string","description":"The vendor's NetVendor ID"},"IsCompany":{"type":"boolean","description":"Indicates whether or not the vendor identifies as a company"},"UseCompanyNameAsTaxpayerName":{"type":"boolean","description":"Indicates whether or not to use the company name for tax paying purposes"},"PaymentTerms":{"type":"integer","description":"Represents the number of days the payment is due after the invoice date. A null value indicates that no payment terms were defined. A value of 0 indicates the payment is due on receipt.  A value greater than 0, for example, 15, indicates the payment is due 15 days after the invoice date. Required value of 1-31 if UsingEomTerms is true."},"UsingEomTerms":{"type":"boolean","description":"Indicates whether or not the payment terms include an end-of-month (EOM) stipulation. For example, if PaymentTerms is 15, and EOM is true, the payment is due within 15 days of the end of the month. If a `null` value passed to `UsingEomTerms` or no value is provided, `UsingEomTerms` will default to false"},"DefaultAutoAcceptWorkOrders":{"type":"boolean","description":"Indicates whether the vendor is ineligible for auto-accept work order assignments. When set to true, this vendor will auto-accept all work orders assigned to them."},"Tags":{"type":"array","description":"User-defined tag(s) that categorize the vendor","items":{"type":"string"}},"VendorPaidByACH":{"type":"boolean","description":"Indicates whether or not the vendor is paid via ACH (Automated Clearing House) transfer."},"UseOnlinePayables":{"type":"boolean","description":"Indicates whether or not the vendor uses Online Payables for receiving payments."},"BankAccountRoutingNumber":{"type":"string","description":"The vendor's bank account routing number. Must be a valid 9-digit ABA routing number. This attribute is required when both `UseOnlinePayables` and `VendorPaidByACH` are true. Will be ignored if online payables is enabled and vendor is not paid by ACH."},"BankAccountNumber":{"type":"string","description":"The vendor's bank account number. Must be 4-17 characters and can only contain numbers and hyphens. This attribute is required when both `UseOnlinePayables` and `VendorPaidByACH` are true. Will be ignored if online payables is enabled and vendor is not paid by ACH."},"SavingsAccount":{"type":"boolean","description":"Indicates whether or not the bank account is a savings account. If false or not provided, the account is assumed to be a checking account. Will be ignored if online payables is enabled and vendor is not paid by ACH."}}},"Vendor.Create.PhoneNumbers":{"required":["Number"],"properties":{"AdditionalDetails":{"type":"string","description":"Additional detailed information pertaining to the phone number associated with the vendor"},"IsPrimary":{"type":"boolean","description":"Indicates whether the phone number provided is the vendor’s main contact number"},"Label":{"type":"string","enum":["Fax","Home","Mobile","Office"],"description":"The label of the phone number, e.g. 'Home'"},"Number":{"type":"string","description":"The vendor's phone number"}}},"Vendor.Create.Emails":{"required":["EmailAddress"],"properties":{"EmailAddress":{"type":"string","description":"The vendor's email address"},"IsPrimary":{"type":"boolean","description":"Indicates whether the email address provided is the vendor’s primary email address"}}},"TenantLedger":{"type":"object","properties":{"OccupancyId":{"type":"string","format":"uuid","description":"Unique identifier of the occupancy associated with the ledger","example":"460964av-gc5b-2g9a-h739-71jdg547dsa5"},"Ledger":{"type":"array","description":"Array of ledger data. Contains the charges, payments, and credits for the occupancy specified by the `OccupancyId`.","items":{"properties":{"LineItemId":{"type":"string","example":"630964fb-bc9b-4f9a-b649-01cfe309cb52","description":"Unique identifier of the line item of the transaction","format":"uuid"},"TransactionType":{"oneOf":[{"type":"null"},{"type":"string"}],"enum":[null,"Charge","Credit","Receipt","Bill","Check"],"description":"The type of transaction on the ledger\n#### TransactionType Options\n| Options       | Description                                                          |\n|---------------|----------------------------------------------------------------------|\n| null          |  The `TransactionType` is `null` when the transaction is a reversal  |\n| Charge        | A charge to the tenant |\n| Credit        | A reduction to the amount charged.  A credit is a negative amount that can be applied to specific charges reducing the overall amount of the charge. |\n| Receipt       | A payment made by the tenant or external entity to pay off specific charges |\n| Bill          | A bill, representing money owed to a third party. A negative amount indicates a reduction in the total amount of the bill. |\n| Check         | A check, representing money paid to a third party |\n"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the GL account associated with the transaction","example":"630964fb-bc9b-4f9a-b649-01cfe309ccc2"},"Date":{"type":"string","format":"date","description":"The date of the transaction"},"Payment":{"type":"string","description":"The amount paid. A positive payment amount is the tenant's receipt. A negative amount represents the check being paid back to the tenant, for example, if the payment was NSF'd, or charged back."},"Charge":{"type":"string","description":"The amount charged to the tenant. A positive value is a normal tenant charge. A negative value can be a tenant credit or a tenant payable."},"TransactionId":{"type":"string","format":"uuid","description":"Unique identifier of the transaction associated with the ledger","example":"fse456vd-jt3n-3f7j-b649-03cve362dsa7"},"CreatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the transaction was created"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the transaction's details were last updated"},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property associated with the transaction","example":"aa26e625-3d88-492b-9ea4-1c516bd72688"},"ChargeId":{"type":"string","format":"uuid","description":"Unique identifier on the payment, specifying which charge the payment is applied to.","example":"559cdb28-e99c-4ade-8343-11e350626204"},"ReversalStatus":{"$ref":"#/components/schemas/Ledger.TenantReversalStatus"},"ReverserTransactionId":{"type":"string","format":"uuid","description":"Unique identifier of the transaction that reversed this one","example":"837bb412-cc78-442e-8573-1ceb4b29e95c"}}}}}},"TenantLedgers":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TenantLedger"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/tenant_ledgers?page[number]=2"}}},"CaHomeownerLedger":{"type":"object","properties":{"OccupancyId":{"type":"string","format":"uuid","description":"Unique identifier of the occupancy associated with the ledger","example":"460964av-gc5b-2g9a-h739-71jdg547dsa5"},"Ledger":{"type":"array","description":"This contains the charges, payments, and credits for the occupancy specified by the `OccupancyId`","items":{"properties":{"LineItemId":{"type":"string","example":"630964fb-bc9b-4f9a-b649-01cfe309cb52","description":"Unique identifier of the line item of the transaction","format":"uuid"},"TransactionType":{"oneOf":[{"type":"null"},{"type":"string"}],"enum":[null,"Charge","Credit","Receipt","Bill","Check"],"description":"The type of transaction on the ledger\n#### TransactionType Options\n| Options       | Description                                                          |\n|---------------|----------------------------------------------------------------------|\n| null          |  The `TransactionType` is `null` when the transaction is a reversal  |\n| Charge        | A charge to the homeowner |\n| Credit        | A reduction to the amount charged.  A credit is a negative amount that can be applied to specific charges reducing the overall amount of the charge |\n| Receipt       | A payment made by the homeowner or external entity to pay off specific charges |\n| Bill          | A bill, representing money owed to a third party. A negative amount indicates a reduction in the total amount of the bill. |\n| Check         | A check, representing money paid to a third party |\n"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the general ledger account associated with the transaction","example":"630964fb-bc9b-4f9a-b649-01cfe309ccc2"},"Date":{"type":"string","format":"date","description":"The date of the transaction"},"Payment":{"type":"string","description":"The amount paid. A positive payment amount is the homeowner's receipt. A negative amount represents the check being paid back to the homeowner, for example, if the payment was NSF'd, or charged back."},"Charge":{"type":"string","description":"The amount charged to the homeowner. A positive value is a normal homeowner charge. A negative value can be a homeowner credit or a homeowner payable."},"TransactionId":{"type":"string","format":"uuid","description":"Unique identifier of the transaction associated with the ledger","example":"fse456vd-jt3n-3f7j-b649-03cve362dsa7"},"CreatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the transaction was created"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"The date the transaction's details were last updated"},"AssociationId":{"type":"string","format":"uuid","description":"Unique identifier of the association related to the transaction","example":"aa26e625-3d88-492b-9ea4-1c516bd72688"},"ChargeId":{"type":"string","format":"uuid","description":"Unique identifier on the payment, specifying which charge the payment is applied to","example":"559cdb28-e99c-4ade-8343-11e350626204"},"ReversalStatus":{"$ref":"#/components/schemas/Ledger.HomeownerReversalStatus"},"ReverserTransactionId":{"type":"string","format":"uuid","description":"Unique identifier of the transaction that reversed this one","example":"837bb412-cc78-442e-8573-1ceb4b29e95c"}}}}}},"CaHomeownerLedgers":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CaHomeownerLedger"}},"next_page_path":{"example":"/api/v0/ca/homeowner_ledgers?page[number]=2","description":"The URL path to the next page of responses"}}},"WorkOrders.Notes":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WorkOrder.Note"}},"next_page_path":{"example":"/api/v0/work_orders/notes?page[number]=2","description":"The URL path to the next page of responses"}}},"WorkOrder.Note":{"type":"object","properties":{"Body":{"type":"string","description":"A brief informative message about the work order. A work order note cannot exceed `65,535` characters."},"EntityId":{"type":"string","format":"uuid","description":"The work order to which the note is attached"},"LastUpdatedAt":{"type":"string","description":"The date the work order note's details were last updated"},"Id":{"type":"string","format":"uuid","description":"Unique identifier of the note associated with the work order"},"NoteId":{"deprecated":true,"type":"string","format":"uuid","description":"Unique identifier of the note associated with the work order. Deprecated in favor of `Id`."}}},"WorkOrder":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the work order","format":"uuid"},"AssignedUsers":{"$ref":"#/components/schemas/WorkOrder.AssignedUsers"},"BillIds":{"type":"array","description":"The UUIDs of the bills (vendor bills) associated with the work order, resolved through the work order's billable transactions. Cross-reference these with the **Bills** endpoint (they match the bill `Id`). Returns an empty array when no bills are associated.","items":{"type":"string","format":"uuid"}},"CanceledOn":{"type":"string","format":"date","example":"2021-10-27","description":"The date the work order's status changed to \"canceled\""},"CancellationReason":{"type":"string","description":"The comments provided by the resident when requesting cancellation via resident portal."},"CancellationRequested":{"type":"boolean","description":"Indicates whether or not cancellation of the work order was requested by the Resident."},"CompletedOn":{"type":"string","format":"date","example":"2021-10-27","description":"The date the work order's status changed to \"completed\""},"CreatedAt":{"type":"string","format":"date-time","example":"2021-09-27T11:33:35Z","description":"A timestamp of when the work order's status changed to \"new\""},"CustomFields":{"$ref":"#/components/schemas/CustomFields.Attribute"},"Description":{"type":"string","description":"The top-level description for a grouping of work orders in AppFolio"},"EntryInstructions":{"type":"string","description":"The additional information regarding entry to a unit, provided by the tenant when granting permission to enter the residence."},"Estimates":{"$ref":"#/components/schemas/WorkOrder.Estimates"},"WorkOrderIssue":{"type":"string","description":"The display name of the issue on the work order"},"InspectionId":{"type":"string","description":"Unique identifier of the inspection associated with the work order","format":"uuid"},"JobDescription":{"type":"string","description":"A brief description of the work order to be performed"},"InventoryDetails":{"$ref":"#/components/schemas/WorkOrder.InventoryDetails.List"},"LaborItems":{"$ref":"#/components/schemas/WorkOrder.LaborItems.List"},"ManagementCompanyAsVendor":{"type":"boolean","example":false,"description":"Indicates whether or not the management company is acting as the vendor for the work order"},"OccupancyId":{"type":"string","description":"Unique identifier of the occupancy associated with the work order","format":"uuid"},"PermissionToEnter":{"description":"Indicates whether or not the occupancy has given permission to enter the unit","oneOf":[{"type":"boolean"},{"type":"string","enum":["n/a"]}]},"PreferredTimes":{"type":"array","description":"An array of preferred time slots as indicated by the tenant. Each time slot is defined by `StartAt` and `EndAt` attributes, representing the beginning and end times, respectively. The default time zone is Coordinated Universal Time (UTC). \u003cbr\u003e \u003cbr\u003e**Note**: The `PreferredTimes` is only populated when `TenantAvailability` is set to `preferred_times`. For `urgent` or `anytime` availability, `PreferredTimes` will be an empty array.","items":{"properties":{"StartAt":{"type":"string","format":"date-time","description":"The tenant's preferred time for a maintenance technician to begin their work. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"EndAt":{"type":"string","format":"date-time","description":"The tenant's preferred time for a maintenance technician to end their work. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."}}}},"Priority":{"$ref":"#/components/schemas/WorkOrder.Priority"},"PropertyId":{"type":"string","description":"Unique identifier of the property where the work order will be performed","format":"uuid"},"Recurring":{"type":"boolean","description":"Indicates whether a particular work order is recurring or not"},"RequestingTenantId":{"type":"string","description":"Unique identifier of the tenant who submitted the maintenance request","format":"uuid"},"ScheduledEnd":{"type":"string","format":"date-time","example":"2021-11-27T12:33:35Z","description":"When the work order is scheduled to be completed"},"ScheduledStart":{"type":"string","format":"date-time","example":"2021-11-27T12:33:35Z","description":"When the work order is scheduled to start"},"ServiceRequestId":{"type":"string","description":"The `ServiceRequestId` can be provided to create a new work order under an existing service request (grouping of work orders). Allows for multiple work orders and vendors to be assigned during unit turns.","format":"uuid"},"SmartMaintenanceIntake":{"type":"boolean","description":"Indicates if the work order was dispatched through Smart Maintenance"},"SmartMaintenanceUrgency":{"type":"string","description":"The urgency level of the work order as determined by Smart Maintenance","example":"Critical","enum":["Low","Normal","Critical","Emergency"]},"Status":{"$ref":"#/components/schemas/WorkOrder.Status"},"WorkOrderStatus":{"$ref":"#/components/schemas/WorkOrder.WorkOrderStatus"},"TenantAvailability":{"type":"string","enum":["urgent","anytime","preferred_times"],"description":"Indicates when the tenant is available to allow the work order to be completed. Valid values include `urgent`, `anytime` or `preferred_times`."},"Type":{"type":"string","enum":["Unit Turn","Resident","Internal"],"description":"The purpose or origin of the work order request. Valid values include `Unit Turn`, `Resident`, or `Internal`."},"TenantRemarks":{"type":"string","description":"A brief description of the work order by the tenant"},"UnitId":{"type":"string","description":"Unique identifier of the unit associated with the work order","format":"uuid"},"VendorId":{"type":"string","description":"Unique identifier of the vendor associated with the work order","format":"uuid"},"VendorInstructions":{"type":"string","description":"Instructions for the vendor on how to complete the work order"},"VendorTrade":{"type":"string","description":"The type of service offered by the vendor\n\u003cdetails\u003e\n  \u003csummary\u003e\n  \u003cb\u003eVendor Trades\u003c/b\u003e\n  \u003c/summary\u003e\n\n| Options    |\n|------------|\n| Alarm/Security |\n| Appliances |\n| Capital Improvements |\n| Carpet/Flooring |\n| Cleaning |\n| Deck Repair |\n| Doors/Windows |\n| Drywall Repair |\n| Electrical |\n| Elevator Services |\n| Fences/Gates |\n| Fire/Water Damage  |\n| Fireplace/Chimney |\n| Garage Doors |\n| General Contractor |\n| Gutter Cleaning |\n| Handyperson |\n| HVAC |\n| Inspections |\n| Keys/Locks |\n| Landscaping |\n| Other |\n| Painting |\n| Parking Lots/Driveways |\n| Pest Control |\n| Plumbing |\n| Pool/Spa |\n| Preventative Maintenance |\n| Redevelopment |\n| Repairs and Maintenance: Exterior |\n| Repairs and Maintenance: Interior |\n| Roofing |\n| Septic System |\n| Smoke/Carbon Monoxide Detectors |\n| Snow Removal |\n| Trash/Recycling |\n| Turnover |\n| Utilities |\n \u003c/details\u003e\n"},"VendorPortalLink":{"type":"string","description":"A link to the vendor portal page for the work order","format":"uri"},"WithholdApprovedEstimateAmount":{"type":"boolean","description":"When `True`, Estimate amounts with the status `Approved` will be withheld from Owner Distributions."},"WorkCompletedOn":{"type":"string","format":"date","example":"2021-10-25","description":"The date the work order was completed"},"WorkOrderNumber":{"type":"string","description":"Sequential number of the work order"},"LastUpdatedAt":{"type":"string","format":"date-time","example":"2021-10-27T11:33:35Z","description":"The date the work order's details were last updated"},"Link":{"type":"string","format":"uri","description":"A link to the work order page in the AppFolio Property Manager"},"UnitTurnCategory":{"type":"string","description":"The category of the unit turn work order. This field requires a valid `UnitId` or `OccupancyId` if provided."}}},"WorkOrders":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WorkOrder"}},"next_page_path":{"example":"/api/v0/work_orders?page[number]=2","description":"The URL path to the next page of responses"}}},"RecurringCharge":{"properties":{"Id":{"type":"string","description":"Unique identifier of the recurring charge","format":"uuid"},"Amount":{"type":"number","format":"float","example":2345.0,"description":"The amount of the recurring charge"},"Description":{"type":"string","description":"A brief summary or description of the recurring charge"},"Frequency":{"type":"string","enum":["Monthly","Every 3 Months","Every 6 Months","Once a Year"],"description":"The frequency that the recurring charge occurs"},"EndDate":{"type":"string","format":"date","example":"2021-10-25","description":"The end date of the recurring charge"},"StartDate":{"type":"string","format":"date","example":"2021-10-25","description":"The start date of the recurring charge"},"OccupancyId":{"type":"string","description":"Unique identifier of the occupancy associated with the recurring charge","format":"uuid"},"GlAccountId":{"type":"string","description":"Unique identifier of the general ledger account associated with the recurring charge","format":"uuid"},"LastUpdatedAt":{"type":"string","format":"date-time","description":"The date the recurring charge was last updated"}}},"RecurringCharges":{"title":"Recurring Charges","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RecurringCharge"}},"next_page_path":{"example":"/api/v0/recurring_charges?page[number]=2","description":"The URL path to the next page of responses"}}},"RecurringJournalEntries":{"type":"object","properties":{"data":{"type":"array","items":{"title":"RecurringJournalEntry","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the recurring journal entry"},"AccountingBasis":{"type":"string","enum":["All","CashOnly","AccrualOnly"],"description":"The accounting basis for the recurring journal entry"},"CreatedAt":{"type":"string","format":"date-time","description":"The date the recurring journal entry was created"},"EndDate":{"type":"string","format":"date","description":"The end date after which the journal entry will no longer be posted"},"LastUpdatedAt":{"type":"string","format":"date-time","description":"The date the recurring journal entry's details were last updated"},"LineItems":{"$ref":"#/components/schemas/JournalEntry.LineItemsList"},"Months":{"type":"array","description":"Array of months (1-12) on which the journal entry posts. Empty if the entry must be posted manually.","items":{"type":"integer"}},"PostCode":{"type":"string","description":"Tag applied to all journal entries created from this recurring journal entry"},"PostDay":{"type":"integer","description":"Day of the month (1-28) on which the journal entry is posted"},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property. Null if the entry belongs to a property group."},"PropertyGroupId":{"type":"string","format":"uuid","description":"Unique identifier of the property group. Null if the entry belongs to a property."},"Recurring":{"type":"boolean","description":"Whether the journal entry posts automatically on a schedule (true) or must be posted manually (false)"},"Remarks":{"type":"string","description":"Notes or description for the recurring journal entry"},"StartDate":{"type":"string","format":"date","description":"The start date of the recurring journal entry"}}}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/recurring_journal_entries?page[number]=2"}}},"RecurringJournalEntry.BulkCreate":{"title":"RecurringJournalEntry","required":["StartDate","Recurring","PropertyId","LineItems","ReferenceId"],"properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference an individual recurring journal entry in the bulk-creation request."},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property. Required if PropertyGroupId is not provided."},"PropertyGroupId":{"type":"string","format":"uuid","description":"Unique identifier of the property group. Required if PropertyId is not provided."},"StartDate":{"type":"string","format":"date","description":"The start date of the recurring journal entry"},"EndDate":{"type":"string","format":"date","description":"The end date after which the journal entry will no longer be posted. Optional."},"Recurring":{"type":"boolean","description":"Whether the journal entry posts automatically on a schedule (true) or must be posted manually (false). When true, PostDay and Months are required."},"PostDay":{"type":"integer","minimum":1,"maximum":28,"description":"Day of the month (1-28) on which the journal entry is posted. Required when Recurring is true."},"Months":{"type":"array","description":"Array of months (1-12) on which the journal entry posts. Required when Recurring is true.","items":{"type":"integer"}},"AccountingBasis":{"type":"string","enum":["All","CashOnly","AccrualOnly"],"description":"The accounting basis for the recurring journal entry. Defaults to All."},"Remarks":{"type":"string","description":"Notes or description for the recurring journal entry"},"PostCode":{"type":"string","description":"Tag applied to all journal entries created from this recurring journal entry"},"LineItems":{"$ref":"#/components/schemas/JournalEntry.LineItemsCreate"}}},"RecurringCharge.Create":{"title":"Recurring Charges","required":["Amount","Frequency","StartDate","OccupancyId","GlAccountId"],"properties":{"Amount":{"type":"number","format":"float","example":2345.0,"description":"The amount of the recurring charge"},"Description":{"type":"string","description":"A brief summary or description of the recurring charge"},"Frequency":{"type":"string","enum":["Monthly","Every 3 Months","Every 6 Months","Once a Year"],"description":"The frequency that the recurring charge occurs"},"EndDate":{"type":"string","format":"date","example":"2021-10-25","description":"The end date of the recurring charge"},"StartDate":{"type":"string","format":"date","example":"2021-10-25","description":"The start date of the recurring charge"},"ProrateFirstMonth":{"type":"boolean","description":"Determines if the first month's recurring charge should be prorated. When true, the charge amount will be adjusted based on the start date within the month. Proration requires all of the following conditions: The start date cannot be the first day of a month, must be after the first day of the current month, the charge frequency must be Monthly, the charge cannot be an insurance charge, the charge cannot start and end in the same month, and the first charge has not posted."},"ProrateLastMonth":{"type":"boolean","description":"Determines if the final month's recurring charge should be prorated. When true, the charge amount will be adjusted based on the end date within the month. Proration requires all of the following conditions: The end date must exist and not fall on the last day of a month, must be a future date, the charge frequency must be Monthly, the charge cannot be an insurance charge, the charge cannot start and end in the same month, and final charge has not posted."},"OccupancyId":{"type":"string","description":"Unique identifier of the occupancy associated with the recurring charge","format":"uuid"},"GlAccountId":{"type":"string","description":"Unique identifier of the general ledger account associated with the recurring charge","format":"uuid"}}},"RecurringCharge.BulkCreate":{"type":"object","title":"Recurring Charge","required":["Amount","Frequency","StartDate","OccupancyId","GlAccountId","ReferenceId"],"properties":{"Amount":{"type":"number","format":"float","example":2345.0,"description":"The amount of the recurring charge"},"Description":{"type":"string","description":"A brief summary or description of the recurring charge"},"Frequency":{"type":"string","enum":["Monthly","Every 3 Months","Every 6 Months","Once a Year"],"description":"The frequency that the recurring charge occurs"},"EndDate":{"type":"string","format":"date","example":"2021-10-25","description":"The end date of the recurring charge"},"StartDate":{"type":"string","format":"date","example":"2021-10-25","description":"The start date of the recurring charge"},"ProrateFirstMonth":{"type":"boolean","description":"Determines if the first month's recurring charge should be prorated. When true, the charge amount will be adjusted based on the start date within the month. Proration requires all of the following conditions: The start date cannot be the first day of a month, must be after the first day of the current month, the charge frequency must be Monthly, the charge cannot be an insurance charge, the charge cannot start and end in the same month, and the first charge has not posted."},"ProrateLastMonth":{"type":"boolean","description":"Determines if the final month's recurring charge should be prorated. When true, the charge amount will be adjusted based on the end date within the month. Proration requires all of the following conditions: The end date must exist and not fall on the last day of a month, must be a future date, the charge frequency must be Monthly, the charge cannot be an insurance charge, the charge cannot start and end in the same month, and final charge has not posted."},"OccupancyId":{"type":"string","description":"Unique identifier of the occupancy associated with the recurring charge","format":"uuid"},"GlAccountId":{"type":"string","description":"Unique identifier of the general ledger account associated with the recurring charge","format":"uuid"},"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual recurring charges in the bulk-creation of recurring charges."}}},"RecurringCharge.Update":{"title":"Recurring Charges","properties":{"Id":{"type":"string","description":"Unique identifier of the recurring charge","format":"uuid"},"Amount":{"type":"number","format":"float","example":2345.0,"description":"The amount of the recurring charge"},"Description":{"type":"string","description":"A brief summary or description of the recurring charge"},"Frequency":{"type":"string","enum":["Monthly","Every 3 Months","Every 6 Months","Once a Year"],"description":"The frequency that the recurring charge occurs"},"EndDate":{"type":"string","format":"date","example":"2021-10-25","description":"The end date of the recurring charge"},"StartDate":{"type":"string","format":"date","example":"2021-10-25","description":"The start date of the recurring charge"},"ProrateFirstMonth":{"type":"boolean","description":"Determines if the first month's recurring charge should be prorated. When true, the charge amount will be adjusted based on the start date within the month. Proration requires all of the following conditions: The start date cannot be the first day of a month, must be after the first day of the current month, the charge frequency must be Monthly, the charge cannot be an insurance charge, the charge cannot start and end in the same month, and the first charge has not posted."},"ProrateLastMonth":{"type":"boolean","description":"Determines if the final month's recurring charge should be prorated. When true, the charge amount will be adjusted based on the end date within the month. Proration requires all of the following conditions: The end date must exist and not fall on the last day of a month, must be a future date, the charge frequency must be Monthly, the charge cannot be an insurance charge, the charge cannot start and end in the same month, and final charge has not posted."},"GlAccountId":{"type":"string","description":"Unique identifier of the general ledger account associated with the recurring charge","format":"uuid"}}},"RentalApplications":{"title":"Rental Applications","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RentalApplication"}},"next_page_path":{"example":"/api/v0/rental_applications?page[number]=2","description":"The URL path to the next page of responses"}}},"RentalApplication":{"type":"object","properties":{"Id":{"description":"Unique identifier of the rental application","type":"string","format":"uuid"},"RequestedBackgroundReport":{"description":"Indicates whether the applicant has requested a copy of their background check report","type":"boolean"},"HasHousingVoucher":{"description":"Indicates whether the applicant has a housing voucher, a government subsidy that assists with rent payments","type":"boolean"},"AgreedToTerms":{"description":"Indicates whether the applicant agreed to the terms and conditions set for the rental application. ","type":"boolean"},"ScreeningSubmissions":{"type":"array","description":"Array containing information about each screening submission associated with this rental application","items":{"properties":{"ScreeningId":{"type":"string","description":"Unique identifier of the rental applicant screening submission","format":"uuid"},"RequestedById":{"type":"string","description":"Unique identifier of the AppFolio Property Manager user who requested the rental applicant screening","format":"uuid"},"SubmittedAt":{"type":"string","description":"The date and time when the screening was requested","format":"date-time"}}}},"CampaignId":{"description":"Unique identifier of the campaign associated with the rental application","type":"string","format":"uuid"},"GroupId":{"description":"Unique identifier of the application group associated with the rental application","type":"string","format":"uuid"},"UnitId":{"description":"Unique identifier of the unit associated with the rental application","type":"string","format":"uuid"},"PropertyId":{"description":"Unique identifier of the property associated with the rental application","type":"string","format":"uuid"},"Bedrooms":{"type":"integer","description":"The number of desired bedrooms"},"Bathrooms":{"type":"string","format":"decimal","description":"The number of desired bathrooms"},"Deposit":{"type":"string","format":"decimal","description":"The security deposit amount"},"ListedMarketRent":{"deprecated":true,"type":"string","format":"decimal","description":"The rent per month as listed on the market"},"ListedRent":{"type":"string","format":"decimal","example":"750.0","description":"The rent per month as listed on the market. This value reflects either the market rent or the advertised rent, depending on whether \"Use Market Rent On Ads\" is enabled in the AppFolio Property Manager."},"Status":{"type":"string","enum":["new","decision_pending","approved","denied","canceled","in_review","info_needed","in_screening"],"description":"The rental application's status\n#### Status Options\n| Options          | Description                                                         |\n|------------------|---------------------------------------------------------------------|\n| new              | The prospective tenant's rental application was recently submitted  |\n| decision_pending | The rental application's decision is pending                        |\n| approved         | The rental application was approved by the landlord/management      |\n| denied           | The rental application was denied  by the landlord/management       |\n| canceled         | The rental application was canceled by the applicant/tenant         |\n| in_review        | The rental application is currently under evaluation                       |\n| info_needed     | The rental application requires additional information from the applicant to proceed |\n| in_screening    | The rental application is undergoing additional screening                  |\n"},"StatusChangedAt":{"type":"string","format":"date-time","description":"Timestamp indicating when the application's current status was last modified"},"SubmittedAt":{"type":"string","format":"date-time","description":"The time the rental application was submitted"},"DesiredMoveInDate":{"type":"string","format":"date","description":"The date the applicant would like to move in"},"Dependents":{"type":"array","description":"Contains details about about any dependents of the applicant","items":{"$ref":"#/components/schemas/RentalApplication.Dependent"}},"Applicant":{"type":"object","description":"Contains details about the rental applicant including their name, contact information, and residential and employment history.","properties":{"FirstName":{"type":"string","description":"The first name of the applicant"},"MiddleName":{"type":"string","description":"The rental applicant’s middle name"},"LastName":{"type":"string","description":"The last name of the applicant"},"Salutation":{"type":"string","description":"The rental applicant's salutation. For example, Mr. or Ms."},"Suffix":{"type":"string","description":"The rental applicant's suffix. For example, Sr. or  III."},"NoMiddleName":{"type":"boolean","description":"Indicates whether the applicant has a middle name. If true, the applicant has no middle name. "},"IsPrimaryTenant":{"type":"boolean","description":"Indicates whether this applicant is the primary tenant on the application. A primary tenant is the main leaseholder."},"Type":{"type":"string","enum":["Co-signer","Financially Responsible","Other Occupant"],"description":"  The type of rental applicant\n  #### Rental Applicant Types\n| Options                 | Description                                                                                 |\n|-------------------------|---------------------------------------------------------------------------------------------|\n| Co-signer               | A person who agrees to take legal responsibility for the rental applicant's debt or loan    |\n| Financially Responsible | The primary applicant directly responsible for payment                                      |\n| Other Occupant          | Other Occupants are individuals who will live in the unit/house but will not sign the lease |                                   |\n"},"DateOfBirth":{"type":"string","format":"date","description":"The date of birth of the applicant"},"TaxPayerId":{"type":"string","description":"The tax identification number of the rental applicant. This field accepts either a Social Security Number (SSN) or an Individual Taxpayer Identification Number (ITIN)."},"DriversLicenseNumber":{"type":"string","description":"The driver's license number of the applicant"},"DriversLicenseState":{"type":"string","description":"The driver's license state of the applicant"},"Pets":{"type":"array","description":"Contains details about the rental applicant’s pet(s)","items":{"$ref":"#/components/schemas/Pet"}},"AdditionalIncomes":{"type":"array","description":"Any additional income reported by the applicant","items":{"$ref":"#/components/schemas/RentalApplication.AdditionalIncome"}},"PrimaryEmail":{"deprecated":true,"type":"array","description":"The applicant's primary email","items":{"$ref":"#/components/schemas/RentalApplication.Email"}},"PrimaryPhoneNumber":{"deprecated":true,"type":"array","description":"The applicant's primary phone","items":{"$ref":"#/components/schemas/RentalApplication.Phone"}},"Emails":{"type":"array","description":"The applicant's emails","items":{"$ref":"#/components/schemas/RentalApplication.Email"}},"PhoneNumbers":{"type":"array","description":"The applicant's phone numbers","items":{"$ref":"#/components/schemas/RentalApplication.Phone"}},"ResidentialHistory":{"type":"array","description":"The applicant's residential history","items":{"$ref":"#/components/schemas/RentalApplication.ResidentialHistory"}},"Questionnaire":{"type":"array","description":"The applicant's questionnaire","items":{"$ref":"#/components/schemas/RentalApplication.Questionnaire"}},"EmploymentHistory":{"type":"array","description":"The applicant's employment history","items":{"$ref":"#/components/schemas/RentalApplication.EmploymentHistory"}}}}}},"RentalApplication.IntegratedScreening":{"description":"Object containing a rental applicant's screening information","properties":{"ScreeningId":{"type":"string","format":"uuid","description":"Unique identifier of the screening","example":"ee0964fb-bc9b-4f9a-b649-01cfe309cb52"},"ScreeningReportUrl":{"type":"string","format":"uri","description":"The external URL linking to the integrated applicant screening service. This URL provides access to the detailed screening report for the rental application.","example":"https://www.example.com/screening_report"}}},"RentalApplication.Update":{"type":"object","properties":{"Status":{"type":"string","enum":["approved","canceled","decision_pending","denied","in_review","info_needed","in_screening"],"description":"The rental application's status\n#### Status Options\n| Options          | Description                                                         |\n|------------------|---------------------------------------------------------------------|\n| approved         | The rental application was approved by the landlord/management  \n| canceled         | The rental application was canceled by the applicant/tenant         |\n| decision_pending | The rental application's decision is pending                        |\n| denied           | The rental application was denied by the landlord/management        |\n| in_review        | The rental application is currently under evaluation                       |\n| info_needed      | The rental application requires additional information from the applicant to proceed |\n| in_screening     | The rental application is undergoing additional screening                  |\n"},"StatusReason":{"type":"string","description":"The reason for the `Status` change of the rental application. Required when the `Status` of the rental application is `denied` and optional for all other statuses.\n\nNote: When not required, if the `Status` attribute is updated in a request without also passing in the `StatusReason`, the existing `StatusReason` will be cleared, resulting in a `null` value. Updating both the `Status` and `StatusReason` in the same request, or only the `StatusReason`, will successfully update the `StatusReason`."}}},"RentalApplication.ResidentialHistory":{"properties":{"Address":{"type":"array","description":"The address of the residence","items":{"$ref":"#/components/schemas/RentalApplication.Address"}},"Current":{"type":"boolean","description":"Indicates Indicates whether this is the applicant's current residence"},"ManagerName":{"type":"string","description":"The name of the applicant's manager"},"ManagerPhoneNumber":{"type":"string","description":"The phone number of the manager"},"ManagerEmailAddress":{"type":"string","description":"The email address of the applicant's manager"},"MonthlyRent":{"type":"number","description":"The applicant's monthly rent"},"ResidedFrom":{"type":"string","format":"date","description":"The date the applicant moved in"},"ResidedTo":{"type":"string","format":"date","description":"The date the applicant moved out"},"ReasonForLeaving":{"type":"string","description":"The reason the applicant left the residence"}}},"RentalApplication.EmploymentHistory":{"properties":{"EmployerName":{"type":"string","description":"The name of the applicant's employer"},"EmployerPhoneNumber":{"type":"string","description":"The phone number of the applicant's employer"},"SupervisorName":{"type":"string","description":"The name of the applicant's supervisor"},"SupervisorTitle":{"type":"string","description":"The title of the applicant's supervisor"},"PositionHeld":{"type":"string","description":"The position held by the applicant"},"MonthlySalary":{"type":"string","format":"decimal","description":"The monthly salary"},"Address1":{"type":"string","description":"The primary street address of the employer"},"Address2":{"type":"string","description":"The secondary street address of the employer"},"City":{"type":"string","description":"The city of the employer"},"State":{"type":"string","description":"The state of the employer"},"PostalCode":{"type":"string","description":"The postal code of the employer"},"CountryCode":{"type":"string","description":"The country code of the employer (e.g. \"JP\" for Japan)"}}},"RentalApplication.BulkCreate.EmploymentHistory":{"description":"The employer address (`Address1`, `Address2`, `City`, `State`, `PostalCode`, `CountryCode`) is optional as a whole: if none of the address attributes are provided, the employment history is still valid.","properties":{"EmployerName":{"type":"string","description":"The name of the applicant's employer. Maximum 255 characters."},"EmployerPhoneNumber":{"type":"string","description":"The phone number of the applicant's employer"},"SupervisorName":{"type":"string","description":"The name of the applicant's supervisor. Maximum 255 characters."},"SupervisorTitle":{"type":"string","description":"The title of the applicant's supervisor. Maximum 255 characters."},"PositionHeld":{"type":"string","description":"The position held by the applicant. Maximum 255 characters."},"MonthlySalary":{"type":"string","format":"decimal","description":"The monthly salary. Must be greater than 0."},"Address1":{"type":"string","description":"The primary street address of the employer. Required if any of `Address2`, `City`, `State`, `PostalCode`, or `CountryCode` is provided."},"Address2":{"type":"string","description":"The secondary street address of the employer"},"City":{"type":"string","description":"The city of the employer. Required if any of `Address1`, `Address2`, `State`, `PostalCode`, or `CountryCode` is provided."},"State":{"type":"string","description":"The state of the employer. Required when `CountryCode` is `US`."},"PostalCode":{"type":"string","description":"The postal code of the employer. Required if any of `Address1`, `Address2`, `City`, `State`, or `CountryCode` is provided."},"CountryCode":{"type":"string","description":"The country code of the employer (e.g. \"JP\" for Japan). Required if any of `Address1`, `Address2`, `City`, `State`, or `PostalCode` is provided."}}},"RentalApplication.BulkCreate.ResidentialHistory":{"required":["Address","Current"],"properties":{"Address":{"type":"object","description":"The address of the residence. `Address1`, `City`, `PostalCode`, and `CountryCode` are required. `State` is required when `CountryCode` is `US`.","required":["Address1","City","PostalCode","CountryCode"],"properties":{"Address1":{"type":"string","description":"The primary street address"},"Address2":{"type":"string","description":"The secondary street address"},"City":{"type":"string","description":"The city"},"State":{"type":"string","description":"The state. Required when `CountryCode` is `US`."},"PostalCode":{"type":"string","description":"The postal code"},"CountryCode":{"type":"string","description":"The country code (e.g. \"US\" for United States)"}}},"Current":{"type":"boolean","description":"Indicates whether this is the applicant's current residence. Exactly one residential history entry must have `Current` set to `true`."},"ManagerEmailAddress":{"type":"string","description":"The email address of the applicant's manager. Must be a valid email address."},"ManagerName":{"type":"string","description":"The name of the applicant's manager"},"ManagerPhoneNumber":{"type":"string","description":"The phone number of the manager"},"MonthlyRent":{"type":"number","format":"decimal","description":"The applicant's monthly rent. Must be a non-negative dollar amount."},"ReasonForLeaving":{"type":"string","description":"The reason the applicant left the residence"},"ResidedFrom":{"type":"string","format":"date","description":"The date the applicant moved in. Must be the 1st of a month (e.g. `2021-01-01`)."},"ResidedTo":{"type":"string","format":"date","description":"The date the applicant moved out. Must be the 1st of a month and must not be before `ResidedFrom`."}}},"RentalApplication.BulkCreate.Pet":{"required":["Type"],"properties":{"Name":{"type":"string","description":"The pet's name. Maximum 255 characters."},"Type":{"type":"string","description":"The pet's species or breed. Maximum 255 characters."},"Age":{"type":"integer","description":"The pet's age. Must be a non-negative integer."},"Weight":{"type":"number","format":"float","example":15.0,"description":"The pet's weight in pounds. Must be a non-negative number."}}},"RentalApplication.BulkCreate.AdditionalIncome":{"required":["MonthlyIncome","Source"],"properties":{"MonthlyIncome":{"type":"number","format":"decimal","description":"The monthly amount of the additional income. Must be a number greater than 0, with up to 2 decimal places."},"Source":{"type":"string","description":"The source of the additional income. Maximum 255 characters."}}},"RentalApplication.BulkCreate.Email":{"required":["EmailAddress"],"properties":{"EmailAddress":{"type":"string","description":"The applicant's email address. Must be a valid email address. Maximum 128 characters. The first email in the list is treated as the applicant's primary email."}}},"RentalApplication.BulkCreate.PhoneNumber":{"required":["Number"],"properties":{"Label":{"type":"string","enum":["Fax","Home","Mobile","Office"],"description":"The label of the phone number, e.g. 'Home'"},"Number":{"type":"string","description":"The applicant's phone number. Maximum 255 characters. The first phone number in the list is treated as the applicant's primary phone number. If the number matches a recognized US phone number format, it is normalized and returned as a formatted phone number, e.g. `805-555-0100` is stored and returned as `(805) 555-0100`."}}},"RentalApplication.BulkCreate.Dependent":{"required":["FirstName","LastName"],"properties":{"Birthdate":{"type":"string","format":"date","description":"The dependent's date of birth"},"FirstName":{"type":"string","description":"The dependent's first name. Maximum 255 characters."},"LastName":{"type":"string","description":"The dependent's last name. Maximum 255 characters."},"RelationshipToHead":{"type":"string","description":"The dependent's relationship to the applicant. Maximum 255 characters."}}},"RentalApplication.BulkCreate.Questionnaire":{"required":["Answer","Question"],"properties":{"Question":{"type":"string","description":"The question being asked. Maximum 65535 characters."},"Answer":{"type":"boolean","description":"The answer to the question"},"Description":{"type":"string","description":"The description of the question. Maximum 65535 characters."}}},"RentalApplication.Questionnaire":{"properties":{"Question":{"type":"string","description":"The question being asked"},"Answer":{"type":"string","description":"The answer to the question"},"Description":{"type":"string","description":"The description of the question"}}},"RentalApplication.Address":{"properties":{"Address1":{"type":"string","description":"The primary street address"},"Address2":{"type":"string","description":"The secondary street address"},"City":{"type":"string","description":"The city"},"State":{"type":"string","description":"The state"},"PostalCode":{"type":"string","description":"The postal code"},"CountryCode":{"type":"string","description":"The country code (e.g. \"US\" for United States)"}}},"RentalApplication.Email":{"properties":{"EmailAddress":{"type":"string","description":"The email address"},"IsPrimary":{"type":"boolean","description":"Indicates whether the email address provided is the applicant’s primary email address"}}},"RentalApplication.Dependent":{"properties":{"BirthDate":{"type":"string","format":"date","description":"The dependent's date of birth"},"FirstName":{"type":"string","description":"The dependent's first name"},"LastName":{"type":"string","description":"The dependent's last name"},"Relationship":{"type":"string","description":"The dependent's relationship to the applicant"}}},"Pet":{"properties":{"Name":{"type":"string","description":"The pet's name"},"Weight":{"type":"number","format":"float","example":15.0,"description":"The pet's weight in pounds"},"Age":{"type":"integer","description":"The pet's age"},"Type":{"type":"string","description":"The pet's species or breed"}}},"Vehicle":{"properties":{"Make":{"type":"string","description":"The make or brand of the vehicle"},"Model":{"type":"string","description":"The specific model name or number of the vehicle"},"Color":{"type":"string","description":"The vehicle’s color"},"LicensePlate":{"type":"string","description":"The vehicle’s license plate state and number"},"Year":{"type":"integer","description":"The manufacturing year of the vehicle"},"PermitNumber":{"type":"string","description":"The assigned parking permit number for the vehicle"}}},"RentalApplication.AdditionalIncome":{"properties":{"MonthlyIncome":{"type":"number","description":"The applicant’s reported monthly income"},"Source":{"type":"string","description":"The source(s) of the applicant’s monthly income"}}},"RentalApplication.Phone":{"properties":{"Label":{"type":"string","enum":["Fax","Home","Mobile","Office"],"description":"The label of the phone number, e.g. 'Home'"},"Number":{"type":"string","description":"The phone number"},"AdditionalDetails":{"type":"string","description":"Additional detailed information pertaining to the phone number(s)"},"IsPrimary":{"type":"boolean","description":"Indicates whether the phone number provided is the applicant’s main contact number"}}},"RentalApplications.Notes":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RentalApplication.Note"}},"next_page_path":{"example":"/api/v0/rental_applications/notes?page[number]=2","description":"The URL path to the next page of responses"}}},"RentalApplication.Note":{"type":"object","properties":{"Body":{"type":"string","description":"A brief informative message about the rental application note. A rental application note cannot exceed 63,535 characters."},"EntityId":{"type":"string","format":"uuid","description":"The rental application to which the note will be attached"},"LastUpdatedAt":{"type":"string","description":"The date the rental application note’s details were last updated"},"Id":{"type":"string","format":"uuid","description":"Unique identifier of the note associated with the rental application"},"NoteId":{"deprecated":true,"type":"string","format":"uuid","description":"Unique identifier of the note associated with the rental application. Deprecated in favor of `Id`."}}},"Showings":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Showing"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/showings?page[number]=2"}}},"Showing":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the showing","format":"uuid"},"AssignedUserId":{"type":"string","description":"The AppFolio Property Manager user responsible for the showing. Reference the **Users** endpoint for any necessary associations.","format":"uuid"},"LeadId":{"type":"string","description":"Unique identifier of the lead associated with the showing. Reference the **Leads** endpoint for any necessary associations.","format":"uuid"},"UnitId":{"type":"string","description":"Unique identifier of the unit that the interested party will be shown. Reference the **Units** endpoint for any necessary associations.","format":"uuid"},"StartAt":{"type":"string","format":"date-time","description":"The start time of the showing. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"EndAt":{"type":"string","format":"date-time","description":"The end time of the showing. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"Notes":{"type":"string","description":"A brief informative message about the showing"},"Status":{"type":"string","enum":["scheduled","canceled","no-show","confirmation pending","prospect confirmed","prospect canceled","canceled (unconfirmed)","cancel in progress","reschedule in progress"],"description":"The status of the showing\n#### Status Options\n| Options   | Description                                  |\n|-----------|----------------------------------------------|\n| scheduled | The default status once the showing is scheduled |\n| canceled  | The showing is canceled                          |\n| no-show   | The prospective resident did not show        |\n| confirmation pending | The showing has been scheduled, but awaiting confirmation from the prospective resident |\n| prospect confirmed  | The prospective resident has confirmed their attendance for the scheduled showing |\n| prospect canceled  | The prospective resident has canceled their scheduled showing |\n| canceled (unconfirmed) | The showing has been canceled, but this cancellation hasn't been confirmed by the prospective resident |\n| cancel in progress  | The process of canceling the showing is currently underway |\n| reschedule in progress   | The showing is in the process of being rescheduled to a new date or time |\n"}}},"Showing.Create":{"type":"object","required":["LeadId","UnitId","StartAt","EndAt"],"properties":{"AssignedUserId":{"type":"string","description":"The AppFolio Property Manager user responsible for the showing. Reference the **Users** endpoint for any necessary associations.","format":"uuid"},"LeadId":{"type":"string","description":"Unique identifier of the lead associated with the showing. Reference the **Leads** endpoint for any necessary associations.","format":"uuid"},"UnitId":{"type":"string","description":"Unique identifier of the unit that the interested party will be shown. Reference the **Units** endpoint for any necessary associations.","format":"uuid"},"StartAt":{"type":"string","format":"date-time","description":"The start time of the showing. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"EndAt":{"type":"string","format":"date-time","description":"The end time of the showing. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"Notes":{"type":"string","description":"A brief informative message about the showing"}}},"Showing.Update":{"type":"object","properties":{"AssignedUserId":{"type":"string","description":"AppFolio Property Manager user assigned to the showing. A `null` value passed to `AssignedUserId` will unassign the user previously assigned to the showing. Omitting `AssignedUserId` from the request body will not update the assigned user. Reference the **Users** endpoint for any necessary associations.","format":"uuid"},"StartAt":{"type":"string","format":"date-time","description":"The start time of the showing. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"EndAt":{"type":"string","format":"date-time","description":"The end time of the showing. The value must adhere to the ISO 8601 format `YYYY-MM-DDThh:mm:ssZ` and the default time zone is Coordinated Universal Time (UTC)."},"Notes":{"type":"string","description":"A brief informative message about the showing"},"Status":{"type":"string","enum":["scheduled","canceled","no-show"],"description":"The status of the showing\n#### Status Options\n| Options   | Description                                  |\n|-----------|----------------------------------------------|\n| scheduled | The default status once the showing is scheduled |\n| canceled  | The showing is canceled                          |\n| no-show   | The prospective resident did not show        |\n"}}},"Bill":{"type":"object","properties":{"AccountNumber":{"type":"string","description":"For utility billing. The account number associated with the bill, used by a utility vendor to identify the account. \u003cbr\u003e \u003cbr\u003e**Note**: `WorkOrderId` and `AccountNumber` are mutually exclusive. Therefore, only one of them can be provided in the request."},"CashAccountId":{"type":"string","format":"uuid","description":"The general ledger account ID of the Cash Account the bill will be paid out of. If the property is corporate, the CashAccountID must be a corporate gl account. If it is not, it cannot be a corporate GL account"},"CheckMemo":{"type":"string","description":"The memo on the check"},"CreateCorporateCharges":{"type":"boolean","description":"When true, automatically create corporate charges for this bill. Only applies when `ManagementCompanyAsPayee` is true and Corporate Charge Automation is configured in Corporate Accounting Settings; otherwise no charges are created. Defaults to false when omitted."},"DueDate":{"type":"string","format":"date","description":"The date the bill is due"},"InvoiceDate":{"type":"string","format":"date","description":"The date the invoice was received"},"LineItems":{"$ref":"#/components/schemas/Bill.LineItems"},"ManagementCompanyAsPayee":{"type":"boolean","description":"Indicates whether the management company is the payee for the bill. Required and must be true when VendorId is null or not provided. When true and `CreateCorporateCharges` is also true, if Corporate Charge and Receipt Automation are configured in Corporate Accounting Settings, charges and receipts will automatically post."},"PostingDate":{"type":"string","format":"date","description":"The accrual-accounting invoice date"},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property on the bill. If a `PropertyId` is not found within the `LineItem` array, use this value for reference purposes."},"Reference":{"type":"string","description":"The reference number of the bill. This number must be unique, no duplicate record is allowed."},"Remarks":{"type":"string","description":"A description or summary of the bill"},"TotalAmount":{"type":"string","format":"decimal","description":"The total amount due. Ensure that the total amount is equal to the total of all line items summed."},"VendorId":{"type":"string","format":"uuid","description":"Unique identifier of the the payee's vendor ID. Required when ManagementCompanyAsPayee is false or not provided. When present, ManagementCompanyAsPayee cannot be true."},"WorkOrderId":{"type":"string","format":"uuid","description":"Unique identifier of the work order corresponding to the bill(s). The value of `WorkOrderId` cannot be null. \u003cbr\u003e \u003cbr\u003e**Note**: `WorkOrderId` and `AccountNumber` are mutually exclusive. Therefore, only one of them can be provided in the request."}}},"Bills":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Bill.List"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/bills?page[number]=2"}}},"Bill.List":{"title":"Bill","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the bill"},"AccountNumber":{"type":"string","description":"For utility billing. The account number associated with the bill, used by a utility vendor to identify the account"},"ApprovalStatus":{"type":"string","enum":["Pending","Approved"],"description":"#### Indicates the bill's approval status\n| Attributes  | Type                  | Description        |\n|-------------|-----------------------|--------------------|\n| Pending | String | The bill is pending approval |\n| Approved  | String | The bill is approved |\n\n"},"CashAccountId":{"type":"string","format":"uuid","description":"The general ledger account ID of the Cash Account the bill will be paid out of. If the property is corporate, the CashAccountID must be a corporate gl account. If it is not, it cannot be a corporate GL account"},"CheckMemo":{"type":"string","description":"The memo on the check"},"Description":{"type":"string","description":"A description or summary of the bill"},"DueDate":{"type":"string","format":"date","description":"The date the bill is due"},"InvoiceDate":{"type":"string","format":"date","description":"The date the invoice was received"},"LastUpdatedAt":{"type":"string","format":"date-time","description":"The date the bill was last updated"},"LineItems":{"$ref":"#/components/schemas/Bill.ListLineItems"},"ManagementCompanyAsPayee":{"type":"boolean","example":false,"description":"Indicates whether the management company is the payee for the bill"},"TotalAmount":{"type":"string","format":"decimal","description":"The total amount due for the bill. Ensure that the total amount is equal to the total of all line items summed.","example":"100.00"},"VendorId":{"type":"string","example":"1abcde23-c543-456e-abc9-123456789cba","description":"Unique identifier of the payee's vendor ID","format":"uuid"},"WorkOrderId":{"type":"string","example":"61c5cb28-547f-11ec-bfa5-02975b268737","description":"Unique identifier of the work order associated with the bill. Returns null if the bill is not associated with a work order.","format":"uuid"}}},"Bill.Create":{"title":"Bill","required":["DueDate","InvoiceDate","LineItems","PropertyId","TotalAmount"],"allOf":[{"$ref":"#/components/schemas/Bill"}]},"Bill.BulkCreate":{"title":"Bill","required":["DueDate","InvoiceDate","LineItems","PropertyId","ReferenceId","TotalAmount"],"allOf":[{"$ref":"#/components/schemas/Bill"}],"properties":{"AttachmentURL":{"type":"string","format":"uri","description":"The public link to the bill PDF that the developer hosts. This downloadable PDF creates the attachment and should not exceed 30MB. \u003cbr\u003e \u003cbr\u003e**Note**: Validation of the content type of this file is done in a background job. It is up to the developer to reconcile any validation failures at a later time."},"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual bills in the bulk-creation of bills."},"PaymentDate":{"type":"string","format":"date","description":"The date of the payment. Supplying this value with a `PaymentReference` will mark the bill as paid."},"PaymentReference":{"type":"string","description":"Unique reference number of the payment. Supplying this value with a `PaymentDate` will mark the bill as paid."},"PurchaseOrderId":{"type":"string","format":"uuid","description":"Unique identifier of the purchase order to link to the bill. The purchase order must be accessible to the caller, must not be canceled, and must not be pending approval. A null or omitted value is ignored — an existing link cannot be cleared through the API."}}},"Bill.BulkCreateAsync":{"title":"Bill","allOf":[{"$ref":"#/components/schemas/Bill.BulkCreate"}]},"Bill.LineItems":{"title":"LineItem","type":"array","description":"Array of line item attributes present on the bill(s)\n#### Bill Line Items\n| Attributes  | Type   | Description                                                                                                                 | Notes                                                   |\n|-------------|--------|-----------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|\n| Amount      | String | The amount due for the line item                                                                                            | Valid format is \"DD.CC\", e.g. \"23.33\"                   |\n| Description | String | A brief description of the line item                                                                                        |                                                         |\n| GlAccountId | String | The general ledger account ID relevant to the line item. Cannot be a Cash GL account or a parent GL account.                | UUID format e.g. \"d9009724-9f32-11ec-bc31-d46a96ab9b08\" |\n| PropertyId  | String | The `PropertyId` associated with the line item. This takes precedence over the top-level `PropertyId` connected to the bill. | UUID format e.g. \"d9009724-9f32-11ec-bc31-d46a96ab9b08\" |\n| ServiceFrom | String | The start date of the utility vendor's service                                                                              | Valid format is \"YYYY-MM-DD\"                            |\n| ServiceTo   | String | The end date of the utility vendor's service                                                                                | Valid format is \"YYYY-MM-DD\"                            |\n| UnitId      | String | The unit ID relevant to the line item                                                                                       | UUID format e.g. \"914a2a8e-f5d3-11e9-a485-1876da4c83b5\" |\n","items":{"properties":{"Amount":{"type":"string","format":"decimal","description":"The amount due for the line item"},"Description":{"type":"string","description":"A brief description of line item"},"GlAccountId":{"type":"string","format":"uuid","description":"The general ledger account ID relevant to line item. Cannot be a Cash GL account or a parent GL account."},"PropertyId":{"type":"string","format":"uuid","description":"The `PropertyId` associated with the line item. This takes precedence over the top-level `PropertyId` connected to the bill."},"ServiceFrom":{"type":"string","format":"date","description":"The start date of the utility vendor's service"},"ServiceTo":{"type":"string","format":"date","description":"The end date of the utility vendor's service"},"UnitId":{"type":"string","format":"uuid","description":"The unit ID relevant to the line item"}}}},"Bill.ListLineItems":{"title":"LineItem","type":"array","description":"Array of line item attributes present on the bill(s)\n#### Bill Line Items\n| Attributes  | Type   | Description                                             | Notes                                                      |\n|-------------|--------|---------------------------------------------------------|------------------------------------------------------------|\n| Id          | String | Unique identifier of the bill line item                 |                                                            |\n| Amount      | String | The amount due for the line item                        | Valid format is \"DD.CC\", e.g. \"23.33\"                      |\n| Description | String | A brief description of the line item                    |                                                            |\n| GlAccountId | String | The general ledger account ID relevant to the line item | UUID format e.g. \"d9009724-9f32-11ec-bc31-d46a96ab9b08\"    |\n| PropertyId  | String | The `PropertyId` associated with the line item          | UUID format e.g. \"d9009724-9f32-11ec-bc31-d46a96ab9b08\"    |\n| ServiceFrom | String | The start date of the utility vendor's service          | Valid format is \"YYYY-MM-DD\"                               |\n| ServiceTo   | String | The end date of the utility vendor's service            | Valid format is \"YYYY-MM-DD\"                               |\n| UnitId      | String | The unit ID relevant to the line item                   | UUID format e.g. \"914a2a8e-f5d3-11e9-a485-1876da4c83b5\"    |\n","items":{"properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the bill line item"},"Amount":{"type":"string","format":"decimal","description":"The amount due for the line item","example":"100.00"},"Description":{"type":"string","description":"A brief description of line item"},"GlAccountId":{"type":"string","format":"uuid","description":"The general ledger account ID relevant to line item"},"PropertyId":{"type":"string","format":"uuid","description":"The `PropertyId` associated with the line item"},"ServiceFrom":{"type":"string","format":"date","description":"The start date of the utility vendor's service"},"ServiceTo":{"type":"string","format":"date","description":"The end date of the utility vendor's service"},"UnitId":{"type":"string","format":"uuid","description":"The unit ID relevant to the line item"}}}},"Bill.UpdateLineItems":{"title":"LineItem","type":"array","description":"Array of line item attributes present on the bill(s). **DO NOT INCLUDE Line Items unless one or more details have changed** (including them causes other parts of system to assume changes and create new Auditing/version history entries)\n#### Bill Line Items\n| Attributes  | Type   | Description                                                                                                                 | Notes                                                   |\n|-------------|--------|-----------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------|\n| Amount      | String | The amount due for the line item                                                                                            | Valid format is \"DD.CC\", e.g. \"23.33\"                   |\n| Description | String | A brief description of the line item                                                                                        |                                                         |\n| GlAccountId | String | The general ledger account ID relevant to the line item. Cannot be a Cash GL account or a parent GL account.                | UUID format e.g. \"d9009724-9f32-11ec-bc31-d46a96ab9b08\" |\n| PropertyId  | String | The `PropertyId` associated with the line item. This takes precedence over the top-level `PropertyId` connected to the bill. | UUID format e.g. \"d9009724-9f32-11ec-bc31-d46a96ab9b08\" |\n| ServiceFrom | String | The start date of the utility vendor's service                                                                              | Valid format is \"YYYY-MM-DD\"                            |\n| ServiceTo   | String | The end date of the utility vendor's service                                                                                | Valid format is \"YYYY-MM-DD\"                            |\n| UnitId      | String | The unit ID relevant to the line item                                                                                       | UUID format e.g. \"914a2a8e-f5d3-11e9-a485-1876da4c83b5\" |\n","items":{"properties":{"Amount":{"type":"string","format":"decimal","description":"The amount due for the line item"},"Description":{"type":"string","description":"A brief description of line item"},"GlAccountId":{"type":"string","format":"uuid","description":"The general ledger account ID relevant to line item. Cannot be a Cash GL account or a parent GL account."},"PropertyId":{"type":"string","format":"uuid","description":"The `PropertyId` associated with the line item. This takes precedence over the top-level `PropertyId` connected to the bill."},"ServiceFrom":{"type":"string","format":"date","description":"The start date of the utility vendor's service"},"ServiceTo":{"type":"string","format":"date","description":"The end date of the utility vendor's service"},"UnitId":{"type":"string","format":"uuid","description":"The unit ID relevant to the line item"}}}},"PendingChargeBatch.BatchType":{"title":"BatchType","type":"string","enum":["initial","adjustment","final"],"description":"The type of pending charge batch\n#### Batch Type Options\n| Options    | Description                                              |\n|------------|----------------------------------------------------------|\n| initial    | Initial push of charge batch, tied to a single property  |\n| adjustment | Batch type noting adjustments to an initial charge batch |\n| final      | Batch type for final move-out charges                    |\n"},"PendingChargeBatch.Charges":{"title":"Charge","type":"array","required":["Amount","ChargeOn","GlAccountId","OccupancyId"],"description":"Array of charges. Pass in all the charges you want to keep.\nCharges passed in will replace the pre-existing charges.\n#### Charges Attributes\n| Attributes  | Required | Type                  | Description                                                          | Notes      |\n|-------------|----------|-----------------------|----------------------------------------------------------------------|--------------|\n| Amount      | required | String | The dollar amount of the charge. Must not be 0.                                     | Valid format is \"DD.CC\", e.g. \"20.25\"      |\n| ChargeOn    | required | String | The date of the charge                                                 | Valid format is \"YYYY-MM-DD\",\" e.g. \"2022-03-03\" |\n| Description | optional | String | A brief description of the charge                                                |             |\n| GlAccountId | required | String | The `GlAccountId` related to the charge. Must not be a corporate account or a parent general ledger account. Reference the **General Ledger Accounts** endpoint for any necessary associations. |  Valid format is UUID format, e.g.  `38a5a5bb-dc30-49a2-b175-1de0d1488c43` |\n| OccupancyId | required | String | The `OccupancyID` associated with the charge                                 |     Valid format is UUID format, e.g.  `36dc6a07-78e6-4a37-9c20-6ed68e998542`  |\n","items":{"type":"object","properties":{"Amount":{"type":"string","format":"decimal","description":"The dollar amount of the charge"},"ChargeOn":{"type":"string","format":"date","description":"The date of the charge"},"Description":{"type":"string","description":"A brief description of the charge"},"GlAccountId":{"type":"string","format":"uuid","description":"The `GlAccountId` related to the charge. Reference the **General Ledger Accounts** endpoint for any necessary associations."},"OccupancyId":{"type":"string","format":"uuid","description":"The `OccupancyID` associated with the charge"}}},"example":[{"Amount":"43.10","ChargeOn":"2022-05-01","Description":"sample description","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","OccupancyId":"91c5cb28-547f-11ec-bfa5-02975b268737"},{"Amount":"69.21","ChargeOn":"2022-05-01","Description":"sample description","GlAccountId":"d9009724-9f32-11ec-bc31-d46a96ab9b08","OccupancyId":"91c5cb28-547f-11ec-bfa5-02985b268737"}]},"PendingChargeBatch.Status":{"title":"Status","type":"string","enum":["pending","approved","rejected","failed"],"description":"Example: `filters[Status]=approved,rejected` \u003cbr\u003e The status(es) of the pending charge batch. Filter the results based on one or more statuses. Multiple values should be separated by commas.\n#### Status Options\n| Options    | Description                                                                                 |\n|------------|---------------------------------------------------------------------------------------------|\n| Pending    | The pending charge batch is created and waiting for review                                      |\n| Approved   | The pending charge batch is approved by the customer                                            |\n| Rejected   | The pending charge batch is rejected by the customer                                            |\n| Failed     | The pending charge batch unexpectedly failed to create charges on tenant ledger upon approval   |\n"},"PendingChargeBatch.Create":{"type":"object","title":"PendingChargeBatch","required":["BatchType","Charges","PropertyId"],"properties":{"BatchType":{"$ref":"#/components/schemas/PendingChargeBatch.BatchType"},"Charges":{"$ref":"#/components/schemas/PendingChargeBatch.Charges"},"PostMonth":{"type":"string","format":"date","example":"2021-09-01","description":"The month this batch of charges is from"},"PropertyId":{"type":"string","description":"Unique identifier of the property where the charged tenant resides","format":"uuid"}}},"Ledger.HomeownerReversalStatus":{"title":"ReversalStatus","oneOf":[{"type":"null"},{"type":"string"}],"enum":[null,"Reversed","NSF","ChargedBack"],"description":"Indicates the reversal status\n#### ReversalStatus Options\n| Options       | Description                                                          |\n|---------------|----------------------------------------------------------------------|\n| null          | The charge, credit, or payment was not reversed                 |\n| Reversed      | A reversing entry made to a charge, credit, or payment by the user which creates an equal and opposite transaction on the homeowner ledger that nets the original transaction to 0                  |\n| NSF           | A payment was accepted and recorded but ultimately rejected due to Non-Sufficient Funds                 |\n| ChargedBack   | A homeowner has disputed the payment due to fraud or abuse, and the funds were returned to the cardholder |\n"},"Ledger.TenantReversalStatus":{"title":"ReversalStatus","oneOf":[{"type":"null"},{"type":"string"}],"enum":[null,"Reversed","NSF","ChargedBack"],"description":"Indicates the reversal status\n#### ReversalStatus Options\n| Options       | Description                                                          |\n|---------------|----------------------------------------------------------------------|\n| null          | The charge, credit, or payment was not reversed                 |\n| Reversed      | A reversing entry made to a charge, credit, or payment by the user which creates an equal and opposite transaction on the tenant ledger that nets the original transaction to 0                   |\n| NSF           | A payment was accepted and recorded but ultimately rejected due to Non-Sufficient Funds                 |\n| ChargedBack   | A tenant has disputed the payment due to fraud or abuse, and the funds were returned to the cardholder |\n"},"Tenant.Status":{"title":"Status","type":"string","enum":["Current","Past","Future","Evict","Notice"],"description":"Example: `filters[Status]=Current,Past` \u003cbr\u003e The status of the tenant. Filter the results based on one or more statuses. Multiple values should be separated by commas.\n#### Status Options\n| Options | Description                                |\n|---------|--------------------------------------------|\n| Current | The tenant is a current resident                           |\n| Past    | The tenant is a past resident                          |\n| Future  | The tenant is a future resident                          |\n| Evict   | An eviction was filed against the occupancy       |\n| Notice  | The occupant has communicated intent to vacate |\n"},"Unit.LeasingType":{"title":"LeasingType","type":"string","enum":["ConventionalUnit","BedUnit"],"description":"Example: `filters[LeasingType]=ConventionalUnit` \u003cbr\u003e The type of lease for the unit. Filter the results based on a single value.\n#### Leasing Type Options\n| Options          | Description                                                                                                                                                                                                                                                                                                                                                                                                        |\n|------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| ConventionalUnit | A traditional residential unit                                                                                                                                                                                                                                                                                                                                                                                       |\n| BedUnit          | A student housing unit type (Name - BedName)\u003cbr\u003eHere's an example of how this works in practice:\u003cbr\u003eProperty ABC has one unit, with two beds. The unit is number 107. The beds are 1A and 2A, respectively. \u003cbr\u003eWhen you query for units, you'll see two results.\u003cbr\u003eName = 107 -1A, with a `UnitGroupId` of 1209840912.\u003cbr\u003eName = 107 - 2A, with a `UnitGroupId` of 1209840912.\u003cbr\u003e The `LeasingType` for both units will be `BedUnit`. |\n"},"WorkOrder.AssignedUsers":{"title":"AssignedUsers","type":"array","description":"User ID of the AppFolio Property Manager user assigned to the work order. Reference the **Users** endpoint for any necessary associations.\n#### Assigned User Attributes\n| Attributes | Type               | Description                                              |\n|------------|--------------------|----------------------------------------------------------|\n| Name       | String             | The name of the user the work order is assigned to       |\n| FirstName  | String             | The first Name of the user the work order is assigned to |\n| LastName   | String             | The last Name of the user the work order is assigned to  |\n| Id         | String\u0026lt;UUID\u0026gt; | The UUID of the user the work order is assigned to       |\n","items":{"type":"object","properties":{"Name":{"type":"string","description":"The name of the user the work order is assigned to"},"FirstName":{"type":"string","description":"The first name of the user the work order is assigned to"},"LastName":{"type":"string","description":"The last name of the user the work order is assigned to"},"Id":{"type":"string","format":"uuid","description":"UUID of the user the work order is assigned to"}}},"example":[{"Name":"John Doe","FirstName":"John","LastName":"Doe","Id":"1abcde23-c543-456e-abc9-123456789ccc"}]},"WorkOrder.Attachments":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WorkOrder.Attachment"}},"next_page_path":{"example":"/api/v0/work_orders/attachments?page[number]=2","description":"The URL path to the next page of responses"}}},"WorkOrder.Attachment":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the attachment"},"Name":{"type":"string","description":"The name given to describe the attachment"},"ContentType":{"type":"string","description":"The content type of the work order attachment. An example content type is a photo or a PDF.","example":"application/pdf"},"CreatedAt":{"type":"string","format":"date-time","description":"The date and time the work order attachment was created by an AppFolio Property Manager user"},"EntityId":{"type":"string","format":"uuid","description":"Unique identifier of the work order associated with the attachment"},"WorkOrderId":{"deprecated":true,"type":"string","format":"uuid","description":"Unique identifier of the work order associated with the attachment"},"FolderId":{"type":"string","format":"uuid","description":"Unique identifier of the folder the attachment is filed under, if any"},"URL":{"type":"string","description":"The link to download the file in the attachment"}}},"WorkOrder.BillableItems":{"title":"BillableItems","type":"array","description":"Array of billable line item attributes present on a work order\n#### Billable Item Attributes\n| Attributes | Type   | Description                                                                                   |\n|------------|--------|-----------------------------------------------------------------------------------------------|\n| Description| String | A brief informative message about the billable line item                                      |\n| GlAccountId| String | Unique identifier of the General Ledger account associated with the billable line item        |\n| Quantity   | String | The number of services or goods utilized. Must be a positive number                           |\n| Rate       | String | The rate, or cost, of the goods or services provided | Valid format is \"DD.CC\", e.g. \"23.33\"  |\n","items":{"type":"object","properties":{"Description":{"type":"string","description":"A brief informative message about the billable line item"},"GlAccountId":{"type":"string","description":"Unique identifier of the General Ledger account associated with the billable line item"},"Quantity":{"type":"string","format":"uuid","description":"The number of services or goods utilized. `Quantity` must be a positive number."},"Rate":{"type":"string","description":"The rate (cost) of the goods or services provided. Valid format is \"DD.CC\", e.g. \"23.33\""}}},"example":[{"Description":"Water Bill","GlAccountId":"2ea99c40-9f1f-11ec-82d9-06b8ab1c04a2","Quantity":"10.25","Rate":"20.78"}]},"WorkOrder.LaborItems":{"title":"LaborItems","type":"array","description":"Array of labor line item attributes present on a work order\n#### Labor Item Attributes\n| Attributes   | Type   | Description                                                                                               |\n|--------------|--------|-----------------------------------------------------------------------------------------------------------|\n| Date         | String | The date the labor was completed                                                                          |\n| Description  | String | A brief informative message about the labor performed                                                     |\n| HoursWorked  | String | The number of hours worked by the maintenance tech                                                        |\n| HoursBillable| String | The number of hours worked by the maintenance tech that are billable, used to create the work order bill  |\n| UserId       | String | Unique identifier of the maintenance tech assigned to the work order                                      |\n","items":{"type":"object","properties":{"Date":{"type":"string","format":"date","description":"The date the labor was completed. Valid format is \"YYYY-MM-DD\"  e.g. \"2020-12-01\"."},"Description":{"type":"string","description":"A brief informative message about the labor performed"},"HoursWorked":{"type":"string","format":"decimal","description":"The number of hours worked by the maintenance tech"},"HoursBillable":{"type":"string","format":"decimal","description":"The number of hours worked by the maintenance tech that are billable, used to create the work order bill"},"UserId":{"type":"string","format":"uuid","description":"Unique identifier of the maintenance tech assigned to the work order"}}},"example":[{"Date":"2022-12-01","Description":"Water Bill","HoursWorked":"10.25","HoursBillable":"10.00","UserId":"2ea99c40-9f1f-11ec-82d9-06b8ab1c04a2"}]},"WorkOrder.InventoryDetails.List":{"title":"InventoryDetails","type":"array","description":"Array of inventory line item attributes present on a work order\n#### Inventory Detail Attributes\n| Attributes  | Type   | Description                                                           |\n|-------------|--------|-----------------------------------------------------------------------|\n| InventoryId | String | Unique identifier of the inventory item                               |\n| GlAccountId | String | Unique identifier of the GL account associated with the inventory detail |\n| Quantity    | String | The quantity of the inventory item used                               |\n| Rate        | String | The rate, or cost, of the inventory item                              |\n","items":{"type":"object","properties":{"InventoryId":{"type":"string","format":"uuid","description":"Unique identifier of the inventory item"},"GlAccountId":{"type":"string","format":"uuid","description":"Unique identifier of the GL account associated with the inventory detail"},"Quantity":{"type":"string","format":"decimal","description":"The quantity of the inventory item used"},"Rate":{"type":"string","format":"decimal","description":"The rate (cost) of the inventory item"}}},"example":[{"InventoryId":"24a7d3dc-2fac-11f1-a065-8a8d281d1b31","GlAccountId":"32ea1590-5f3a-11ed-b2a0-12d2e919c17a","Quantity":"10.00","Rate":"20.78"}]},"WorkOrder.LaborItems.List":{"title":"LaborItems","type":"array","description":"Array of labor line item attributes present on a work order\n#### Labor Item Attributes\n| Attributes   | Type   | Description                                                                                               |\n|--------------|--------|-----------------------------------------------------------------------------------------------------------|\n| Date         | String | The date the labor was completed                                                                          |\n| Description  | String | A brief informative message about the labor performed                                                     |\n| StartTime    | String | The timestamp when the maintenance tech started the labor                                                 |\n| EndTime      | String | The timestamp when the maintenance tech ended the labor                                                   |\n| HoursWorked  | String | The number of hours worked by the maintenance tech                                                        |\n| HoursBillable| String | The number of hours worked by the maintenance tech that are billable, used to create the work order bill  |\n| UserId       | String | Unique identifier of the maintenance tech assigned to the work order                                      |\n","items":{"type":"object","properties":{"Date":{"type":"string","format":"date","description":"The date the labor was completed. Valid format is \"YYYY-MM-DD\"  e.g. \"2020-12-01\"."},"Description":{"type":"string","description":"A brief informative message about the labor performed"},"StartTime":{"type":"string","format":"date-time","description":"The timestamp when the maintenance tech started the labor. The value adheres to the ISO 8601 format \"YYYY-MM-DDThh:mm:ssZ\" and the default time zone is Coordinated Universal Time (UTC)."},"EndTime":{"type":"string","format":"date-time","description":"The timestamp when the maintenance tech ended the labor. The value adheres to the ISO 8601 format \"YYYY-MM-DDThh:mm:ssZ\" and the default time zone is Coordinated Universal Time (UTC)."},"HoursWorked":{"type":"string","format":"decimal","description":"The number of hours worked by the maintenance tech"},"HoursBillable":{"type":"string","format":"decimal","description":"The number of hours worked by the maintenance tech that are billable, used to create the work order bill"},"UserId":{"type":"string","format":"uuid","description":"Unique identifier of the maintenance tech assigned to the work order"}}},"example":[{"Date":"2022-12-01","Description":"Water Bill","StartTime":"2022-12-01T09:00:00Z","EndTime":"2022-12-01T19:15:00Z","HoursWorked":"10.25","HoursBillable":"10.00","UserId":"2ea99c40-9f1f-11ec-82d9-06b8ab1c04a2"}]},"WorkOrder.PropertyId":{"title":"PropertyId","properties":{"PropertyId":{"type":"string","description":"Unique identifier of the property associated with the work order","format":"uuid"}}},"WorkOrder.UnitId":{"title":"UnitId","properties":{"UnitId":{"type":"string","description":"Unique identifier of the unit associated with the work order"}}},"WorkOrder.OccupancyId":{"title":"OccupancyId","properties":{"OccupancyId":{"type":"string","description":"Unique identifier of the occupancy associated with the work order","format":"uuid"}}},"WorkOrder.InspectionId":{"title":"InspectionId","properties":{"InspectionId":{"type":"string","description":"Unique identifier of the inspection associated with the work order","format":"uuid"}}},"WorkOrder.Priority":{"title":"Priority","type":"string","enum":["Urgent","Normal","Low"],"description":"The priority of the work order\n#### Priority Options\n| Options | Description      |\n|---------|------------------|\n| Urgent  | Highest priority |\n| Normal  | Normal priority  |\n| Low     | Lowest priority  |\n"},"WorkOrder.Status":{"title":"Status","type":"string","deprecated":true,"enum":["Assigned","Canceled","Completed","Estimate Requested","Estimated","New","Ready to Bill","Scheduled","Waiting","Work Completed"],"description":"**Deprecated — use `WorkOrderStatus` instead.** `Status` collapses several AppFolio Property Manager statuses (for example, \"Completed No Need To Bill\" is reported as \"Completed\" and \"Work Done\" as \"Work Completed\"). `WorkOrderStatus` reports the full, unflattened set of statuses.\n\nExample: `filters[Status]=Assigned,Canceled` \u003cbr\u003e The status of the work order. Filter the results based on one or more statuses. Multiple values should be separated by commas. This filter is mutually exclusive with `WorkOrderStatus`; a request cannot filter by both.\n#### Status Options\n| Options            | Description                      |\n|--------------------|----------------------------------|\n| Assigned           | The work order has been assigned to an AppFolio Property Manager user |\n| Canceled           | The work order has been canceled |\n| Completed          | The maintenance request was closed out |\n| Estimate Requested | An estimate was requested from the vendor |\n| Estimated          | An estimate was received |\n| New                | A new maintenance request |\n| Ready to Bill      | The work order is ready to be billed |\n| Scheduled          | Work is scheduled |\n| Waiting            | The work order is pending |\n| Work Completed     | The work order is completed |\n"},"WorkOrder.WorkOrderStatus":{"title":"WorkOrderStatus","type":"string","enum":["Assigned","Assigned by AppFolio","Canceled","Completed","Completed No Need To Bill","Estimate Requested","Estimated","New","New by AppFolio","Ready to Bill","Scheduled","Waiting","Work Done"],"description":"Example: `filters[WorkOrderStatus]=Assigned,Canceled` \u003cbr\u003e The status of the work order, matching the statuses available in AppFolio Property Manager. When used as a filter, results are filtered based on one or more statuses; multiple values should be separated by commas. This filter is mutually exclusive with the deprecated `Status` filter; a request cannot filter by both.\n#### Status Options\n| Options                   | Description                      |\n|---------------------------|----------------------------------|\n| Assigned                  | The work order has been assigned to an AppFolio Property Manager user |\n| Assigned by AppFolio      | The work order was assigned by AppFolio Smart Maintenance agents or the system |\n| Canceled                  | The work order has been canceled |\n| Completed                 | The maintenance request was closed out |\n| Completed No Need To Bill | The work order was completed and does not need to be billed |\n| Estimate Requested        | An estimate was requested from the vendor |\n| Estimated                 | An estimate was received |\n| New                       | A new maintenance request |\n| New by AppFolio           | A new maintenance request created by AppFolio Smart Maintenance agents |\n| Ready to Bill             | The work order is ready to be billed |\n| Scheduled                 | Work is scheduled |\n| Waiting                   | The work order is pending |\n| Work Done                 | The work has been completed |\n"},"WorkOrder.StatusForWriter":{"title":"Status","type":"string","deprecated":true,"enum":["Assigned","Canceled","Completed","New","Scheduled","Waiting","Work Completed"],"description":"**Deprecated — use `WorkOrderStatus` instead.** `Status` accepts a collapsed subset of AppFolio Property Manager statuses; `WorkOrderStatus` accepts the full, unflattened writable set (for example, \"Completed No Need To Bill\", \"Work Done\", and \"Ready to Bill\"). This attribute is mutually exclusive with `WorkOrderStatus`; a request cannot set both.\n\nThe status of the work order. The `Status` is automatically updated to `Estimate Requested` or `Estimated` based on the `Estimates` associated with it.\nWhen one or more estimates exist on a work order, the work order status becomes `Estimate Requested`.\nOnce any estimate has an `Amount` provided, the work order status transitions to `Estimated`.\n#### Status Options\n| Options            | Description                      |\n|--------------------|----------------------------------|\n| Assigned           | The work order has been assigned to an AppFolio Property Manager user |\n| Canceled           | The work order has been canceled                |\n| Completed          | The maintenance request was closed out   |\n| New                | A new maintenance request          |\n| Scheduled          | The work order to be performed is scheduled                |\n| Waiting            | The work order is pending                         |\n| Work Completed     | The work order is completed                   |\n"},"WorkOrder.WorkOrderStatusForWriter":{"title":"WorkOrderStatus","type":"string","enum":["Assigned","Canceled","Completed","Completed No Need To Bill","New","Ready to Bill","Scheduled","Waiting","Work Done"],"description":"The status of the work order, matching the statuses available in AppFolio Property Manager. This attribute is mutually exclusive with the deprecated `Status` attribute; a request cannot set both. The read-only statuses `Estimate Requested` and `Estimated` (managed through the estimate flow) and `New by AppFolio` and `Assigned by AppFolio` (set by AppFolio Smart Maintenance agents or the system) cannot be set through the API. Some statuses require a companion attribute in the same request, shown in the \"Required with\" column below; omitting it returns a 422.\n#### Status Options\n| Options                   | Description                                                 | Required with                   |\n|---------------------------|-------------------------------------------------------------|---------------------------------|\n| Assigned                  | The work order has been assigned to an AppFolio Property Manager user | `AssignedUsers` or `VendorId` |\n| Canceled                  | The work order has been canceled                            | `CanceledOn`                    |\n| Completed                 | The maintenance request was closed out                      | `CompletedOn`                   |\n| Completed No Need To Bill | The work order was completed and does not need to be billed | `CompletedOn`                   |\n| New                       | A new maintenance request                                   | —                               |\n| Ready to Bill             | The work order is ready to be billed                        | —                               |\n| Scheduled                 | Work is scheduled                                           | `ScheduledStart`, `ScheduledEnd`|\n| Waiting                   | The work order is pending                                   | —                               |\n| Work Done                 | The work has been completed                                 | `WorkCompletedOn`               |\n"},"WorkOrder.ServiceRequestId":{"title":"ServiceRequestId","properties":{"ServiceRequestId":{"type":"string","description":"The `ServiceRequestId` can be provided to create and group a new work order under an existing service request (grouping of work orders). When a `ServiceRequestId` is provided, the following attributes must be excluded from the POST request (these attributes are inherited from the service request): `Description`, `InspectionId`, `OccupancyId`, `PermissionToEnter`, `Priority`, `PropertyId`, `UnitId`, and `UnitTurnCategory`.","format":"uuid"}}},"WorkOrder.Estimates":{"title":"Estimates","type":"array","description":"Use estimates to track anticipated costs for Work Orders. Estimates created via API are not automatically sent to Vendors or Owners, but are visible to assigned Vendors in the Vendor Portal.\n","items":{"type":"object","properties":{"VendorId":{"type":"string","format":"uuid","description":"The unique identifier of the vendor who submitted this estimate."},"ManagementCompanyAsVendor":{"type":"boolean","example":false,"description":"Indicates whether or not the management company is acting as the vendor for the estimate."},"Amount":{"type":"number","format":"decimal","example":"100.00","description":"The total estimated cost in dollars for completing the work order as quoted by the vendor."},"Status":{"$ref":"#/components/schemas/WorkOrder.Estimate.Status"},"InternalNotes":{"type":"string","description":"Internal notes or comments attached to the estimate. These notes are for internal use only and not visible to vendors or owners."},"EstimateRequestedDate":{"type":"string","format":"date","description":"The date the estimate was requested from the Vendor."},"EstimateReceivedDate":{"type":"string","format":"date","description":"The date the estimate was received from the Vendor."}}}},"WorkOrder.Estimate.Status":{"title":"Status","type":"string","enum":["Pending","Approved","Not Approved"],"description":"The current approval status of the estimate\n#### Status Options\n| Options      | Description                                          |\n|--------------|------------------------------------------------------|\n| Pending      | The estimate is awaiting review and approval         |\n| Approved     | The estimate has been approved and work may proceed  |\n| Not Approved | The estimate has been rejected                       |\n"},"WorkOrder.Estimates.Create":{"title":"Estimates","type":"array","required":["Status","EstimateRequestedDate"],"description":"Use estimates to track anticipated costs for Work Orders. Estimates created via API are not automatically sent to Vendors or Owners, but are visible to assigned Vendors in the Vendor Portal.\n","items":{"type":"object","properties":{"VendorId":{"type":"string","format":"uuid","description":"The unique identifier of the vendor who submitted this estimate. If provided, `ManagementCompanyAsVendor` must be `false` or omitted."},"ManagementCompanyAsVendor":{"type":"boolean","example":false,"description":"Indicates whether or not the management company is acting as the vendor for the estimate. If `true`, `VendorId` must be `null` or omitted."},"Amount":{"type":"number","format":"decimal","example":"100.00","description":"The total estimated cost in dollars for completing the work order as quoted by the vendor."},"Status":{"$ref":"#/components/schemas/WorkOrder.Estimate.Status.Write"},"InternalNotes":{"type":"string","description":"Internal notes or comments attached to the estimate. These notes are for internal use only and not visible to vendors or owners."},"EstimateRequestedDate":{"type":"string","format":"date","description":"The date the estimate was requested from the Vendor."},"EstimateReceivedDate":{"type":"string","format":"date","description":"The date the estimate was received from the Vendor. If `Amount` is provided but `EstimateReceivedDate` is not specified, it will automatically default to today's date. This ensures that all estimates with amounts have a received date for tracking purposes."}}}},"WorkOrder.Estimates.Update":{"title":"Estimates","type":"array","required":["Status","EstimateRequestedDate"],"description":"Use estimates to track anticipated costs for Work Orders. Estimates created via API are not automatically sent to Vendors or Owners, but are visible to assigned Vendors in the Vendor Portal.\n**DO NOT INCLUDE Estimates unless one or more estimates have changed**.\nPassing any number of estimates will replace all existing estimates for the work order. Passing an empty array `[]` will remove all existing estimates for the work order.\n","items":{"type":"object","properties":{"VendorId":{"type":"string","format":"uuid","description":"The unique identifier of the vendor who submitted this estimate. If provided, `ManagementCompanyAsVendor` must be `false` or omitted."},"ManagementCompanyAsVendor":{"type":"boolean","example":false,"description":"Indicates whether or not the management company is acting as the vendor for the estimate. If `true`, `VendorId` must be `null` or omitted."},"Amount":{"type":"number","format":"decimal","example":"100.00","description":"The total estimated cost in dollars for completing the work order as quoted by the vendor."},"Status":{"$ref":"#/components/schemas/WorkOrder.Estimate.Status.Write"},"InternalNotes":{"type":"string","description":"Internal notes or comments attached to the estimate. These notes are for internal use only and not visible to vendors or owners."},"EstimateRequestedDate":{"type":"string","format":"date","description":"The date the estimate was requested from the Vendor."},"EstimateReceivedDate":{"type":"string","format":"date","description":"The date the estimate was received from the Vendor. If `Amount` is provided but `EstimateReceivedDate` is not specified, it will automatically default to today's date. This ensures that all estimates with amounts have a received date for tracking purposes."}}}},"WorkOrder.Estimate.Status.Write":{"title":"Status","type":"string","enum":["Pending","Approved","Not Approved"],"description":"The current approval status of the estimate. Only one estimate can have `Approved` status at a time per work order\n#### Status Options\n| Options      | Description                                          |\n|--------------|------------------------------------------------------|\n| Pending      | The estimate is awaiting review and approval         |\n| Approved     | The estimate has been approved and work may proceed  |\n| Not Approved | The estimate has been rejected                       |\n"},"Attachment.BillId":{"title":"BillId","properties":{"BillId":{"type":"string","format":"uuid","description":"Bill to which the file is attached"}}},"Attachment.UnitId":{"title":"UnitId","properties":{"UnitId":{"type":"string","format":"uuid","description":"Unit to which the file is attached"}}},"Attachment.RentalApplicationId":{"title":"RentalApplicationId","properties":{"RentalApplicationId":{"type":"string","format":"uuid","description":"Rental Application to which the file is attached"}}},"Attachment.OccupancyId":{"title":"OccupancyId","properties":{"OccupancyId":{"type":"string","format":"uuid","description":"Occupancy to which the file is attached"}}},"Attachment.OwnerId":{"title":"OwnerId","properties":{"OwnerId":{"type":"string","format":"uuid","description":"Owner to which the file is attached"}}},"Attachment.ViolationId":{"title":"ViolationId","properties":{"ViolationId":{"type":"string","format":"uuid","description":"Violation to which the file is attached"}}},"Attachment.WorkOrderId":{"title":"WorkOrderId","properties":{"WorkOrderId":{"type":"string","format":"uuid","description":"Work Order to which the file is attached"}}},"UnitTypes":{"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/UnitType"}},"next_page_path":{"example":"/api/v0/unit_types?page[number]=2","description":"The URL path to the next page of responses"}}},"UnitType":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the unit type","format":"uuid"},"ApplicationFee":{"type":"number","description":"The application fee amount"},"Amenities":{"type":"array","description":"The amenities associated with the unit type. Amenity names are case-sensitive.","items":{"type":"string"}},"Bathrooms":{"type":"number","description":"The number of bathrooms for this unit type"},"Bedrooms":{"type":"integer","description":"The number of bedrooms for this unit type"},"CatsAllowed":{"type":"string","enum":["Yes","No"],"description":"The unit type’s cat policy. Valid values include “Yes”, “No” or `null`. A null value indicates that the unit type may not have specified a policy for cats.\n| Attribute | Type   | Description                                |\n|-----------|--------|--------------------------------------------|\n| Yes       | String | Cats are permitted on the unit type         |\n| No        | String | Cats are not permitted on the unit type      |\n| null      | String | No cat policy has been set for the unit type  |\n"},"Deposit":{"type":"number","description":"The security deposit amount"},"DogsAllowed":{"type":"string","enum":["Large \u0026 Small","Small Only","No"],"description":"| Attribute     | Type   | Description                                    |\n|---------------|--------|------------------------------------------------|\n| Large \u0026 Small | String | Large and small dogs are permitted on unit type  |\n| Small Only    | String | Only small dogs are permitted on the unit type   |\n| No            | String | No dogs are permitted on the unit type           |\n| null          | String | No dog policy has been set for the unit type     |\n"},"FutureMarketRent":{"type":"number","description":"The projected future market rent for the unit type"},"FutureMarketRentEffectiveOn":{"type":"string","description":"The date when the future market rent becomes effective","format":"date-time"},"MarketRent":{"type":"number","description":"The current market rent for the unit type"},"MarketingTitle":{"type":"string","description":"The title of the listing for syndication"},"MarketingDescription":{"type":"string","description":"A description of the listing for syndication"},"Name":{"type":"string","description":"The name of the unit type"},"SquareFeet":{"type":"number","description":"The size of the unit type in square feet"},"UseUnitTypePhotos":{"type":"boolean","description":"Whether photos on the unit type are used on the units assigned to it. When `false`, a unit uses its own photos. When `true`, a unit inherits the unit type photos instead of its own; those photos are returned for the unit by the List All Units Photos endpoint and used in marketing syndication."},"YouTubeURL":{"type":"string","format":"uri","description":"The URL of the YouTube video for the listing(s)"},"PropertyId":{"type":"string","format":"uuid","description":"Unique identifier of the property associated with the unit type"},"LastUpdatedAt":{"type":"string","format":"date-time","description":"The date the unit type was last updated"}}},"UnitType.BulkCreate":{"title":"Unit Type","required":["Name","ReferenceId","PropertyId"],"allOf":[{"$ref":"#/components/schemas/BulkCreateUnitType"}]},"BulkCreateUnitType":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual unit types in the bulk-creation of unit types."},"ApplicationFee":{"type":"number","description":"The fee charged when applying for a unit of this type. If the property associated with the unit type is payments enabled (if the property's bank account is payment enabled), then the `ApplicationFee` must be $0.00 or between $6.00 and $200.00"},"Amenities":{"type":"array","description":"The amenities associated with the unit type. Amenity names are case-sensitive.","items":{"type":"string"}},"Bathrooms":{"type":"number","description":"The number of bathrooms for this unit type"},"Bedrooms":{"type":"integer","description":"The number of bedrooms for this unit type"},"CatsAllowed":{"type":"string","enum":["Yes","No"],"description":"The unit type’s cat policy. Valid values include “Yes”, “No” or `null`. A null value indicates that the unit type may not have specified a policy for cats.\n| Attribute | Type   | Description                                |\n|-----------|--------|--------------------------------------------|\n| Yes       | String | Cats are permitted on the unit type         |\n| No        | String | Cats are not permitted on the unit type      |\n| null      | String | No cat policy has been set for the unit type  |\n"},"Deposit":{"type":"number","description":"The security deposit amount"},"DogsAllowed":{"type":"string","enum":["Large \u0026 Small","Small Only","No"],"description":"| Attribute     | Type   | Description                                    |\n|---------------|--------|------------------------------------------------|\n| Large \u0026 Small | String | Large and small dogs are permitted on unit type  |\n| Small Only    | String | Only small dogs are permitted on the unit type   |\n| No            | String | No dogs are permitted on the unit type           |\n| null          | String | No dog policy has been set for the unit type     |\n"},"FutureMarketRent":{"type":"number","description":"The projected future market rent for the unit type. This attribute must be provided together with `FutureMarketRentEffectiveOn` date. Both attributes must either be present or absent together."},"FutureMarketRentEffectiveOn":{"type":"string","description":"The date when the `FutureMarketRent` will take effect. This attribute must be provided together with `FutureMarketRent`. Both attributes must either be present or absent together","format":"date-time"},"MarketRent":{"type":"number","format":"decimal","description":"The current market rent for the unit type"},"MarketingTitle":{"type":"string","description":"The title of the listing for syndication"},"MarketingDescription":{"type":"string","description":"A description of the listing for syndication"},"Name":{"type":"string","description":"The name of the unit type. This value must be unique per `PropertyId`, meaning different unit types can use the same `Name` only when their `PropertyId`s are different."},"SquareFeet":{"type":"number","description":"The size of the unit type in square feet"},"UseUnitTypePhotos":{"type":"boolean","description":"Whether photos on the unit type are used on the units assigned to it. When `false`, a unit uses its own photos. When `true`, a unit inherits the unit type photos instead of its own; those photos are returned for the unit by the List All Units Photos endpoint and used in marketing syndication. Omitting this attribute or passing `null` sets it to `false`."},"YouTubeURL":{"type":"string","format":"uri","description":"The URL of the YouTube video for the listing(s)"},"PropertyId":{"type":"string","description":"Unique identifier of the property associated with the unit type","format":"uuid"}}},"UnitType.Update":{"type":"object","properties":{"ApplicationFee":{"type":"number","description":"The fee charged when applying for a unit of this type. If the property associated with the unit type is payments enabled (if the property's bank account is payment enabled), then the `ApplicationFee` must be $0.00 or between $6 and $200."},"Amenities":{"type":"array","description":"The amenities associated with the unit type. Amenity names are case-sensitive. Providing an array of valid strings will overwrite all existing amenities. Passing in an empty array `[]` or an array of empty strings `[\"\"]` or `[\"\", \"\"]` will clear all existing amenities. Passing in an array of a valid string and an empty string `[\"amenity_name\", \"\"]` will result in `Amenities: [\"amenity_name\"]`. Passing in `null` will result in no change.","items":{"type":"string"}},"Bathrooms":{"type":"number","description":"The number of bathrooms for this unit type"},"Bedrooms":{"type":"integer","description":"The number of bedrooms for this unit type"},"CatsAllowed":{"type":"string","enum":["Yes","No"],"description":"The unit type’s cat policy. Valid values include “Yes”, “No” or `null`. A null value indicates that the unit type may not have specified a policy for cats.\n| Attribute | Type   | Description                                |\n|-----------|--------|--------------------------------------------|\n| Yes       | String | Cats are permitted on the unit type         |\n| No        | String | Cats are not permitted on the unit type      |\n| null      | String | No cat policy has been set for the unit type  |\n"},"Deposit":{"type":"number","description":"The security deposit amount"},"DogsAllowed":{"type":"string","enum":["Large \u0026 Small","Small Only","No"],"description":"| Attribute     | Type   | Description                                    |\n|---------------|--------|------------------------------------------------|\n| Large \u0026 Small | String | Large and small dogs are permitted on unit type  |\n| Small Only    | String | Only small dogs are permitted on the unit type   |\n| No            | String | No dogs are permitted on the unit type           |\n| null          | String | No dog policy has been set for the unit type     |\n"},"FutureMarketRent":{"type":"number","description":"The projected future market rent for the unit type. This attribute must be provided together with `FutureMarketRentEffectiveOn` date. Both attributes must either be present or absent together"},"FutureMarketRentEffectiveOn":{"type":"string","description":"The date when the `FutureMarketRent` will take effect. This attribute must be provided together with `FutureMarketRent`. Both attributes must either be present or absent together","format":"date-time"},"MarketRent":{"type":"number","format":"decimal","description":"The current market rent for the unit type"},"MarketingTitle":{"type":"string","description":"The title of the listing for syndication"},"MarketingDescription":{"type":"string","description":"A description of the listing for syndication"},"Name":{"type":"string","description":"The name of the unit type. This value must be unique per `PropertyId`, meaning different unit types can use the same `Name` only when their `PropertyId`s are different."},"SquareFeet":{"type":"number","description":"The size of the unit type in square feet"},"UseUnitTypePhotos":{"type":"boolean","description":"Whether photos on the unit type are used on the units assigned to it. When `false`, a unit uses its own photos. When `true`, a unit inherits the unit type photos instead of its own; those photos are returned for the unit by the List All Units Photos endpoint and used in marketing syndication. Passing `null` leaves the current value unchanged; pass `true` to turn it on or `false` to turn it off."},"YouTubeURL":{"type":"string","format":"uri","description":"The URL of the YouTube video for the listing(s)"}}},"Job":{"type":"object","properties":{"Id":{"type":"string","description":"Unique identifier of the asynchronous bulk job. This is the `JobId` returned by the bulk endpoint that created it, and is the only way to retrieve the job — pass it as `filters[Id]` and store it when you submit the bulk request.","format":"uuid"},"Status":{"type":"string","description":"Indicates the current status of the asynchronous job. `finished` and `failed` are the only terminal statuses.\n#### Status Options\n| Options       | Description                                                          | Notes |\n|---------------|----------------------------------------------------------------------|-------|\n| new           | The job was created, but processing has not started                  |       |\n| pending       | The job is queued and waiting for an available worker                |       |\n| running       | The job is actively being processed                                  |       |\n| finished      | The job ran to completion. This does **not** mean every record succeeded — check `successful` on each entry in `Result` | Terminal |\n| failed        | The job stopped on an unrecoverable error before it could record its results | Terminal. See `ErrorMessage` |\n\nWhen `Status` is `failed`, `Result` is empty, so per-record outcomes are not available. Some records may already have been written, because records are processed individually rather than as a single all-or-nothing batch. Query the corresponding resource to determine what was written before resubmitting, otherwise you may create duplicates.\n"},"Result":{"type":"array","description":"The per-record outcome of the bulk operation. `Result` is an empty array while the job is queued or processing, and also when `Status` is `failed`. When `Status` is `finished`, it contains one entry per record processed.\n\nMatch each entry back to the record you submitted using `ReferenceId` for bulk create operations, or `ResourceId` for bulk update operations. Do not match entries by array position, and do not assume the number of entries equals the number of records you submitted — neither is guaranteed.\n#### Result Attributes\n| Attributes   | Type    | Description                                                                                               |\n|--------------|---------|-----------------------------------------------------------------------------------------------------------|\n| ReferenceId  | String  | The identifier you supplied for this record in the original bulk create request. Not returned by every bulk update endpoint |\n| ResourceId   | String  | Unique identifier of the record created or updated. `null` when the record failed |\n| successful   | Boolean | Indicates whether this individual record was processed successfully |\n| errors       | Array   | Plain-text reasons this record failed. Always present, and empty when `successful` is `true`. These are strings, not objects — unlike the `errors` returned in a `422` response from the bulk endpoint itself |\n","items":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"The identifier you supplied for this record in the original bulk create request. Not returned by every bulk update endpoint."},"ResourceId":{"type":"string","format":"uuid","nullable":true,"description":"Unique identifier of the record created or updated. `null` when the record failed."},"successful":{"type":"boolean","description":"Indicates whether this individual record was processed successfully."},"errors":{"type":"array","description":"Plain-text reasons this record failed. Always present, and empty when `successful` is `true`.","items":{"type":"string"}}}},"example":[{"ReferenceId":"my-reference-1","ResourceId":"c4a1f2b9-8e7d-11ee-9f3a-0242ac120002","successful":true,"errors":[]},{"ReferenceId":"my-reference-2","ResourceId":null,"successful":false,"errors":["Requested parameter (OccupancyId) not found."]}]},"ErrorMessage":{"type":"string","description":"Contains a message indicating the job encountered an unrecoverable error. Only present when `Status` is `failed`","example":"Job failed to complete"}}},"Jobs":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Job"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/jobs?page[number]=2"}}},"Folder":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier (UUID) of the folder.","example":"3b5344d0-482b-4b50-b30f-2dd67412b517"},"FolderName":{"type":"string","description":"The name of the folder.","example":"Lease Documents"},"EntityId":{"type":"string","description":"Unique identifier (UUID) of the entity the folder belongs to.","format":"uuid"},"EntityType":{"type":"string","description":"The type of entity the folder belongs to.","enum":["Property","Unit","Vendor","Owner","Occupancy"],"example":"Property"},"LastUpdatedAt":{"type":"string","format":"date-time","description":"The date and time the folder was last updated.","example":"2021-09-27T11:33:35Z"}}},"Folders":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Folder"}},"next_page_path":{"description":"The URL path to the next page of responses","example":"/api/v0/folders?page[number]=2"}}},"Folder.BulkCreate":{"title":"Folder","required":["ReferenceId","FolderName","EntityType","EntityId"],"allOf":[{"$ref":"#/components/schemas/BulkCreateFolder"}]},"BulkCreateFolder":{"type":"object","properties":{"ReferenceId":{"type":"string","description":"Transient unique ID assigned by the developer. Used to reference individual folders in the bulk-creation process."},"FolderName":{"type":"string","description":"The name of the folder.","example":"Lease Documents"},"EntityType":{"type":"string","description":"The type of entity the folder belongs to.","enum":["Property","Unit","Vendor","Owner","Occupancy"],"example":"Property"},"EntityId":{"type":"string","description":"Unique identifier (UUID) of the entity the folder belongs to.","format":"uuid","example":"71c5cb28-547f-11ec-bfa5-02975b268737"}}},"Lease":{"type":"object","properties":{"Id":{"type":"string","description":"Id of lease","format":"uuid"},"IsMtm":{"type":"boolean","description":"Indicates if the lease is month-to-month","example":true},"StartOn":{"type":"string","description":"Indicates the start date of the lease","example":"2025-11-01"},"EndOn":{"type":"string","description":"Indicates the end date of the lease","example":"2025-11-01"},"RenewedOn":{"type":"string","description":"Indicates the date the lease was renewed","example":"2025-11-01"},"LastUpdatedAt":{"type":"string","format":"date-time","description":"Indicates the date the lease was last updated"},"Status":{"type":"string","description":"Indicates the status of the lease","example":"Out for Signing"},"OccupancyId":{"type":"string","description":"Id of associated occupancy","format":"uuid"}}},"RenewalPricing":{"type":"object","properties":{"Id":{"type":"string","format":"uuid","description":"Unique identifier of the renewal pricing option"},"LeaseId":{"type":"string","format":"uuid","description":"Unique identifier of the lease associated with this renewal pricing option."},"StartDate":{"type":"string","format":"date","description":"The start date of the renewal pricing option. The format is `YYYY-MM-DD`."},"Price":{"type":"integer","description":"The monthly rent price for this renewal pricing option"},"LeaseTerm":{"type":"integer","description":"The lease term in months for this renewal pricing option"}}}}}}