Discover/Dwpv API
live

Dwpv APIdwpv.com ↗

Search and filter Davies Ward Phillips & Vineberg lawyers and professionals via the dwpv.com Our People directory. Returns names, titles, offices, and practice areas.

Endpoint health
monitored
search_people
Checks pendingself-healing
Endpoints
1
Updated
3h ago

What is the Dwpv API?

The dwpv.com API exposes a single search_people endpoint that returns structured records from the Davies Ward Phillips & Vineberg Our People directory, covering each professional's name, position, office locations, practice area expertise, law school, and year of call. Responses include up to 100 records per page and support an all mode that collapses the full filtered roster into one response, making bulk extraction straightforward without manual pagination.

This call costs5 credits / call— charged only on success
Try it
When true, every page of the filtered roster is fetched internally and returned in a single response; page and page_size are ignored.
1-based page number of the filtered roster. Ignored when all=true.
Result ordering, one of the directory's Sort By options.
Free-text keyword searched against the directory (name and biography). Omitted = no keyword filter.
Office facet label exactly as the directory spells it (with accents). Comma-separated values are OR-ed. Confirmed this run: Montréal, Toronto. Omitted = every office.
Position facet as labelled in the directory's Position filter. Comma-separated values are OR-ed (e.g. Partner,Counsel). Confirmed values this run: Lawyer (all lawyer positions), Partner. Other labels shown in the directory (Associate, Counsel, Student, Law Clerk / Paralegal, Other Professional, Affiliated Scholar) are forwarded as-is; an unknown label yields an empty result.
Practice-area (Expertise facet) label as shown in the directory, e.g. Tax. Comma-separated values are OR-ed. Omitted = every practice area.
People per page, 1 to 100. Ignored when all=true.
Law School facet label as shown in the directory (e.g. McGill University). Comma-separated values are OR-ed. Omitted = no law-school filter.
Four-digit year of call (bar admission year) as listed in the directory's Year of Call facet, e.g. 2015. Comma-separated years are OR-ed. Omitted = every year.
→ api.parse.bot/scraper/52828a75-aee6-46e4-8618-c93135d36c28/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/52828a75-aee6-46e4-8618-c93135d36c28/search_people?all=true&office=Montr%C3%A9al&position=Lawyer' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace dwpv-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: Davies Ward Phillips & Vineberg people directory — bounded, re-runnable."""
from parse_apis.dwpv_com_api import Davies, Sort, InputFormatInvalid

client = Davies()

# List Montréal partners sorted alphabetically, capped at 5.
for person in client.people.search(office="Montréal", position="Partner", sort=Sort.TITLE_ASCENDING, limit=5):
    schools = ", ".join(person.law_schools) if person.law_schools else "n/a"
    print(f"{person.name} — {person.position} | Schools: {schools}")

# Drill into the first tax-expertise associate to read their full bio.
try:
    associate = client.people.search(expertise="Tax", position="Associate", limit=1).first()
except InputFormatInvalid as e:
    print(f"Invalid input: {e.message}")
    associate = None

if associate is not None:
    areas = ", ".join(associate.expertise)
    print(f"\n{associate.name} ({areas})")
    print(f"  Years of call: {associate.years_of_call}")
    print(f"  Bio: {associate.description or 'No description available'}")
    print(f"  Profile: {associate.profile_url}")

print("\nexercised: people.search (filtered list / drill-down)")
All endpoints · 1 totalmissing one? ·

Returns professionals from the firm's Our People directory, one record per person, sorted by surname A-Z unless another sort is chosen. Filters mirror the directory's facets (position, office, expertise, law school, year of call) and a free-text keyword; a filter value that matches no facet member yields an empty result (total 0), never the unfiltered roster. Each record carries the person's display name, position title, office list, practice-area (expertise) list, law schools and years_of_call (the year(s) of bar admission shown as the directory's 'Year of Call' facet; the list is empty for people the directory does not tag with a year, e.g. students). By default results are paginated: page (1-based) and page_size (1-100, default 12) select a slice of the filtered roster and has_more reports whether later pages exist. When all=true the endpoint walks every page internally and returns the entire filtered roster in one response (page and page_size are ignored and echoed as null; has_more is false once the roster is complete). Cost: one directory request per 100 people plus a bounded set of additional lookups (batched, at most one per distinct year of call present in the filtered set) to attach years_of_call; supplying year_of_call skips those lookups. Invalid sort, page or page_size values return a stale_input error before any request is made.

