Prepared for NestDash, Thursday April 30 call

VetFlow API Docs

Integration reference for VetScore, applicant scraping, and white-label deployment. This page reflects the current partner payloads available on https://vetflow.nanocorp.app.

Base URL

https://vetflow.nanocorp.app

Partner Contact

alex@vetflow.com

Updated

April 29, 2026

Endpoint

VetScore API

Use `POST /api/free-screening` to submit an applicant and property pair and receive a first-pass VetScore, recommendation, and supporting risk signals. Reuse the returned `propertyId` when screening multiple applicants for the same unit.

Method: POST

Path: /api/free-screening

Content-Type: application/json

Request Body

NestDash can map the full applicant and property intake form directly into this payload.

FieldTypeRequiredDescription
emailstringYesLandlord or operator email used to deliver the result and create the lead record.
applicantNamestringRecommendedApplicant full name shown in the VetScore result. If omitted, VetFlow falls back to "Applicant".
applicantEmailstringYesApplicant email used for identity matching and duplicate-screen prevention within a property.
applicantDobstring (YYYY-MM-DD)YesApplicant date of birth in ISO date format.
applicantAddressstringYesApplicant current street address.
applicantCitystringYesApplicant current city.
applicantStatestringYesTwo-letter US state code, for example `TX` or `OH`.
applicantPostalCodestringYesUS ZIP code, `12345` or `12345-6789`.
propertyAddressstringYesRental property street address.
propertyCitystringYesRental property city.
propertyStatestringYesTwo-letter US state code for the property.
propertyPostalCodestringYesProperty ZIP code.
monthlyRentintegerYesMonthly rent in USD. Current validation minimum is `300`.
monthlyIncomeintegerYesMonthly applicant income in USD. Current validation minimum is `1000`.
propertyIdstring (UUID)OptionalProperty comparison key. Reuse the same `propertyId` to screen and rank multiple applicants for one property.

Response Envelope

FieldTypeRequiredDescription
okbooleanAlwaysTrue when the request completed successfully.
existingRequestbooleanAlwaysTrue when the applicant was already screened for the same property and VetFlow returned the saved result.
messagestringAlwaysHuman-readable summary for operators or logs.
resultobjectAlwaysVetScore outcome payload described below.

VetScore Result Fields

The current breakdown is returned through `factors` plus the verified credit, eviction, criminal, and provider score fields below.

FieldTypeRequiredDescription
propertyIdstring (UUID)AlwaysProperty grouping key returned by VetFlow.
applicantNamestringAlwaysApplicant name displayed on the VetScore result.
vetScoreintegerAlwaysComposite VetScore from `0` to `100`.
recommendationstringAlwaysPlain-English recommendation, for example approval or manual review.
tierLabelstringAlwaysHigh-level fit label for the applicant profile.
factorsstring[]AlwaysShort explanation list that acts as the score breakdown returned today.
screeningSourceLabelstringAlwaysLabel describing the scoring or screening source used by VetFlow.
verificationStatus`verified` | `mock`AlwaysWhether the provider response is live-verified or currently running in mock mode.
screeningReportStatusstringAlwaysUpstream screening report status, for example `COMPLETE`.
verifiedCreditScoreinteger | nullAlwaysVerified or estimated credit score when available.
verifiedCreditBandstringAlwaysNormalized band used in the score: `760_plus`, `700_759`, `640_699`, `580_639`, or `below_580`.
verifiedCreditLabelstring | nullAlwaysReadable label for the credit outcome, such as `Good`.
verifiedEvictionRisk`clear` | `review` | `hit`AlwaysEviction-risk flag in the VetScore breakdown.
verifiedCriminalRisk`clear` | `review` | `hit`AlwaysBackground-risk flag in the VetScore breakdown.
providerScoreinteger | nullAlwaysUpstream provider score when available.
providerScoreLabelstring | nullAlwaysReadable provider score label, such as `Strong` or `Moderate`.

Example Request

cURLExample
curl -X POST "https://vetflow.nanocorp.app/api/free-screening" \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_PARTNER_KEY" \
  -d '{
    "email": "ops@nestdash.com",
    "applicantName": "Jordan Lee",
    "applicantEmail": "jordan.lee@example.com",
    "applicantDob": "1993-08-14",
    "applicantAddress": "1824 Willow Ave",
    "applicantCity": "Columbus",
    "applicantState": "OH",
    "applicantPostalCode": "43215",
    "propertyAddress": "900 Summit St Apt 4B",
    "propertyCity": "Columbus",
    "propertyState": "OH",
    "propertyPostalCode": "43215",
    "monthlyRent": 1800,
    "monthlyIncome": 6400
  }'

Example Response

