{
  "openapi": "3.0.3",
  "info": {
    "title": "ZipForm Partner API",
    "description": "The zipForm\u00ae REST web service is made available on a licensed basis to third-party application partners. It exposes zipForm\u00ae transaction data, PDF forms, and certain zipForm\u00ae application functionality for integration into partner applications.\n\n**Base URLs:**\n- Production: `https://ws.zipformplus.com/api`\n- Staging/QA: `https://api.pre.zipformplus.com/api`\n\n## Authentication\n\nAll requests (except authentication endpoints) must include a **Shared Key** and either a **Context Id** or **External Id**, passed via request headers or query string.\n\n### Via Request Headers (Context Id)\n```\nX-Auth-ContextId: <Context Id>\nX-Auth-SharedKey: <Client Shared Key>\n```\n\n### Via Query String (Context Id)\n```\n<URL>?ContextId=<Context Id>&SharedKey=<Client Shared Key>\n```\n\n### Via Request Headers (External Id)\n```\nX-Auth-ExternalId: <Client External Id>\nX-Auth-SharedKey: <Client Shared Key>\n```\n\n### Via Query String (External Id)\n```\n<URL>?ExternalId=<External Id>&SharedKey=<Client shared key>\n```\n\n## Response Codes\n\n| Code | Description |\n|---|---|\n| 200 | OK |\n| 201 | Created |\n| 204 | No Content \u2014 success but resource has no content |\n| 304 | Not Modified |\n| 400 | Bad Request |\n| 401 | Unauthorized |\n| 403 | Forbidden / Blank PDF Not Allowed |\n| 404 | Not Found |\n| 409 | Account Linking Failed |\n| 415 | Unsupported Media Type |\n| 500 | Internal Server Error |\n| 503 | Service Unavailable |\n\n## Terminology\n\n| Term | Definition |\n|---|---|\n| Shared Key | A unique identifier granted to the partner that authenticates its Foreign Application |\n| Context Id | A session identifier returned after authentication, uniquely identifying the current interaction |\n| External Id | A partner-supplied identifier that uniquely identifies a user in the partner's application |\n| Foreign Application (FA) | An external application that consumes the zipForm\u00ae web service |\n| MD5 | Message-digest algorithm used for data encryption |\n\n## Pagination and Sorting\n\nSupported on collection endpoints (Get Transaction List, Get Document List, Get Library Documents, Get Agent Libraries):\n\n```\n<URL>?page=<page number>&pagesize=<page size>&orderby=<sort field>&sortorder=<sort order>\n```\n\n| Collection | Sort Fields |\n|---|---|\n| Transactions | `name`, `created` |\n| Forms/Documents | `name`, `ContentType` |\n| Libraries | `name`, `state` |\n\n`sortorder`: `asc` or `desc`\n\n## Universal Global Fields\n\nBelow is a list of the fields related to a transaction that can be updated through the API for the ZipForms System.\n\n### 1. Property Listing Address\n- `REData_REProperties_ResidentialProperty_Listing_StreetAddress_CompositeAddress`\n- `REData_REProperties_ResidentialProperty_Listing_StreetAddress_City`\n- `REData_REProperties_ResidentialProperty_Listing_StreetAddress_StateOrProvince`\n- `REData_REProperties_ResidentialProperty_Listing_StreetAddress_PostalCode`\n\n### 2. Listing Agent Information\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_REAgent_FullName`\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_REAgent_AgentID`\n\n#### Contact Information\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_REAgent_ContactInformation_OfficePhone`\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_REAgent_ContactInformation_CellPhone`\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_REAgent_ContactInformation_Pager`\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_REAgent_ContactInformation_Email`\n\n### 3. Listing Office Information\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_REOffice_Name`\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_REOffice_OfficeID`\n\n#### Contact Information\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_REOffice_ContactInformation_OfficePhone`\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_REOffice_ContactInformation_Fax`\n\n#### Address\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_REOffice_StreetAddress_CompositeAddress`\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_REOffice_StreetAddress_City`\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_REOffice_StreetAddress_StateOrProvince`\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_REOffice_StreetAddress_PostalCode`\n\n### 4. Listing Details\n- `REData_REProperties_ResidentialProperty_Listing_ListingID`\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_ListDate`\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_ListPrice`\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_ExpirationDate`\n- `REData_REProperties_ResidentialProperty_Listing_ListingData_Remarks`\n\n### 5. Geographic Information\n- `REData_REProperties_ResidentialProperty_Listing_GeographicData_County`\n\n### 6. Sales Agent Information\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_REAgent_FullName`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_REAgent_AgentID`\n\n#### Contact Information\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_REAgent_ContactInformation_OfficePhone`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_REAgent_ContactInformation_CellPhone`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_REAgent_ContactInformation_Pager`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_REAgent_ContactInformation_Email`\n\n### 7. Sales Office Information\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_REOffice_Name`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_REOffice_OfficeID`\n\n#### Contact Information\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_REOffice_ContactInformation_OfficePhone`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_REOffice_ContactInformation_Fax`\n\n#### Address\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_REOffice_StreetAddress_CompositeAddress`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_REOffice_StreetAddress_City`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_REOffice_StreetAddress_StateOrProvince`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_REOffice_StreetAddress_PostalCode`\n\n### 8. Sales Information\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_ContractDate`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_ClosePrice`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_CloseDate`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_AmountFinanced`\n\n### 9. School Information\n- `REData_REProperties_ResidentialProperty_Listing_SchoolData_SchoolDistrict`\n\n### 10. Tax Information\n- `REData_REProperties_ResidentialProperty_Listing_TaxData_TaxID`\n- `REData_REProperties_ResidentialProperty_Listing_TaxData_County`\n- `REData_REProperties_ResidentialProperty_Listing_TaxData_LegalDescription`\n- `REData_REProperties_ResidentialProperty_Listing_ParcelNumber`\n\n### 11. Property Characteristics\n- `REData_REProperties_ResidentialProperty_Subdivision`\n- `REData_REProperties_ResidentialProperty_AssociationFee`\n- `REData_REProperties_ResidentialProperty_YearBuilt`\n\n---\n\n## Parties\n\n### 12. Seller 1\n\n#### Identity\n- `Other_Seller1_FirstName`\n- `Other_Seller1_MiddleName`\n- `Other_Seller1_LastName`\n- `Other_Seller1_FullName`\n- `Other_Seller1_Relationship`\n\n#### Address\n- `Other_Seller1_StreetAddress_CompositeAddress`\n- `Other_Seller1_StreetAddress_City`\n- `Other_Seller1_StreetAddress_StateOrProvince`\n- `Other_Seller1_StreetAddress_PostalCode`\n\n#### Contact Information\n- `Other_Seller1_ContactInformation_OfficePhone`\n- `Other_Seller1_ContactInformation_CellPhone`\n- `Other_Seller1_ContactInformation_HomePhone`\n- `Other_Seller1_ContactInformation_Fax`\n- `Other_Seller1_ContactInformation_Email`\n\n### 13. Seller 2\nSame structure as Seller 1 \u2014 prefix `Other_Seller2_`\n\n### 14. Buyer 1\n\n#### Identity\n- `Other_Buyer1_FirstName`\n- `Other_Buyer1_MiddleName`\n- `Other_Buyer1_LastName`\n- `Other_Buyer1_FullName`\n- `Other_Buyer1_Relationship`\n\n#### Address\n- `Other_Buyer1_StreetAddress_CompositeAddress`\n- `Other_Buyer1_StreetAddress_City`\n- `Other_Buyer1_StreetAddress_StateOrProvince`\n- `Other_Buyer1_StreetAddress_PostalCode`\n\n#### Contact Information\n- `Other_Buyer1_ContactInformation_OfficePhone`\n- `Other_Buyer1_ContactInformation_CellPhone`\n- `Other_Buyer1_ContactInformation_HomePhone`\n- `Other_Buyer1_ContactInformation_Fax`\n- `Other_Buyer1_ContactInformation_Email`\n\n### 15. Buyer 2\nSame structure as Buyer 1 \u2014 prefix `Other_Buyer2_`\n\n---\n\n## Additional Parties\n\n### 16. Seller Attorney\n- `Other_AdditionalInfo_Attorneys_Sellers_Name`\n- `Other_AdditionalInfo_Attorneys_Sellers_ContactName`\n- `Other_AdditionalInfo_Attorneys_Sellers_StreetAddress_CompositeAddress`\n- `Other_AdditionalInfo_Attorneys_Sellers_StreetAddress_City`\n- `Other_AdditionalInfo_Attorneys_Sellers_StreetAddress_StateOrProvince`\n- `Other_AdditionalInfo_Attorneys_Sellers_StreetAddress_PostalCode`\n- `Other_AdditionalInfo_Attorneys_Sellers_ContactInformation_OfficePhone`\n- `Other_AdditionalInfo_Attorneys_Sellers_ContactInformation_Fax`\n- `Other_AdditionalInfo_Attorneys_Sellers_ContactInformation_Email`\n\n### 17. Buyer Attorney\nSame structure as Seller Attorney \u2014 prefix `Other_AdditionalInfo_Attorneys_Buyers_`\n\n### 18. Appraiser\n- `Other_AdditionalInfo_Appraiser_Name`\n- `Other_AdditionalInfo_Appraiser_ContactName`\n- `Other_AdditionalInfo_Appraiser_StreetAddress_CompositeAddress`\n- `Other_AdditionalInfo_Appraiser_StreetAddress_City`\n- `Other_AdditionalInfo_Appraiser_StreetAddress_StateOrProvince`\n- `Other_AdditionalInfo_Appraiser_StreetAddress_PostalCode`\n- `Other_AdditionalInfo_Appraiser_ContactInformation_OfficePhone`\n- `Other_AdditionalInfo_Appraiser_ContactInformation_CellPhone`\n- `Other_AdditionalInfo_Appraiser_ContactInformation_Fax`\n- `Other_AdditionalInfo_Appraiser_ContactInformation_Pager`\n- `Other_AdditionalInfo_Appraiser_ContactInformation_Email`\n\n### 19. Escrow\n- `Other_AdditionalInfo_Escrow_Name`\n- `Other_AdditionalInfo_Escrow_ContactName`\n- `Other_AdditionalInfo_Escrow_StreetAddress_CompositeAddress`\n- `Other_AdditionalInfo_Escrow_StreetAddress_City`\n- `Other_AdditionalInfo_Escrow_StreetAddress_StateOrProvince`\n- `Other_AdditionalInfo_Escrow_StreetAddress_PostalCode`\n- `Other_AdditionalInfo_Escrow_ContactInformation_OfficePhone`\n- `Other_AdditionalInfo_Escrow_ContactInformation_Fax`\n- `Other_AdditionalInfo_Escrow_ContactInformation_Email`\n- `Other_AdditionalInfo_Escrow_CaseNumber`\n\n### 20. Lender\n- `Other_AdditionalInfo_Lender_Name`\n- `Other_AdditionalInfo_Lender_ContactName`\n- `Other_AdditionalInfo_Lender_StreetAddress_CompositeAddress`\n- `Other_AdditionalInfo_Lender_StreetAddress_City`\n- `Other_AdditionalInfo_Lender_StreetAddress_StateOrProvince`\n- `Other_AdditionalInfo_Lender_StreetAddress_PostalCode`\n- `Other_AdditionalInfo_Lender_ContactInformation_OfficePhone`\n- `Other_AdditionalInfo_Lender_ContactInformation_CellPhone`\n- `Other_AdditionalInfo_Lender_ContactInformation_Fax`\n- `Other_AdditionalInfo_Lender_ContactInformation_Pager`\n- `Other_AdditionalInfo_Lender_ContactInformation_Email`\n- `Other_AdditionalInfo_Lender_LoanNumber`\n\n### 21. Title Company\n- `Other_AdditionalInfo_TitleInformation_Name`\n- `Other_AdditionalInfo_TitleInformation_ContactName`\n- `Other_AdditionalInfo_TitleInformation_StreetAddress_CompositeAddress`\n- `Other_AdditionalInfo_TitleInformation_StreetAddress_City`\n- `Other_AdditionalInfo_TitleInformation_StreetAddress_StateOrProvince`\n- `Other_AdditionalInfo_TitleInformation_StreetAddress_PostalCode`\n- `Other_AdditionalInfo_TitleInformation_ContactInformation_OfficePhone`\n- `Other_AdditionalInfo_TitleInformation_ContactInformation_CellPhone`\n- `Other_AdditionalInfo_TitleInformation_ContactInformation_Fax`\n- `Other_AdditionalInfo_TitleInformation_ContactInformation_Email`\n\n---\n\n## Additional Listing and Sales Data\n\n### 22. Listing Condition Information\n- `Other_AdditionalInfo_AdditionalListingData_ConditionInfo_Includes`\n- `Other_AdditionalInfo_AdditionalListingData_ConditionInfo_Excludes`\n\n### 23. Listing Encumbrances\n- `Other_AdditionalInfo_AdditionalListingData_Encumberances_MortgageBalance1`\n- `Other_AdditionalInfo_AdditionalListingData_Encumberances_MortgageBalance2`\n- `Other_AdditionalInfo_AdditionalListingData_Encumberances_TotalEncumbrances`\n- `Other_AdditionalInfo_AdditionalListingData_Encumberances_OtherLien`\n- `Other_AdditionalInfo_AdditionalListingData_Encumberances_OtherLienDescription`\n\n### 24. Offer & Deposit Information\n- `Other_AdditionalInfo_AdditionalSalesData_OfferDate`\n- `Other_AdditionalInfo_AdditionalSalesData_OfferAcceptDate`\n- `Other_AdditionalInfo_AdditionalSalesData_DepositAmount`\n\n### Tax Parcel Metadata\n- `Other_AdditionalInfo_AdditionalTaxData_LotNumber`\n- `Other_AdditionalInfo_AdditionalTaxData_UnitNumber`\n- `Other_AdditionalInfo_AdditionalTaxData_Township`\n- `Other_AdditionalInfo_AdditionalTaxData_BlockNumber`\n- `Other_AdditionalInfo_AdditionalTaxData_PlatBookNumber`\n- `Other_AdditionalInfo_AdditionalTaxData_PlatPageNumber`\n\n### Property Type Flags\n- `Other_AdditionalInfo_AdditionalFields_CS_PropertyType_Residential`\n- `Other_AdditionalInfo_AdditionalFields_CS_PropertyType_Multi`\n- `Other_AdditionalInfo_AdditionalFields_CS_PropertyType_Vacant`\n- `Other_AdditionalInfo_AdditionalFields_CS_PropertyType_Commercial`\n- `Other_AdditionalInfo_AdditionalFields_CS_PropertyType_OtherPT`\n- `Other_AdditionalInfo_AdditionalFields_CS_PropertyType_OtherPTDescription`\n\n### ZipForms Metadata\n- `Other_ZFMetadata_ZFFilename`\n- `Other_ZFMetadata_ZFBrokerName`\n- `Other_ZFMetadata_ZFUserName_Name`\n- `Other_ZFMetadata_ZFUserName_OfficePhone`\n- `Other_ZFMetadata_ZFUserName_Fax`\n- `Other_ZFMetadata_ZFUserName_CompositeAddress`\n\n---\n\n## Commission Data\n\n### Listing Side\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_ListingCommissionPercent`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_ListingCommissionAmount`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_AdminTransactionFee`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_OtherDeductions`\n\n#### Agent Splits\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_AgentOneSplitPercent`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_AgentOneSplitAmount`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_AgentOneSplitName`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_AgentTwoSplitPercent`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_AgentTwoSplitAmount`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_AgentTwoSplitName`\n\n#### Net Values\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_AgentOneNet`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_AgentTwoNet`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_OfficeCommissionNet`\n\n### Buy Side\n- `REData_REProperties_ResidentialProperty_BuySideData_BuyerCommissionPercent`\n- `REData_REProperties_ResidentialProperty_BuySideData_BuyerCommissionAmount`\n- `REData_REProperties_ResidentialProperty_BuySideData_AdminTransactionFee`\n- `REData_REProperties_ResidentialProperty_BuySideData_OtherDeductions`\n\n#### Referrals\n- `REData_REProperties_ResidentialProperty_BuySideData_ReferringAgentFeePercent`\n- `REData_REProperties_ResidentialProperty_BuySideData_ReferringAgentFeeAmount`\n- `REData_REProperties_ResidentialProperty_BuySideData_ReferringAgentName`\n\n#### Agent Splits\n- `REData_REProperties_ResidentialProperty_BuySideData_AgentOneSplitPercent`\n- `REData_REProperties_ResidentialProperty_BuySideData_AgentOneSplitAmount`\n- `REData_REProperties_ResidentialProperty_BuySideData_AgentOneSplitName`\n- `REData_REProperties_ResidentialProperty_BuySideData_AgentTwoSplitPercent`\n- `REData_REProperties_ResidentialProperty_BuySideData_AgentTwoSplitAmount`\n- `REData_REProperties_ResidentialProperty_BuySideData_AgentTwoSplitName`\n\n#### Net Values\n- `REData_REProperties_ResidentialProperty_BuySideData_AgentOneNet`\n- `REData_REProperties_ResidentialProperty_BuySideData_AgentTwoNet`\n- `REData_REProperties_ResidentialProperty_BuySideData_OfficeCommissionNet`\n\n### Signer Representative\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_SignerRepresentative_FirstName`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_SignerRepresentative_MiddleName`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_SignerRepresentative_LastName`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_SignerRepresentative_Email`\n- `REData_REProperties_ResidentialProperty_Listing_SalesData_SignerRepresentative_Phone`",
    "version": "5.1"
  },
  "servers": [
    {
      "url": "https://ws.zipformplus.com/api",
      "description": "Production"
    },
    {
      "url": "https://api.pre.zipformplus.com/api",
      "description": "Staging/QA"
    }
  ],
  "security": [
    {
      "contextAuth": []
    }
  ],
  "components": {
    "securitySchemes": {
      "contextAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Auth-ContextId",
        "description": "Context Id obtained from an authentication endpoint. Must be used together with X-Auth-SharedKey."
      },
      "sharedKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Auth-SharedKey",
        "description": "Shared Key provided by zipLogix to authenticate the partner application."
      },
      "externalIdAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Auth-ExternalId",
        "description": "External Id for partners authorized to use the External Id authentication scheme. Must be used together with X-Auth-SharedKey."
      }
    },
    "parameters": {
      "transactionId": {
        "name": "transactionId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        },
        "description": "Transaction GUID"
      },
      "documentId": {
        "name": "documentId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Document ID or Form GUID"
      },
      "templateId": {
        "name": "templateId",
        "in": "path",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Template ID"
      }
    },
    "schemas": {
      "Transaction": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "Transaction GUID"
          },
          "name": {
            "type": "string",
            "example": "1060 Mountain St"
          },
          "status": {
            "type": "string",
            "enum": [
              "active",
              "pending",
              "closed",
              "inactive",
              "locked"
            ],
            "example": "active"
          },
          "expiration": {
            "type": "string",
            "format": "date-time"
          },
          "transactionType": {
            "type": "string",
            "enum": [
              "Listing",
              "Purchase",
              "Lease",
              "LeaseListing"
            ]
          },
          "propertyType": {
            "type": "string",
            "enum": [
              "Residential",
              "Commercial",
              "Industrial",
              "VacantLand",
              "MultiUnit",
              "FarmAndRanch",
              "Condominium",
              "ManufacturedHome",
              "Coop",
              "Unlisted"
            ]
          },
          "hasFiles": {
            "type": "boolean"
          },
          "created": {
            "type": "string",
            "format": "date-time"
          },
          "lastUpdated": {
            "type": "string",
            "format": "date-time"
          },
          "ownerName": {
            "type": "string"
          },
          "number": {
            "type": "integer",
            "example": 1033771
          },
          "seller": {
            "type": "string"
          },
          "buyer": {
            "type": "string"
          },
          "propertyAddress": {
            "type": "string",
            "description": "Full address in one value"
          },
          "address": {
            "type": "string"
          },
          "city": {
            "type": "string"
          },
          "state": {
            "type": "string"
          },
          "zip": {
            "type": "string"
          },
          "isSigned": {
            "type": "boolean",
            "description": "Whether the transaction has signed documents"
          },
          "EncryptedOwnerId": {
            "type": "string",
            "format": "uuid",
            "description": "GUID of the agent who owns this transaction"
          }
        }
      },
      "DocumentItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Document ID or Form GUID"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "contentType": {
            "type": "string",
            "description": "form, PDF, doc, etc."
          },
          "version": {
            "type": "string"
          },
          "signed": {
            "type": "integer",
            "description": "0=not signed, 1=Docusign, 2=zipLogix Digital Ink, 3=zipLogix Digital Ink TouchSign"
          },
          "size": {
            "type": "integer",
            "description": "Size in bytes (0 for forms)"
          }
        }
      },
      "Library": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "state": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          }
        }
      },
      "Template": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          }
        }
      },
      "Team": {
        "type": "object",
        "properties": {
          "teamId": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "address": {
            "type": "string"
          },
          "created": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TitleNote": {
        "type": "object",
        "properties": {
          "CreatedDate": {
            "type": "string",
            "format": "date-time"
          },
          "ReadDate": {
            "type": "string",
            "format": "date-time"
          },
          "Message": {
            "type": "string"
          },
          "Publisher": {
            "type": "string"
          }
        }
      },
      "ContextIdResponse": {
        "type": "object",
        "properties": {
          "contextId": {
            "type": "string",
            "description": "Session identifier to be used in subsequent requests"
          }
        }
      },
      "AuthentisignUrl": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "The Authentisign SSO URL to redirect the user to for signing."
          }
        }
      }
    }
  },
  "paths": {
    "/auth/user": {
      "post": {
        "summary": "Authenticate Using User Credentials",
        "description": "Authenticates the partner application and a zipForm\u00ae user using username/password or user GUID, and returns a Context Id for use in subsequent requests.\n\nOptionally supply `LinkExternalId` to link the user's account to a partner external ID.\n\n**Returns 409** if account linking fails.",
        "tags": [
          "Authentication"
        ],
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "SharedKey"
                ],
                "properties": {
                  "SharedKey": {
                    "type": "string",
                    "description": "Partner shared key"
                  },
                  "UserName": {
                    "type": "string",
                    "description": "zipForm\u00ae username (use with Password)"
                  },
                  "Password": {
                    "type": "string",
                    "description": "zipForm\u00ae password"
                  },
                  "UserId": {
                    "type": "string",
                    "description": "zipForm\u00ae user GUID (alternative to UserName/Password)"
                  },
                  "LinkExternalId": {
                    "type": "string",
                    "description": "Optional. Partner external ID to link to this zipForm\u00ae account."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Authentication successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContextIdResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized \u2014 invalid credentials"
          },
          "409": {
            "description": "Account linking failed"
          }
        }
      }
    },
    "/auth/external-id": {
      "post": {
        "summary": "Authenticate Using External Id",
        "description": "Authenticates using the partner's External Id and Shared Key, and returns a Context Id.",
        "tags": [
          "Authentication"
        ],
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "SharedKey",
                  "ExternalId"
                ],
                "properties": {
                  "SharedKey": {
                    "type": "string"
                  },
                  "ExternalId": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Authentication successful",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContextIdResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/auth/end-session": {
      "post": {
        "summary": "End Session",
        "description": "Ends the current session identified by the Context Id. Partners using Context Id authentication should invoke this when their application session ends to destroy the Context Id.",
        "tags": [
          "Authentication"
        ],
        "responses": {
          "200": {
            "description": "Session ended successfully"
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/auth/unlink": {
      "post": {
        "summary": "Unlink Account",
        "description": "Unlinks a partner account (identified by External Id) from its associated zipForm\u00ae account. The zipForm\u00ae account becomes available for linking to another partner account.",
        "tags": [
          "Authentication"
        ],
        "security": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "SharedKey",
                  "ExternalId"
                ],
                "properties": {
                  "SharedKey": {
                    "type": "string"
                  },
                  "ExternalId": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Account unlinked successfully"
          },
          "304": {
            "description": "Not Modified \u2014 External Id could not be removed"
          },
          "401": {
            "description": "Unauthorized \u2014 partner not recognized or user not found"
          }
        }
      },
      "get": {
        "summary": "Unlink Account (GET)",
        "description": "Alternative GET form of the unlink method. Supply SharedKey and ExternalId as query parameters.",
        "tags": [
          "Authentication"
        ],
        "security": [],
        "parameters": [
          {
            "in": "query",
            "name": "SharedKey",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "in": "query",
            "name": "ExternalId",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Account unlinked successfully"
          },
          "304": {
            "description": "Not Modified"
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/transactions": {
      "get": {
        "summary": "Get Transaction List",
        "description": "Returns the list of transactions available for the authenticated user. Supports optional filter parameters.",
        "tags": [
          "Transactions"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "since",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "Return transactions created from this date onwards"
          },
          {
            "in": "query",
            "name": "modifiedSince",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "description": "Return transactions modified from this date onwards"
          },
          {
            "in": "query",
            "name": "status",
            "schema": {
              "type": "string"
            },
            "description": "Filter by status: active (default), pending, closed, inactive, locked, all, all:active, all:pending, all:closed, all:inactive, all:locked"
          },
          {
            "in": "query",
            "name": "agentId",
            "schema": {
              "type": "string"
            },
            "description": "Filter transactions by agent ID (brokerage/team scenarios)"
          },
          {
            "in": "query",
            "name": "filterBy",
            "schema": {
              "type": "string"
            },
            "description": "Text filter applied to property address, city, zip, transaction name, or buyer/seller name"
          },
          {
            "in": "query",
            "name": "teamId",
            "schema": {
              "type": "string"
            },
            "description": "Filter by team ID, or use 'all' for all teams the agent belongs to"
          },
          {
            "in": "query",
            "name": "page",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "pagesize",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "orderby",
            "schema": {
              "type": "string",
              "enum": [
                "name",
                "created"
              ]
            }
          },
          {
            "in": "query",
            "name": "sortorder",
            "schema": {
              "type": "string",
              "enum": [
                "asc",
                "desc"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "List of transactions",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "value": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Transaction"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      },
      "post": {
        "summary": "Create Transaction",
        "description": "Creates a new transaction for the authenticated user. `name` is required. `data` can include key-value pairs from the Transaction Data Keys appendix. `transactionType` and `propertyType` accept string or integer enum values.",
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "name"
                ],
                "properties": {
                  "name": {
                    "type": "string",
                    "example": "123 Main Street"
                  },
                  "status": {
                    "type": "string",
                    "example": "active"
                  },
                  "transactionType": {
                    "type": "string",
                    "enum": [
                      "Listing",
                      "Purchase",
                      "Lease",
                      "LeaseListing"
                    ],
                    "description": "Integer values: Listing=0, Purchase=1, Lease=2, LeaseListing=3"
                  },
                  "propertyType": {
                    "type": "string",
                    "enum": [
                      "Residential",
                      "Commercial",
                      "Industrial",
                      "VacantLand",
                      "MultiUnit",
                      "FarmAndRanch",
                      "Condominium",
                      "ManufacturedHome",
                      "Coop",
                      "Unlisted"
                    ],
                    "description": "Integer values: Residential=0, Commercial=1, Industrial=2, VacantLand=3, MultiUnit=4, FarmAndRanch=5, Condominium=6, ManufacturedHome=7, Coop=8, Unlisted=9"
                  },
                  "data": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    },
                    "description": "Key-value pairs of transaction data. See Transaction Data Keys in the introduction."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Transaction created successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/transactions/{transactionId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/transactionId"
        }
      ],
      "get": {
        "summary": "Get Transaction Metadata",
        "description": "Returns the metadata for a specific transaction. Useful for a quick lookup of a transaction by its GUID.",
        "tags": [
          "Transactions"
        ],
        "responses": {
          "200": {
            "description": "Transaction metadata returned successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Transaction not found"
          }
        }
      },
      "delete": {
        "summary": "Delete Transaction",
        "description": "Deletes the specified transaction for the authenticated user.",
        "tags": [
          "Transactions"
        ],
        "responses": {
          "200": {
            "description": "Transaction deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Transaction not found"
          }
        }
      }
    },
    "/transactions/{transactionId}/data": {
      "parameters": [
        {
          "$ref": "#/components/parameters/transactionId"
        }
      ],
      "get": {
        "summary": "Get Transaction Data",
        "description": "Returns the data (key-value pairs) for a given transaction. See the Transaction Data Keys appendix in the introduction for the full list of available keys.",
        "tags": [
          "Transactions"
        ],
        "responses": {
          "200": {
            "description": "Transaction data returned successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Transaction not found"
          }
        }
      },
      "post": {
        "summary": "Set Transaction Data",
        "description": "Sets the data for a given transaction. The `mode` parameter controls whether supplied data is merged with existing data (default) or replaces it entirely.",
        "tags": [
          "Transactions"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "mode",
            "schema": {
              "type": "string",
              "enum": [
                "Merge",
                "Replace"
              ],
              "default": "Merge"
            },
            "description": "Merge (default) adds to existing data; Replace removes existing data and sets the new values."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                },
                "description": "Key-value pairs of transaction data. See Transaction Data Keys in the introduction."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Transaction data updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Transaction not found"
          }
        }
      }
    },
    "/transactions/{transactionId}/apply/{templateId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/transactionId"
        },
        {
          "$ref": "#/components/parameters/templateId"
        }
      ],
      "get": {
        "summary": "Apply Template to Transaction",
        "description": "Applies a template to a specified transaction.",
        "tags": [
          "Templates"
        ],
        "responses": {
          "200": {
            "description": "Template applied successfully"
          },
          "403": {
            "description": "Forbidden"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/transactions/{transactionId}/forms": {
      "parameters": [
        {
          "$ref": "#/components/parameters/transactionId"
        }
      ],
      "get": {
        "summary": "Get Form List",
        "description": "Returns the list of forms for a given transaction. Forms are distinguished by `contentType` having a value of `form`.",
        "tags": [
          "Forms and Documents"
        ],
        "responses": {
          "200": {
            "description": "Form list returned successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "value": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/DocumentItem"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Transaction not found"
          }
        }
      }
    },
    "/transactions/{transactionId}/documents": {
      "parameters": [
        {
          "$ref": "#/components/parameters/transactionId"
        }
      ],
      "get": {
        "summary": "Get Document List",
        "description": "Returns the list of documents and forms for a given transaction, in the same order as the zipForm\u00ae Plus UI. Use `excludeforms=true` to return only non-form documents.",
        "tags": [
          "Forms and Documents"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "excludeforms",
            "schema": {
              "type": "boolean"
            },
            "description": "If true, only non-form documents are returned"
          },
          {
            "in": "query",
            "name": "page",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "pagesize",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "orderby",
            "schema": {
              "type": "string",
              "enum": [
                "name",
                "ContentType"
              ]
            }
          },
          {
            "in": "query",
            "name": "sortorder",
            "schema": {
              "type": "string",
              "enum": [
                "asc",
                "desc"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Document list returned successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "value": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/DocumentItem"
                      }
                    }
                  }
                }
              }
            }
          },
          "204": {
            "description": "No content \u2014 transaction has no documents"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Transaction not found"
          }
        }
      }
    },
    "/transactions/{transactionId}/documents/form": {
      "parameters": [
        {
          "$ref": "#/components/parameters/transactionId"
        }
      ],
      "post": {
        "summary": "Add Form to Transaction",
        "description": "Adds a form (by its GUID) to a transaction. Form GUIDs are obtained from the Get Library Forms endpoint.",
        "tags": [
          "Forms and Documents"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "format": "uuid",
                    "description": "Form GUID from the library"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Form added successfully. Returns the form GUID.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "format": "uuid"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Transaction or form not found"
          }
        }
      }
    },
    "/transactions/{transactionId}/documents/file": {
      "parameters": [
        {
          "$ref": "#/components/parameters/transactionId"
        }
      ],
      "post": {
        "summary": "Upload File Document",
        "description": "Uploads a file document to a transaction. If `Id` is omitted, a new document is created at version 1. If `Id` is provided and matches an existing document, a new version is added.\n\n**Supported MIME types:** `application/pdf`, `application/msword`, `application/vnd.openxmlformats-officedocument.wordprocessingml.document`, `application/vnd.ms-excel`, `application/vnd.openxmlformats-officedocument.spreadsheetml.sheet`, `image/jpeg`, `image/png`, `image/bmp`, `image/gif`",
        "tags": [
          "Forms and Documents"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "Name",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Document name"
          },
          {
            "in": "query",
            "name": "Description",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Document description"
          },
          {
            "in": "query",
            "name": "ContainerId",
            "schema": {
              "type": "string"
            },
            "description": "Optional folder ID to store the document in"
          },
          {
            "in": "query",
            "name": "Id",
            "schema": {
              "type": "string"
            },
            "description": "Optional document ID. If provided and found, adds a new version."
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/pdf": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            },
            "application/msword": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            },
            "image/jpeg": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Document uploaded. Returns the endpoint URL for the uploaded document."
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Document ID provided but not found"
          },
          "415": {
            "description": "Unsupported media type"
          }
        }
      }
    },
    "/transactions/{transactionId}/documents/{documentId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/transactionId"
        },
        {
          "$ref": "#/components/parameters/documentId"
        }
      ],
      "get": {
        "summary": "Get Document Contents",
        "description": "Returns the content of the specified form or document. If a form GUID is specified, returns it as a PDF. Otherwise returns the document in its existing format.\n\nOptionally append `/<version>` to the URL to specify the form version or document version number.",
        "tags": [
          "Forms and Documents"
        ],
        "responses": {
          "200": {
            "description": "Document contents returned as a byte stream"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Blank PDF Not Allowed \u2014 form has no user-entered contents"
          },
          "404": {
            "description": "Document not found"
          }
        }
      },
      "delete": {
        "summary": "Delete Document",
        "description": "Deletes the specified form or document from the transaction.",
        "tags": [
          "Forms and Documents"
        ],
        "responses": {
          "200": {
            "description": "Document deleted successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Document not found"
          }
        }
      }
    },
    "/transactions/{transactionId}/documents/{documentId}/meta": {
      "parameters": [
        {
          "$ref": "#/components/parameters/transactionId"
        },
        {
          "$ref": "#/components/parameters/documentId"
        }
      ],
      "get": {
        "summary": "Get Document Metadata",
        "description": "Returns the metadata associated with a form or document. For forms, `size` is always 0. `signed` values: 0=not signed, 1=Docusign, 2=zipLogix Digital Ink, 3=zipLogix Digital Ink TouchSign.",
        "tags": [
          "Forms and Documents"
        ],
        "responses": {
          "200": {
            "description": "Document metadata returned successfully",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DocumentItem"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Document not found"
          }
        }
      }
    },
    "/transactions/{transactionId}/documents/{documentId}/hash": {
      "parameters": [
        {
          "$ref": "#/components/parameters/transactionId"
        },
        {
          "$ref": "#/components/parameters/documentId"
        }
      ],
      "get": {
        "summary": "Get Form Hash",
        "description": "Returns an MD5 hash of the form, calculated upon PDF generation. Useful for determining whether a form has changed since it was last retrieved.",
        "tags": [
          "Forms and Documents"
        ],
        "responses": {
          "200": {
            "description": "MD5 hash returned",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string",
                  "example": "a933e383fcaf699a8041497bca7654a7"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Form not found"
          }
        }
      }
    },
    "/transactions/{transactionId}/title-order-status/{status}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/transactionId"
        },
        {
          "name": "status",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string",
            "enum": [
              "Pending",
              "Delivered",
              "Open",
              "Closed",
              "Cancelled",
              "ClearCleared"
            ]
          },
          "description": "New title order status"
        }
      ],
      "post": {
        "summary": "Update Title Order Status",
        "description": "Allows a title partner to update the status of a title order associated with a transaction.",
        "tags": [
          "Title Integration"
        ],
        "responses": {
          "200": {
            "description": "Title order status updated successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Transaction not found"
          }
        }
      }
    },
    "/transactions/{transactionId}/title-order-note": {
      "parameters": [
        {
          "$ref": "#/components/parameters/transactionId"
        }
      ],
      "post": {
        "summary": "Add Note to Title Order",
        "description": "Allows a title partner to add a note to the title order associated with a transaction.",
        "tags": [
          "Title Integration"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "message"
                ],
                "properties": {
                  "message": {
                    "type": "string",
                    "example": "Submitted order"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Note added successfully"
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Transaction not found"
          }
        }
      },
      "get": {
        "summary": "Retrieve All Title Order Notes",
        "description": "Retrieves all title notes associated with a transaction.",
        "tags": [
          "Title Integration"
        ],
        "responses": {
          "200": {
            "description": "Title order notes returned successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TitleNote"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Transaction not found"
          }
        }
      }
    },
    "/agents/libraries": {
      "get": {
        "summary": "Get Agent Libraries",
        "description": "Returns the list of form libraries available to the authenticated user. Each user may have access to one or more libraries through their entitlements or purchases.",
        "tags": [
          "Form Libraries"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "pagesize",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "orderby",
            "schema": {
              "type": "string",
              "enum": [
                "name",
                "state"
              ]
            }
          },
          {
            "in": "query",
            "name": "sortorder",
            "schema": {
              "type": "string",
              "enum": [
                "asc",
                "desc"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Library list returned successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "value": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/Library"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/libraries/{libraryId}/{libraryName}/{libraryVersion}": {
      "parameters": [
        {
          "name": "libraryId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Library ID"
        },
        {
          "name": "libraryName",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Library Name"
        },
        {
          "name": "libraryVersion",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "Library Version"
        }
      ],
      "get": {
        "summary": "Get Library Forms",
        "description": "Returns the list of forms available in a specific library. Since this method is about forms, `contentType` always has a value of `form` in the response.",
        "tags": [
          "Form Libraries"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "page",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "pagesize",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "orderby",
            "schema": {
              "type": "string",
              "enum": [
                "name",
                "ContentType"
              ]
            }
          },
          {
            "in": "query",
            "name": "sortorder",
            "schema": {
              "type": "string",
              "enum": [
                "asc",
                "desc"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Library forms returned successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "value": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/DocumentItem"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "404": {
            "description": "Library not found"
          }
        }
      }
    },
    "/templates": {
      "get": {
        "summary": "Get List of Templates",
        "description": "Returns the list of templates available to the authenticated user. Optionally filter by office using the path `/templates/<office ID>`.",
        "tags": [
          "Templates"
        ],
        "responses": {
          "200": {
            "description": "Template list returned successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Template"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        }
      }
    },
    "/teams": {
      "post": {
        "summary": "Get List of Teams for an Agent",
        "description": "Returns the list of teams the authenticated agent belongs to. A team may be a standalone team or a brokerage team. Returns an empty response if the agent is not part of any team.",
        "tags": [
          "Teams"
        ],
        "responses": {
          "200": {
            "description": "Team list returned successfully",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Team"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          }
        }
      }
    },
    "/transactions/{transactionId}/get-authentisign-url": {
      "parameters": [
        {
          "$ref": "#/components/parameters/transactionId"
        }
      ],
      "get": {
        "summary": "Create Signing Packet",
        "description": "Generates an Authentisign 2 (AS2) SSO signing URL for the specified transaction. Builds a signing session using the authenticated member's profile, the specified transaction, and the provided document list and packet name. The returned URL can be used to redirect the user directly into the Authentisign signing experience.",
        "tags": [
          "Authentisign"
        ],
        "parameters": [
          {
            "name": "docList",
            "in": "query",
            "required": true,
            "description": "Comma-separated list of form or document IDs to include in the signing packet.",
            "schema": {
              "type": "string",
              "example": "form-id-1,form-id-2,doc-id-3"
            }
          },
          {
            "name": "packetName",
            "in": "query",
            "required": true,
            "description": "The name to assign to the Authentisign e-sign packet.",
            "schema": {
              "type": "string",
              "example": "Purchase Agreement Signing"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Signing URL generated successfully.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthentisignUrl"
                },
                "example": {
                  "url": "https://cloud.authentisign.com/sso?sso=eyJhbGci...&signingId=97757ef1-2a4c-ee11-a3f1-6045bddacb97&redirectUrl=https%3a%2f%2fzipformplus.com%2fdefault.aspx"
                }
              }
            }
          },
          "400": {
            "description": "Bad request. Missing or invalid parameters."
          },
          "401": {
            "description": "Unauthorized."
          },
          "404": {
            "description": "Transaction not found."
          }
        }
      }
    }
  },
  "tags": [
    {
      "name": "Authentication",
      "description": "Authenticate partner applications and users. Obtain a Context Id for use in all other requests."
    },
    {
      "name": "Transactions",
      "description": "Create, retrieve, update, and delete transactions and their associated data."
    },
    {
      "name": "Forms and Documents",
      "description": "Manage forms and file documents within transactions."
    },
    {
      "name": "Form Libraries",
      "description": "Browse available form libraries and the forms within them."
    },
    {
      "name": "Templates",
      "description": "List and apply transaction templates."
    },
    {
      "name": "Teams",
      "description": "Manage team-based transaction access for agents in brokerage or team scenarios."
    },
    {
      "name": "Title Integration",
      "description": "Allow title partners to update title order status and manage notes on transactions."
    },
    {
      "name": "Authentisign",
      "description": "Endpoints for creating and managing Authentisign e-signing sessions within transactions."
    }
  ]
}