Input
ParamTypeDescription
allbooleanWhen true, every page of the filtered roster is fetched internally and returned in a single response; page and page_size are ignored.
pageinteger1-based page number of the filtered roster. Ignored when all=true.
sortstringResult ordering, one of the directory's Sort By options.
querystringFree-text keyword searched against the directory (name and biography). Omitted = no keyword filter.
officestringOffice facet label exactly as the directory spells it (with accents). Comma-separated values are OR-ed. Confirmed this run: Montréal, Toronto. Omitted = every office.
positionstringPosition facet as labelled in the directory's Position filter. Comma-separated values are OR-ed (e.g. Partner,Counsel). Confirmed values this run: Lawyer (all lawyer positions), Partner. Other labels shown in the directory (Associate, Counsel, Student, Law Clerk / Paralegal, Other Professional, Affiliated Scholar) are forwarded as-is; an unknown label yields an empty result.
expertisestringPractice-area (Expertise facet) label as shown in the directory, e.g. Tax. Comma-separated values are OR-ed. Omitted = every practice area.
page_sizeintegerPeople per page, 1 to 100. Ignored when all=true.
law_schoolstringLaw School facet label as shown in the directory (e.g. McGill University). Comma-separated values are OR-ed. Omitted = no law-school filter.
year_of_callstringFour-digit year of call (bar admission year) as listed in the directory's Year of Call facet, e.g. 2015. Comma-separated years are OR-ed. Omitted = every year.
Response
{
  "type": "object",
  "fields": {
    "all": "boolean, echoes whether the full-roster mode was used",
    "page": "integer page number, or null when all=true",
    "items": "array of person records: id (directory item GUID), name, position (title string), offices (array of office names), expertise (array of practice-area names, de-duplicated), years_of_call (array of integer bar-admission years, empty when the directory has none), law_schools (array), is_student (boolean), description (short bio line or null), profile_url (public profile page)",
    "total": "integer, number of people in the filtered roster as reported by the directory",
    "has_more": "boolean, true when further pages of the filtered roster exist beyond this response",
    "returned": "integer, number of records in items",
    "page_size": "integer page size, or null when all=true"
  },
  "sample": {
    "data": {
      "all": false,
      "page": 1,
      "items": [
        {
          "id": "d996ae8d-ab51-4446-9800-be1999972a64",
          "name": "Noah Abitbol",
          "offices": [
            "Montréal"
          ],
          "position": "Associate",
          "expertise": [
            "Corporate",
            "Mergers and Acquisitions",
            "Private M&A"
          ],
          "is_student": false,
          "description": "Noah is developing a broad corporate practice.",
          "law_schools": [
            "Université de Montréal"
          ],
          "profile_url": "https://www.dwpv.com/our-people/noah-abitbol",
          "years_of_call": [
            2023
          ]
        },
        {
          "id": "20e8b4de-8b3d-41ac-aa60-b576f4abfef1",
          "name": "Jordan Altman",
          "offices": [
            "Montréal"
          ],
          "position": "Partner",
          "expertise": [
            "Corporate",
            "Mergers and Acquisitions",
            "Private M&A"
          ],
          "is_student": false,
          "description": "Jordan provides practical, innovative advice to clients on a broad spectrum of corporate transactions.",
          "law_schools": [
            "McGill University"
          ],
          "profile_url": "https://www.dwpv.com/our-people/jordan-altman",
          "years_of_call": [
            2015
          ]
        }
      ],
      "total": 117,
      "has_more": true,
      "returned": 12,
      "page_size": 12
    },
    "status": "success"
  }
}

About the Dwpv API

What the API Returns

The search_people endpoint returns an array of person records under the items field. Each record includes a unique directory id (GUID), name, position (title string, e.g. "Partner"), offices (array of office names), expertise (array of practice area labels), law school, and year(s) of call. The envelope also carries total (directory count for the active filter set), returned (records in this response), has_more (boolean for further pages), and echoed page, page_size, and all values.

