openapi: 3.1.0 info: title: Harbor Compliance API description: >- The Harbor Compliance API enables partners to integrate compliance management capabilities into their platforms. The API provides programmatic access to business licensing, registered agent services, compliance tracking, and entity management workflows. Partners can automate compliance tasks, monitor filing deadlines, manage registered agent appointments, and track licensing requirements across jurisdictions. version: '1.0' contact: name: Harbor Compliance Support url: https://www.harborcompliance.com/contact termsOfService: https://www.harborcompliance.com/terms-of-service externalDocs: description: Harbor Compliance Developer Documentation url: https://developers.harborcompliance.com/ servers: - url: https://api.harborcompliance.com/v1 description: Production Server tags: - name: Compliance Filings description: Annual reports, compliance filings, and deadline tracking. - name: Entities description: Business entity management including corporations, LLCs, and other legal entities. - name: Jurisdictions description: State and jurisdiction information for compliance requirements. - name: Licenses description: Business license applications, renewals, and status tracking across jurisdictions. - name: Orders description: Compliance service orders and fulfillment tracking. - name: Registered Agents description: Registered agent appointment and management for business entities. security: - apiKey: [] paths: /entities: get: operationId: listEntities summary: Harbor Compliance List business entities description: >- Returns a paginated list of business entities managed under the partner account. Results can be filtered by entity type, state, and status. tags: - Entities parameters: - $ref: '#/components/parameters/pageParam' - $ref: '#/components/parameters/perPageParam' - name: state in: query description: Filter entities by state of formation (two-letter state code). schema: type: string pattern: '^[A-Z]{2}$' - name: entity_type in: query description: Filter by entity type. schema: type: string enum: - corporation - llc - lp - llp - nonprofit - sole_proprietorship - name: status in: query description: Filter by entity status. schema: type: string enum: [active, inactive, dissolved, pending] responses: '200': description: A paginated list of business entities. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Entity' meta: $ref: '#/components/schemas/PaginationMeta' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createEntity summary: Harbor Compliance Create a business entity description: >- Creates a new business entity record in Harbor Compliance. This registers the entity for compliance tracking and monitoring across applicable jurisdictions. tags: - Entities requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EntityCreate' responses: '201': description: The newly created business entity. content: application/json: schema: $ref: '#/components/schemas/Entity' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' /entities/{entityId}: get: operationId: getEntity summary: Harbor Compliance Get a business entity description: >- Retrieves detailed information about a specific business entity including its formation details, registered agent, compliance status, and active licenses. tags: - Entities parameters: - $ref: '#/components/parameters/entityIdParam' responses: '200': description: Business entity details. content: application/json: schema: $ref: '#/components/schemas/Entity' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' patch: operationId: updateEntity summary: Harbor Compliance Update a business entity description: >- Updates mutable fields on a business entity record such as the contact information, principal address, and officer details. tags: - Entities parameters: - $ref: '#/components/parameters/entityIdParam' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/EntityUpdate' responses: '200': description: The updated business entity. content: application/json: schema: $ref: '#/components/schemas/Entity' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /entities/{entityId}/compliance: get: operationId: getEntityCompliance summary: Harbor Compliance Get compliance status for an entity description: >- Returns the full compliance status for a business entity including upcoming filing deadlines, overdue items, and a summary of active compliance requirements across all jurisdictions where the entity operates. tags: - Compliance Filings - Entities parameters: - $ref: '#/components/parameters/entityIdParam' responses: '200': description: Entity compliance status summary. content: application/json: schema: $ref: '#/components/schemas/ComplianceStatus' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /licenses: get: operationId: listLicenses summary: Harbor Compliance List business licenses description: >- Returns a paginated list of business licenses managed for partner entities. Licenses can be filtered by entity, jurisdiction, license type, and status. tags: - Licenses parameters: - $ref: '#/components/parameters/pageParam' - $ref: '#/components/parameters/perPageParam' - name: entity_id in: query description: Filter licenses by entity identifier. schema: type: string - name: state in: query description: Filter licenses by state jurisdiction. schema: type: string pattern: '^[A-Z]{2}$' - name: status in: query description: Filter by license status. schema: type: string enum: [active, pending, expired, revoked] responses: '200': description: A paginated list of business licenses. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/License' meta: $ref: '#/components/schemas/PaginationMeta' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createLicense summary: Harbor Compliance Create a license application description: >- Submits a new business license application for a specified entity and jurisdiction. Harbor Compliance will process the application and update the status as it progresses through the licensing workflow. tags: - Licenses requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/LicenseCreate' responses: '201': description: The newly created license application. content: application/json: schema: $ref: '#/components/schemas/License' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' /licenses/{licenseId}: get: operationId: getLicense summary: Harbor Compliance Get a business license description: >- Retrieves detailed information about a specific business license including its current status, expiration date, renewal requirements, and associated filings. tags: - Licenses parameters: - $ref: '#/components/parameters/licenseIdParam' responses: '200': description: Business license details. content: application/json: schema: $ref: '#/components/schemas/License' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /licenses/{licenseId}/renew: post: operationId: renewLicense summary: Harbor Compliance Renew a business license description: >- Initiates the renewal process for an existing business license. This creates a renewal order that Harbor Compliance will process through the appropriate jurisdiction's renewal workflow. tags: - Licenses parameters: - $ref: '#/components/parameters/licenseIdParam' requestBody: required: false content: application/json: schema: type: object properties: notes: type: string description: Optional notes for the renewal request. responses: '200': description: The updated license record with renewal initiated. content: application/json: schema: $ref: '#/components/schemas/License' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /registered-agents: get: operationId: listRegisteredAgents summary: Harbor Compliance List registered agent appointments description: >- Returns a paginated list of registered agent appointments for entities managed under the partner account. Includes appointment status and jurisdiction details. tags: - Registered Agents parameters: - $ref: '#/components/parameters/pageParam' - $ref: '#/components/parameters/perPageParam' - name: entity_id in: query description: Filter by entity identifier. schema: type: string - name: state in: query description: Filter by state jurisdiction. schema: type: string pattern: '^[A-Z]{2}$' responses: '200': description: A paginated list of registered agent appointments. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/RegisteredAgent' meta: $ref: '#/components/schemas/PaginationMeta' '401': $ref: '#/components/responses/Unauthorized' post: operationId: createRegisteredAgentAppointment summary: Harbor Compliance Appoint a registered agent description: >- Creates a new registered agent appointment for a business entity in a specified state. Harbor Compliance will file the necessary paperwork with the state to formalize the appointment. tags: - Registered Agents requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/RegisteredAgentCreate' responses: '201': description: The newly created registered agent appointment. content: application/json: schema: $ref: '#/components/schemas/RegisteredAgent' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' /registered-agents/{agentId}: get: operationId: getRegisteredAgent summary: Harbor Compliance Get a registered agent appointment description: >- Retrieves details about a specific registered agent appointment including the agent's address, appointment status, and associated entity. tags: - Registered Agents parameters: - $ref: '#/components/parameters/agentIdParam' responses: '200': description: Registered agent appointment details. content: application/json: schema: $ref: '#/components/schemas/RegisteredAgent' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /filings: get: operationId: listFilings summary: Harbor Compliance List compliance filings description: >- Returns a paginated list of compliance filings including annual reports, statements of information, and other required regulatory submissions. Results can be filtered by entity, state, filing type, and status. tags: - Compliance Filings parameters: - $ref: '#/components/parameters/pageParam' - $ref: '#/components/parameters/perPageParam' - name: entity_id in: query description: Filter filings by entity identifier. schema: type: string - name: state in: query description: Filter filings by state jurisdiction. schema: type: string pattern: '^[A-Z]{2}$' - name: status in: query description: Filter by filing status. schema: type: string enum: [pending, in_progress, filed, overdue, waived] - name: due_before in: query description: Filter filings due before this date (ISO 8601 date). schema: type: string format: date responses: '200': description: A paginated list of compliance filings. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Filing' meta: $ref: '#/components/schemas/PaginationMeta' '401': $ref: '#/components/responses/Unauthorized' /filings/{filingId}: get: operationId: getFiling summary: Harbor Compliance Get a compliance filing description: >- Retrieves details about a specific compliance filing including its type, due date, status, and any documents associated with the filing. tags: - Compliance Filings parameters: - $ref: '#/components/parameters/filingIdParam' responses: '200': description: Compliance filing details. content: application/json: schema: $ref: '#/components/schemas/Filing' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /jurisdictions: get: operationId: listJurisdictions summary: Harbor Compliance List jurisdictions description: >- Returns a list of all supported jurisdictions with their compliance requirements, filing fees, and annual report due dates. tags: - Jurisdictions parameters: - name: entity_type in: query description: Filter jurisdictions by supported entity type. schema: type: string enum: - corporation - llc - lp - llp - nonprofit responses: '200': description: A list of supported jurisdictions. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Jurisdiction' '401': $ref: '#/components/responses/Unauthorized' /jurisdictions/{state}: get: operationId: getJurisdiction summary: Harbor Compliance Get jurisdiction details description: >- Retrieves detailed compliance requirements for a specific state jurisdiction including annual report deadlines, filing fees, and registered agent requirements by entity type. tags: - Jurisdictions parameters: - name: state in: path required: true description: Two-letter state code (e.g., CA, NY, DE). schema: type: string pattern: '^[A-Z]{2}$' responses: '200': description: Jurisdiction compliance details. content: application/json: schema: $ref: '#/components/schemas/Jurisdiction' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' /orders: get: operationId: listOrders summary: Harbor Compliance List service orders description: >- Returns a paginated list of compliance service orders placed through the Harbor Compliance partner account. Orders represent discrete compliance tasks being fulfilled by Harbor Compliance staff. tags: - Orders parameters: - $ref: '#/components/parameters/pageParam' - $ref: '#/components/parameters/perPageParam' - name: entity_id in: query description: Filter orders by entity identifier. schema: type: string - name: status in: query description: Filter by order status. schema: type: string enum: [pending, processing, completed, cancelled] responses: '200': description: A paginated list of service orders. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Order' meta: $ref: '#/components/schemas/PaginationMeta' '401': $ref: '#/components/responses/Unauthorized' /orders/{orderId}: get: operationId: getOrder summary: Harbor Compliance Get a service order description: >- Retrieves details about a specific compliance service order including its current status, associated entity, service type, and any documents produced. tags: - Orders parameters: - $ref: '#/components/parameters/orderIdParam' responses: '200': description: Service order details. content: application/json: schema: $ref: '#/components/schemas/Order' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' components: securitySchemes: apiKey: type: apiKey in: header name: X-API-Key description: >- API key for authenticating partner requests. Obtain your API key from the Harbor Compliance developer portal. parameters: entityIdParam: name: entityId in: path required: true description: Unique identifier for the business entity. schema: type: string licenseIdParam: name: licenseId in: path required: true description: Unique identifier for the business license. schema: type: string agentIdParam: name: agentId in: path required: true description: Unique identifier for the registered agent appointment. schema: type: string filingIdParam: name: filingId in: path required: true description: Unique identifier for the compliance filing. schema: type: string orderIdParam: name: orderId in: path required: true description: Unique identifier for the service order. schema: type: string pageParam: name: page in: query description: Page number for paginated results (1-based). schema: type: integer minimum: 1 default: 1 perPageParam: name: per_page in: query description: Number of results per page. schema: type: integer minimum: 1 maximum: 100 default: 20 responses: BadRequest: description: The request was malformed or contained invalid parameters. content: application/json: schema: $ref: '#/components/schemas/Error' Unauthorized: description: Authentication credentials are missing or invalid. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' schemas: Entity: type: object title: Entity description: A business entity managed by Harbor Compliance. required: [id, name, entity_type, state, status] properties: id: type: string description: Unique identifier for the business entity. name: type: string description: Legal name of the business entity. entity_type: type: string description: The legal structure of the entity. enum: - corporation - llc - lp - llp - nonprofit - sole_proprietorship state: type: string description: Two-letter state code where the entity was formed. pattern: '^[A-Z]{2}$' status: type: string description: Current standing status of the entity. enum: [active, inactive, dissolved, pending] ein: type: string description: Employer Identification Number (EIN) assigned by the IRS. pattern: '^\d{2}-\d{7}$' formation_date: type: string format: date description: Date the entity was formed or incorporated. registered_agent_id: type: string description: Identifier of the registered agent appointment for this entity. principal_address: $ref: '#/components/schemas/Address' mailing_address: $ref: '#/components/schemas/Address' officers: type: array description: List of officers and directors associated with the entity. items: $ref: '#/components/schemas/Officer' created_at: type: string format: date-time description: ISO 8601 timestamp when the entity record was created. updated_at: type: string format: date-time description: ISO 8601 timestamp of the last update to the entity record. EntityCreate: type: object title: EntityCreate description: Fields required to create a new business entity record. required: [name, entity_type, state] properties: name: type: string description: Legal name of the business entity. entity_type: type: string description: The legal structure of the entity. enum: - corporation - llc - lp - llp - nonprofit - sole_proprietorship state: type: string description: Two-letter state code where the entity was formed. pattern: '^[A-Z]{2}$' ein: type: string description: Employer Identification Number (EIN). pattern: '^\d{2}-\d{7}$' formation_date: type: string format: date description: Date the entity was formed or incorporated. principal_address: $ref: '#/components/schemas/Address' officers: type: array description: Officers and directors associated with the entity. items: $ref: '#/components/schemas/Officer' EntityUpdate: type: object title: EntityUpdate description: Fields that can be updated on an existing business entity. properties: name: type: string description: Updated legal name of the entity. principal_address: $ref: '#/components/schemas/Address' mailing_address: $ref: '#/components/schemas/Address' officers: type: array description: Updated list of officers and directors. items: $ref: '#/components/schemas/Officer' License: type: object title: License description: A business license held by an entity in a specific jurisdiction. required: [id, entity_id, state, license_type, status] properties: id: type: string description: Unique identifier for the license. entity_id: type: string description: Identifier of the entity that holds this license. state: type: string description: Two-letter state code for the licensing jurisdiction. pattern: '^[A-Z]{2}$' license_type: type: string description: Type or category of business license. license_number: type: string description: License number assigned by the issuing jurisdiction. status: type: string description: Current status of the license. enum: [active, pending, expired, revoked] issued_date: type: string format: date description: Date the license was issued. expiration_date: type: string format: date description: Date the license expires and must be renewed. renewal_date: type: string format: date description: Date by which the renewal must be submitted to avoid lapse. agency: type: string description: Name of the government agency that issued the license. created_at: type: string format: date-time description: ISO 8601 timestamp when the license record was created. updated_at: type: string format: date-time description: ISO 8601 timestamp of the last update. LicenseCreate: type: object title: LicenseCreate description: Fields required to submit a new business license application. required: [entity_id, state, license_type] properties: entity_id: type: string description: Identifier of the entity applying for the license. state: type: string description: Two-letter state code for the licensing jurisdiction. pattern: '^[A-Z]{2}$' license_type: type: string description: Type of business license being applied for. notes: type: string description: Additional notes or instructions for the license application. RegisteredAgent: type: object title: RegisteredAgent description: A registered agent appointment for a business entity in a state. required: [id, entity_id, state, status] properties: id: type: string description: Unique identifier for the registered agent appointment. entity_id: type: string description: Identifier of the entity for which the agent is appointed. state: type: string description: Two-letter state code where the agent is appointed. pattern: '^[A-Z]{2}$' status: type: string description: Current status of the registered agent appointment. enum: [active, pending, resigned, revoked] agent_name: type: string description: Name of the registered agent. agent_address: $ref: '#/components/schemas/Address' appointment_date: type: string format: date description: Date the registered agent was officially appointed. created_at: type: string format: date-time description: ISO 8601 timestamp when the appointment record was created. updated_at: type: string format: date-time description: ISO 8601 timestamp of the last update. RegisteredAgentCreate: type: object title: RegisteredAgentCreate description: Fields required to create a registered agent appointment. required: [entity_id, state] properties: entity_id: type: string description: Identifier of the entity requiring a registered agent. state: type: string description: Two-letter state code where the agent should be appointed. pattern: '^[A-Z]{2}$' notes: type: string description: Optional notes for the registered agent appointment request. Filing: type: object title: Filing description: A required compliance filing such as an annual report or statement of information. required: [id, entity_id, state, filing_type, status] properties: id: type: string description: Unique identifier for the filing. entity_id: type: string description: Identifier of the entity required to submit this filing. state: type: string description: Two-letter state code of the filing jurisdiction. pattern: '^[A-Z]{2}$' filing_type: type: string description: Type of required compliance filing. enum: - annual_report - biennial_report - statement_of_information - franchise_tax - beneficial_ownership - other status: type: string description: Current status of the filing. enum: [pending, in_progress, filed, overdue, waived] due_date: type: string format: date description: Date by which the filing must be submitted to the state. filed_date: type: string format: date description: Date the filing was actually submitted, if completed. fee: type: number description: Filing fee in USD charged by the state. filing_period: type: string description: The period or year covered by this filing (e.g., '2025'). documents: type: array description: Documents associated with this filing. items: $ref: '#/components/schemas/Document' created_at: type: string format: date-time description: ISO 8601 timestamp when the filing record was created. updated_at: type: string format: date-time description: ISO 8601 timestamp of the last update. ComplianceStatus: type: object title: ComplianceStatus description: A summary of the compliance status for a business entity. required: [entity_id, overall_status] properties: entity_id: type: string description: Identifier of the entity this status applies to. overall_status: type: string description: Overall compliance health status for the entity. enum: [compliant, attention_required, non_compliant] upcoming_deadlines: type: array description: Compliance items due within the next 90 days. items: $ref: '#/components/schemas/ComplianceDeadline' overdue_items: type: array description: Compliance items that are past their due date. items: $ref: '#/components/schemas/ComplianceDeadline' active_licenses_count: type: integer description: Total number of active business licenses. minimum: 0 expiring_licenses_count: type: integer description: Number of licenses expiring within the next 90 days. minimum: 0 registered_agent_states: type: array description: List of states where the entity has an active registered agent. items: type: string pattern: '^[A-Z]{2}$' generated_at: type: string format: date-time description: ISO 8601 timestamp when this status was generated. ComplianceDeadline: type: object title: ComplianceDeadline description: A single upcoming or overdue compliance deadline. required: [type, state, due_date, status] properties: type: type: string description: Type of compliance requirement. enum: - annual_report - biennial_report - license_renewal - registered_agent - franchise_tax - other state: type: string description: Two-letter state code for the jurisdiction. pattern: '^[A-Z]{2}$' due_date: type: string format: date description: Date the compliance item is due. status: type: string description: Current status of the compliance item. enum: [pending, in_progress, overdue] description: type: string description: Human-readable description of the compliance requirement. filing_id: type: string description: Reference to the associated filing record, if applicable. license_id: type: string description: Reference to the associated license record, if applicable. Jurisdiction: type: object title: Jurisdiction description: A U.S. state jurisdiction with its compliance requirements. required: [state, name] properties: state: type: string description: Two-letter state code. pattern: '^[A-Z]{2}$' name: type: string description: Full name of the state or jurisdiction. annual_report_due: type: string description: Description of when annual reports are due (e.g., 'April 15 each year'). registered_agent_required: type: boolean description: Whether a registered agent is required for business entities in this state. supported_entity_types: type: array description: Entity types supported for registration in this jurisdiction. items: type: string enum: - corporation - llc - lp - llp - nonprofit filing_fees: type: object description: Map of entity type to annual report filing fee in USD. additionalProperties: type: number Order: type: object title: Order description: A compliance service order placed through Harbor Compliance. required: [id, entity_id, service_type, status] properties: id: type: string description: Unique identifier for the order. entity_id: type: string description: Identifier of the entity this order is for. service_type: type: string description: Type of compliance service ordered. enum: - registered_agent - annual_report_filing - license_application - license_renewal - formation - dissolution - foreign_qualification - other status: type: string description: Current status of the order. enum: [pending, processing, completed, cancelled] description: type: string description: Human-readable description of the ordered service. price: type: number description: Price of the service order in USD. reference_id: type: string description: >- Reference identifier linking this order to a related resource (e.g., license ID or filing ID). documents: type: array description: Documents produced or required for this order. items: $ref: '#/components/schemas/Document' created_at: type: string format: date-time description: ISO 8601 timestamp when the order was placed. updated_at: type: string format: date-time description: ISO 8601 timestamp of the last status update. completed_at: type: string format: date-time description: ISO 8601 timestamp when the order was completed, if applicable. Address: type: object title: Address description: A postal address. required: [street1, city, state, zip] properties: street1: type: string description: Primary street address line. street2: type: string description: Secondary street address line (suite, unit, etc.). city: type: string description: City name. state: type: string description: Two-letter state code. pattern: '^[A-Z]{2}$' zip: type: string description: ZIP or postal code. pattern: '^\d{5}(-\d{4})?$' country: type: string description: ISO 3166-1 alpha-2 country code. default: US Officer: type: object title: Officer description: An officer, director, or member of a business entity. required: [name, title] properties: name: type: string description: Full legal name of the officer. title: type: string description: Title or role of the officer (e.g., President, Secretary, Manager). address: $ref: '#/components/schemas/Address' Document: type: object title: Document description: A document associated with a filing or order. required: [id, name] properties: id: type: string description: Unique identifier for the document. name: type: string description: Display name of the document. type: type: string description: Document type (e.g., filed_report, confirmation, receipt). url: type: string format: uri description: URL to download or view the document. created_at: type: string format: date-time description: ISO 8601 timestamp when the document was created. PaginationMeta: type: object title: PaginationMeta description: Pagination metadata included with list responses. properties: total: type: integer description: Total number of records matching the query. page: type: integer description: Current page number. per_page: type: integer description: Number of records per page. total_pages: type: integer description: Total number of pages available. Error: type: object title: Error description: Error response returned when a request fails. required: [code, message] properties: code: type: string description: Machine-readable error code. message: type: string description: Human-readable description of the error. details: type: array description: Additional details about specific validation errors. items: type: object properties: field: type: string description: The field that caused the error. message: type: string description: Description of the field-level error.