JSONExample
{
  "ok": true,
  "existingRequest": false,
  "message": "Your VetScore is ready. Review the first-pass summary below.",
  "result": {
    "propertyId": "b6f30b02-1ba6-4f08-ae1f-f96e8c45f90d",
    "applicantName": "Jordan Lee",
    "vetScore": 82,
    "recommendation": "Approve with standard deposit.",
    "tierLabel": "Strong fit",
    "factors": [
      "3.6x income-to-rent coverage stood out",
      "Verified 742 credit lifted the profile",
      "Clear eviction screening helped this applicant"
    ],
    "screeningSourceLabel": "VetFlow pre-screening profile",
    "verificationStatus": "mock",
    "screeningReportStatus": "COMPLETE",
    "verifiedCreditScore": 742,
    "verifiedCreditBand": "700_759",
    "verifiedCreditLabel": "Good",
    "verifiedEvictionRisk": "clear",
    "verifiedCriminalRisk": "clear",
    "providerScore": 84,
    "providerScoreLabel": "Strong"
  }
}

Authentication

Partner authentication is documented as an API-key header: send x-api-key on every request. VetFlow will issue a dedicated key to NestDash before production launch.

Current status: the public partner docs reflect the production plan, while pilot access is still coordinated directly with VetFlow. NestDash should build against the header now so no integration changes are needed when enforcement is enabled.

Endpoint

Scraper API

Use `POST /api/scrape` to enrich a target market with current rental or applicant-style leads from supported sources. VetFlow returns normalized city metadata, persisted lead records, and non-fatal scrape warnings.

Method: POST

Path: /api/scrape

Sources: craigslist, zillow, or both

Request Schema

FieldTypeRequiredDescription
citystringYesTarget market, for example `Columbus` or `Columbus, OH`. VetFlow normalizes this before scraping.
source`craigslist` | `zillow` | `both`YesRequested lead source or combined scrape mode.

Response Envelope

FieldTypeRequiredDescription
okbooleanAlwaysTrue when the scrape request completed successfully.
citystringAlwaysNormalized market label returned by VetFlow.
leadsScrapedLead[]AlwaysPersisted lead records returned from the selected source(s).
warningsScrapeWarning[]AlwaysNon-fatal scrape warnings, typically used when a source is partially blocked or returns no parsable data.

Lead Object

FieldTypeRequiredDescription
idstringAlwaysVetFlow database identifier for the stored lead.
citystringAlwaysNormalized city or market label.
source`craigslist` | `zillow`AlwaysSource that produced the lead.
namestring | nullAlwaysLead or listing title when available.
contactstring | nullAlwaysPublic contact details when they can be extracted.
urlstringAlwaysSource URL for the lead.
rawDataobjectAlwaysUnmodified structured scrape payload retained for downstream mapping.
scrapedAtstring (ISO timestamp)AlwaysTimestamp when VetFlow stored or refreshed the lead.

Warning Object

FieldTypeRequiredDescription
source`craigslist` | `zillow`AlwaysSource that generated the warning.
messagestringAlwaysHuman-readable warning text for observability and fallback handling.

Example Request

cURLExample
curl -X POST "https://vetflow.nanocorp.app/api/scrape" \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_PARTNER_KEY" \
  -d '{
    "city": "Columbus, OH",
    "source": "both"
  }'

Example Response

JSONExample
{
  "ok": true,
  "city": "Columbus, OH",
  "leads": [
    {
      "id": "8d2477df-3ac4-4f3e-9730-98674fe4a31d",
      "city": "Columbus, OH",
      "source": "craigslist",
      "name": "2 bed / 1 bath duplex ready now",
      "contact": "614-555-0139",
      "url": "https://columbus.craigslist.org/apa/d/example-listing/1234567890.html",
      "rawData": {
        "title": "2 bed / 1 bath duplex ready now",
        "postedAt": "2026-04-29T14:08:00.000Z"
      },
      "scrapedAt": "2026-04-29T14:09:12.841Z"
    }
  ],
  "warnings": [
    {
      "source": "zillow",
      "message": "Zillow returned anti-bot protection for this market; no leads were parsed."
    }
  ]
}

Deployment

White-label & Integration Notes

NestDash can integrate VetScore in two practical ways: a fast hosted embed for near-term launch, or an API-first implementation for deeper product ownership.

Option 1

Hosted iframe

Fastest path for a pilot. VetFlow can host the screening experience and NestDash can embed it in an iframe or modal container inside its existing landlord workflow. This keeps score logic on the VetFlow side and minimizes frontend work.

Option 2

API-first

Best fit when NestDash wants full control of UI and data orchestration. Collect applicant and property data in NestDash, call `POST /api/free-screening`, then render the returned VetScore, factors, and recommendation directly in the NestDash product.

Webhooks roadmap

Webhook delivery is on the near-term partner roadmap for asynchronous events such as screening completion, rescore, and scrape-job completion. The intended model is a partner-managed HTTPS endpoint with signed event delivery and retry support.

Today, the recommended integration is synchronous request/response. Once webhooks are live, NestDash will be able to receive events without polling and update its UI automatically.

Commercial

Rev-share Program

VetFlow offers a partner rev-share for referred conversions.

NestDash can enroll in a 20% to 30% revenue share on referred conversions. To activate the program, contact alex@vetflow.com.