Filtering and Pagination

Filters map directly to the directory's facets. position accepts labels such as Partner or Associate; office accepts accented names exactly as the directory spells them (e.g. Montréal); expertise matches practice-area labels like Tax or Capital Markets; query runs a free-text search against names and biographies. Multiple values for the same filter are comma-separated and OR-ed. Pagination is controlled with page and page_size (1–100); setting all=true overrides both and returns every matching record in a single response.

Sorting and Coverage

Results default to surname A–Z. The sort parameter accepts the same ordering options exposed by the directory's Sort By control. The API covers all professionals listed publicly in the Davies Our People directory across their Toronto, Montréal, and New York offices. Data reflects what the directory publishes per person — contact details such as direct phone numbers or email addresses are not part of the returned record set.

Reliability & maintenance

The Dwpv API is a managed, monitored endpoint for dwpv.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when dwpv.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official dwpv.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a structured roster of all Davies partners filtered by office (e.g. Montréal) for business development research
  • Pull every lawyer whose expertise includes a specific practice area such as Mergers & Acquisitions for competitive landscape analysis
  • Track changes in headcount by position over time by periodically querying position=Partner and comparing total
  • Populate a legal-industry database with law school and year-of-call data for attorney career-trajectory research
  • Identify overlap between two practice areas by querying expertise combinations across the full roster using all=true
  • Generate a filterable internal directory of Davies professionals for a client-facing portal or CRM integration
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does Davies (dwpv.com) have an official public developer API?+
No. Davies does not publish a public developer API for their people directory. The dwpv.com API on Parse provides structured access to that directory data.
What does the `all=true` parameter do, and when should I use it?+
When all=true, the API fetches every page of the filtered roster internally and returns all matching records in a single response. The page and page_size fields in the response are set to null. Use it when you need the complete filtered set — for example, all lawyers in a given practice area — and want to avoid writing pagination loops. For large unfiltered queries this will return more records per call, so paginated mode is preferable when you only need a subset.
What personal contact details are returned per professional?+
Each record includes name, position, offices, expertise, law school, and year(s) of call. Direct contact fields such as email addresses or phone numbers are not included in the returned data. The API covers what the public Our People directory exposes per profile listing.
Can I retrieve full biography text for individual lawyers?+
Not currently. The API returns the structured directory fields — name, position, offices, expertise, law school, and year of call — but does not return full biography prose. You can fork this API on Parse and revise it to add a profile-detail endpoint that returns the extended biography content.
How do I filter by multiple offices at once?+
Pass a comma-separated list in the office parameter, e.g. office=Toronto,Montréal. Values are OR-ed, so the response includes professionals from any of the listed offices. Office names must match the directory's spelling exactly, including accented characters.
Page content last updated . Spec covers 1 endpoint from dwpv.com.
Related APIs in B2b DirectorySee all →
millerthomson.com API
Access data from millerthomson.com.
lavery.ca API
Access detailed profiles of lawyers and legal professionals at Lavery, Québec's largest independent law firm, including their practice areas and bar admissions. Browse through the complete team directory with pagination to find the right legal expert for your needs.
dentons.com API
Search Dentons' Montréal legal professionals by their practice areas and bar admissions to find the right lawyer for your needs. Retrieve detailed profiles including each attorney's expertise and licensing information across multiple jurisdictions.
biggerpocket.com API
Search and connect with vetted real estate professionals from the BiggerPockets network, including agents, lenders, contractors, and property managers in your area. Find the right service providers for your investment needs by browsing detailed business profiles and contact information.
lawyers.com API
Search and discover lawyers and law firms with detailed profiles, client reviews, and practice area information. Find legal articles and featured firms by specialty to help you locate the right legal representation for your needs.
usreps.org API
Access data from usreps.org.
sra.org.uk API
Search for UK solicitors by name and retrieve their detailed registration information from the SRA register, including their SRA number and professional credentials. Browse through the complete solicitor directory to verify qualifications and find regulated legal professionals in the United Kingdom.
dnb.com API
Search millions of companies in Dun & Bradstreet's global business directory to find detailed company profiles and verify D-U-N-S numbers. Look up key business information like company details and identifiers to support due diligence, sales prospecting, and business intelligence needs.