Find, compare and contact licensed U.S. lawyers from public bar data. Not legal advice.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Latest availability lawyers have reported or confirmed to ESQ Matching Engine, with last-checked time and certainty (reported, tentative, confirmed). There is no live calendar access.
Latest acceptable consultation date
Latest availability lawyers have reported or confirmed to ESQ Matching Engine, with last-checked time and certainty (reported, tentative, confirmed). There is no live calendar access.
| Argument | Type | Description |
|---|---|---|
| time_zone | string | |
| wanted_by | string | Latest acceptable consultation date |
| attorney_ids* | array | |
| appointment_type | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"attorney_ids"
],
"properties": {
"time_zone": {
"type": "string",
"maxLength": 60
},
"wanted_by": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Latest acceptable consultation date"
},
"attorney_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 10,
"minItems": 1
},
"appointment_type": {
"enum": [
"in_person",
"phone",
"video",
"any"
],
"type": "string"
}
}
}Compare 2 to 5 lawyers returned by ESQ Matching Engine: practice fit, location, years licensed, fees, availability, verification gaps and trade-offs. Pass match_id to use the user's criteria.
| Argument | Type | Description |
|---|---|---|
| criteria | array | |
| match_id | string | The match_id from find_attorneys, so comparisons use the same criteria |
| priorities | array | What matters most, in order. Shifts ranking weights. |
| attorney_ids* | array |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"attorney_ids"
],
"properties": {
"criteria": {
"type": "array",
"items": {
"enum": [
"price",
"timing",
"experience",
"location",
"practice_fit",
"languages",
"verification"
],
"type": "string"
},
"maxItems": 7
},
"match_id": {
"type": "string",
"maxLength": 40,
"description": "The match_id from find_attorneys, so comparisons use the same criteria"
},
"priorities": {
"type": "array",
"items": {
"enum": [
"price",
"speed",
"experience",
"proximity"
],
"type": "string"
},
"maxItems": 4,
"description": "What matters most, in order. Shifts ranking weights."
},
"attorney_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 5,
"minItems": 2
}
}
}Fee information for a matter type or a specific lawyer, labeled as published fees, confirmed quotes or sourced market figures. Says plainly when data is insufficient instead of guessing. Not a quote.
| Argument | Type | Description |
|---|---|---|
| scope | string | |
| state | string | US state, two-letter code or name, e.g. CA or California |
| budget_max | number | Total budget the user mentioned, in US dollars |
| attorney_id | string | |
| description | string | Short description of the legal need in the user's words. Used only to pick a practice area; not stored. |
| practice_area | string | |
| billing_preference | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"scope": {
"enum": [
"consultation_only",
"limited_scope",
"full_representation",
"unknown"
],
"type": "string"
},
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "US state, two-letter code or name, e.g. CA or California"
},
"budget_max": {
"type": "number",
"maximum": 10000000,
"minimum": 0,
"description": "Total budget the user mentioned, in US dollars"
},
"attorney_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"description": {
"type": "string",
"maxLength": 2000,
"description": "Short description of the legal need in the user's words. Used only to pick a practice area; not stored."
},
"practice_area": {
"type": "string",
"maxLength": 80
},
"billing_preference": {
"enum": [
"hourly",
"flat_fee",
"contingency",
"retainer",
"any"
],
"type": "string"
}
}
}Find licensed lawyers for a matter and rank them by practice-area fit, location, years licensed, timing, price and preferences, with plain-language reasons, data sources and gaps. Returns up to 5 by default, or an honest no-match. Not legal advice.
| Argument | Type | Description |
|---|---|---|
| zip | string | 5-digit ZIP code, only if the user agreed to share it |
| city | string | |
| court | string | |
| limit | integer | |
| state | string | US state, two-letter code or name, e.g. CA or California |
| county | string | |
| urgency | string | |
| category | string | |
| languages | array | |
| remote_ok | boolean | User is willing to work with a lawyer remotely (phone or video) anywhere in the state |
| budget_max |
Public matching profile for one lawyer by attorney_id: license and its source, practice areas, service area, fees, availability, languages and data freshness.
| Argument | Type | Description |
|---|---|---|
| attorney_id* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"attorney_id"
],
"properties": {
"attorney_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
}
}Given what is known about a legal matter, list the missing details that would improve a lawyer match and the questions to ask. Does not answer the legal question.
| Argument | Type | Description |
|---|---|---|
| zip | string | 5-digit ZIP code, only if the user agreed to share it |
| city | string | |
| court | string | |
| state | string | US state, two-letter code or name, e.g. CA or California |
| county | string | |
| urgency | string | |
| category | string | |
| languages | array | |
| remote_ok | boolean | User is willing to work with a lawyer remotely (phone or video) anywhere in the state |
| budget_max | number | Total budget the user mentioned, in US dollars |
Current status of an introduction: whether it was sent, the lawyer's response, and whether a consultation is requested, tentative, confirmed, cancelled or completed. Needs the introduction's status_token.
| Argument | Type | Description |
|---|---|---|
| referral_id* | string | |
| status_token | string | The status_token returned when the introduction was created |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"referral_id"
],
"properties": {
"referral_id": {
"type": "string",
"pattern": "^ref_[A-Za-z0-9_-]{8,40}$"
},
"status_token": {
"type": "string",
"maxLength": 100,
"minLength": 20,
"description": "The status_token returned when the introduction was created"
}
}
}Record a client-authorized introduction to ONE lawyer. Call only after the user has seen the lawyer's name, the exact details to be shared, and explicitly agreed. Shares only the fields the user authorized. Returns a referral id and a private status token.
| Argument | Type | Description |
|---|---|---|
| state* | string | US state, two-letter code or name, e.g. CA or California |
| consent* | object | |
| contact* | object | |
| match_id | string | |
| attorney_id* | string | |
| practice_area | string | |
| matter_summary* | string | Summary the USER read and approved for sharing with this lawyer |
| idempotency_key | string | Same key on retries prevents a duplicate introduction |
Optional 1-5 ratings on match relevance, lawyer responsiveness, pricing and availability accuracy, satisfaction, and whether the lawyer was hired. No case details.
| Argument | Type | Description |
|---|---|---|
| comment | string | Optional. Do not include case details. |
| match_id | string | |
| retained | string | |
| relevance | integer | |
| referral_id | string | |
| status_token | string | |
| responsiveness | integer | |
| pricing_accuracy | integer | |
| satisfaction_match | integer | |
| satisfaction_process | integer | |
| availability_accuracy | integer |
Save or change matching criteria (location, budget, timing, practice area, language, priorities) for this conversation. No personal contact details. Deleted automatically after 24 hours.
| Argument | Type | Description |
|---|---|---|
| criteria* | object | Fields to set or change. Do not include names, emails or phone numbers. |
| clear_fields | array | |
| preference_set_id | string | Omit to create a new set |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"criteria"
],
"properties": {
"criteria": {
"type": "object",
"properties": {
"zip": {
"type": "string",
"pattern": "^\\d{5}$",
"description": "5-digit ZIP code, only if the user agreed to share it"
},
"city": {
"type": "string",
"maxLength": 80
},
"court": {
"type": "string",
"maxLength": 120
},
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "US state, two-letter code or name, e.g. CA or California"
},
"county": {
"type": "string",
"maxLength": 80
},
"urgency": {
"enum": [
"emergency",
"critical_deadline",
"soon",
"routine",
"long_term"
],
"type": "string"
},
"category": {
"enum": [
"civil",
"criminal",
"administrative",
"transactional",
"family",
"other"
],
"type": "string"
},
"languages": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 5
},
"remote_ok": {
"type": "boolean",
"description": "User is willing to work with a lawyer remotely (phone or video) anywhere in the state"
},
"budget_max": {
"type": "number",
"maximum": 10000000,
"minimum": 0,
"description": "Total budget the user mentioned, in US dollars"
},
"budget_min": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"priorities": {
"type": "array",
"items": {
"enum": [
"price",
"speed",
"experience",
"proximity"
],
"type": "string"
},
"maxItems": 4,
"description": "What matters most, in order. Shifts ranking weights."
},
"client_side": {
"enum": [
"tenant",
"landlord",
"employee",
"employer",
"plaintiff",
"defendant",
"buyer",
"seller",
"other",
"unknown"
],
"type": "string",
"description": "Which side the user is on. ESQ Matching Engine has no record of which side lawyers usually represent, so results carry a warning to ask."
},
"description": {
"type": "string",
"maxLength": 2000,
"description": "Short description of the legal need in the user's words. Used only to pick a practice area; not stored."
},
"matter_type": {
"type": "string",
"maxLength": 80
},
"communication": {
"enum": [
"phone",
"email",
"video",
"in_person",
"any"
],
"type": "string"
},
"deadline_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "A deadline the USER reported (hearing, filing, response). ESQ Matching Engine does not verify or calculate deadlines."
},
"deadline_type": {
"enum": [
"hearing",
"filing",
"response",
"other"
],
"type": "string"
},
"practice_area": {
"type": "string",
"maxLength": 80,
"description": "Practice area, e.g. 'Landlord-Tenant Law', 'Family Law', 'Criminal Law'"
},
"service_needed": {
"enum": [
"advice_consultation",
"negotiation",
"document_preparation",
"litigation",
"ongoing_representation",
"unknown"
],
"type": "string"
},
"consultation_by": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Latest date the user wants a first consultation"
},
"procedural_stage": {
"enum": [
"not_started",
"pre_filing",
"filed",
"hearing_scheduled",
"trial",
"post_judgment",
"appeal",
"transaction",
"unknown"
],
"type": "string"
},
"subpractice_area": {
"type": "string",
"maxLength": 80
},
"language_required": {
"type": "boolean",
"description": "True if the language is essential, not just preferred"
},
"billing_preference": {
"enum": [
"hourly",
"flat_fee",
"contingency",
"retainer",
"any"
],
"type": "string"
},
"min_years_licensed": {
"type": "integer",
"maximum": 60,
"minimum": 0
},
"accessibility_needs": {
"type": "string",
"maxLength": 200
},
"payment_plan_needed": {
"type": "boolean"
},
"exclude_attorney_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 50
},
"max_consultation_fee": {
"type": "number",
"maximum": 10000,
"minimum": 0,
"description": "0 means the user wants a free first consultation"
},
"reduced_fee_eligible": {
"type": "boolean",
"description": "User may qualify for pro bono, legal aid or reduced fees"
},
"representation_start_by": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date as YYYY-MM-DD"
},
"include_unconfirmed_practice_area": {
"type": "boolean",
"description": "Also include licensed lawyers whose practice areas are not on record (labeled clearly)"
}
},
"description": "Fields to set or change. Do not include names, emails or phone numbers.",
"additionalProperties": false
},
"clear_fields": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 30
},
"preference_set_id": {
"type": "string",
"maxLength": 40,
"description": "Omit to create a new set"
}
}
}| number |
| Total budget the user mentioned, in US dollars |
| budget_min | number |
| priorities | array | What matters most, in order. Shifts ranking weights. |
| client_side | string | Which side the user is on. ESQ Matching Engine has no record of which side lawyers usually represent, so results carry a warning to ask. |
| description | string | Short description of the legal need in the user's words. Used only to pick a practice area; not stored. |
| matter_type | string |
| communication | string |
| deadline_date | string | A deadline the USER reported (hearing, filing, response). ESQ Matching Engine does not verify or calculate deadlines. |
| deadline_type | string |
| practice_area | string | Practice area, e.g. 'Landlord-Tenant Law', 'Family Law', 'Criminal Law' |
| service_needed | string |
| consultation_by | string | Latest date the user wants a first consultation |
| procedural_stage | string |
| subpractice_area | string |
| attribution_token | string | Signed campaign/partner token issued by ESQ Matching Engine, if the user arrived through a partner link |
| language_required | boolean | True if the language is essential, not just preferred |
| preference_set_id | string | Saved criteria from update_matching_preferences |
| billing_preference | string |
| min_years_licensed | integer |
| accessibility_needs | string |
| payment_plan_needed | boolean |
| exclude_attorney_ids | array |
| max_consultation_fee | number | 0 means the user wants a free first consultation |
| reduced_fee_eligible | boolean | User may qualify for pro bono, legal aid or reduced fees |
| representation_start_by | string | Date as YYYY-MM-DD |
| include_unconfirmed_practice_area | boolean | Also include licensed lawyers whose practice areas are not on record (labeled clearly) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"zip": {
"type": "string",
"pattern": "^\\d{5}$",
"description": "5-digit ZIP code, only if the user agreed to share it"
},
"city": {
"type": "string",
"maxLength": 80
},
"court": {
"type": "string",
"maxLength": 120
},
"limit": {
"type": "integer",
"maximum": 10,
"minimum": 1
},
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "US state, two-letter code or name, e.g. CA or California"
},
"county": {
"type": "string",
"maxLength": 80
},
"urgency": {
"enum": [
"emergency",
"critical_deadline",
"soon",
"routine",
"long_term"
],
"type": "string"
},
"category": {
"enum": [
"civil",
"criminal",
"administrative",
"transactional",
"family",
"other"
],
"type": "string"
},
"languages": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 5
},
"remote_ok": {
"type": "boolean",
"description": "User is willing to work with a lawyer remotely (phone or video) anywhere in the state"
},
"budget_max": {
"type": "number",
"maximum": 10000000,
"minimum": 0,
"description": "Total budget the user mentioned, in US dollars"
},
"budget_min": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"priorities": {
"type": "array",
"items": {
"enum": [
"price",
"speed",
"experience",
"proximity"
],
"type": "string"
},
"maxItems": 4,
"description": "What matters most, in order. Shifts ranking weights."
},
"client_side": {
"enum": [
"tenant",
"landlord",
"employee",
"employer",
"plaintiff",
"defendant",
"buyer",
"seller",
"other",
"unknown"
],
"type": "string",
"description": "Which side the user is on. ESQ Matching Engine has no record of which side lawyers usually represent, so results carry a warning to ask."
},
"description": {
"type": "string",
"maxLength": 2000,
"description": "Short description of the legal need in the user's words. Used only to pick a practice area; not stored."
},
"matter_type": {
"type": "string",
"maxLength": 80
},
"communication": {
"enum": [
"phone",
"email",
"video",
"in_person",
"any"
],
"type": "string"
},
"deadline_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "A deadline the USER reported (hearing, filing, response). ESQ Matching Engine does not verify or calculate deadlines."
},
"deadline_type": {
"enum": [
"hearing",
"filing",
"response",
"other"
],
"type": "string"
},
"practice_area": {
"type": "string",
"maxLength": 80,
"description": "Practice area, e.g. 'Landlord-Tenant Law', 'Family Law', 'Criminal Law'"
},
"service_needed": {
"enum": [
"advice_consultation",
"negotiation",
"document_preparation",
"litigation",
"ongoing_representation",
"unknown"
],
"type": "string"
},
"consultation_by": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Latest date the user wants a first consultation"
},
"procedural_stage": {
"enum": [
"not_started",
"pre_filing",
"filed",
"hearing_scheduled",
"trial",
"post_judgment",
"appeal",
"transaction",
"unknown"
],
"type": "string"
},
"subpractice_area": {
"type": "string",
"maxLength": 80
},
"attribution_token": {
"type": "string",
"maxLength": 600,
"description": "Signed campaign/partner token issued by ESQ Matching Engine, if the user arrived through a partner link"
},
"language_required": {
"type": "boolean",
"description": "True if the language is essential, not just preferred"
},
"preference_set_id": {
"type": "string",
"maxLength": 40,
"description": "Saved criteria from update_matching_preferences"
},
"billing_preference": {
"enum": [
"hourly",
"flat_fee",
"contingency",
"retainer",
"any"
],
"type": "string"
},
"min_years_licensed": {
"type": "integer",
"maximum": 60,
"minimum": 0
},
"accessibility_needs": {
"type": "string",
"maxLength": 200
},
"payment_plan_needed": {
"type": "boolean"
},
"exclude_attorney_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 50
},
"max_consultation_fee": {
"type": "number",
"maximum": 10000,
"minimum": 0,
"description": "0 means the user wants a free first consultation"
},
"reduced_fee_eligible": {
"type": "boolean",
"description": "User may qualify for pro bono, legal aid or reduced fees"
},
"representation_start_by": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date as YYYY-MM-DD"
},
"include_unconfirmed_practice_area": {
"type": "boolean",
"description": "Also include licensed lawyers whose practice areas are not on record (labeled clearly)"
}
}
}| budget_min | number |
| priorities | array | What matters most, in order. Shifts ranking weights. |
| client_side | string | Which side the user is on. ESQ Matching Engine has no record of which side lawyers usually represent, so results carry a warning to ask. |
| description | string | Short description of the legal need in the user's words. Used only to pick a practice area; not stored. |
| matter_type | string |
| communication | string |
| deadline_date | string | A deadline the USER reported (hearing, filing, response). ESQ Matching Engine does not verify or calculate deadlines. |
| deadline_type | string |
| practice_area | string | Practice area, e.g. 'Landlord-Tenant Law', 'Family Law', 'Criminal Law' |
| service_needed | string |
| consultation_by | string | Latest date the user wants a first consultation |
| procedural_stage | string |
| subpractice_area | string |
| language_required | boolean | True if the language is essential, not just preferred |
| billing_preference | string |
| min_years_licensed | integer |
| accessibility_needs | string |
| payment_plan_needed | boolean |
| exclude_attorney_ids | array |
| max_consultation_fee | number | 0 means the user wants a free first consultation |
| reduced_fee_eligible | boolean | User may qualify for pro bono, legal aid or reduced fees |
| representation_start_by | string | Date as YYYY-MM-DD |
| include_unconfirmed_practice_area | boolean | Also include licensed lawyers whose practice areas are not on record (labeled clearly) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"zip": {
"type": "string",
"pattern": "^\\d{5}$",
"description": "5-digit ZIP code, only if the user agreed to share it"
},
"city": {
"type": "string",
"maxLength": 80
},
"court": {
"type": "string",
"maxLength": 120
},
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "US state, two-letter code or name, e.g. CA or California"
},
"county": {
"type": "string",
"maxLength": 80
},
"urgency": {
"enum": [
"emergency",
"critical_deadline",
"soon",
"routine",
"long_term"
],
"type": "string"
},
"category": {
"enum": [
"civil",
"criminal",
"administrative",
"transactional",
"family",
"other"
],
"type": "string"
},
"languages": {
"type": "array",
"items": {
"type": "string",
"maxLength": 40
},
"maxItems": 5
},
"remote_ok": {
"type": "boolean",
"description": "User is willing to work with a lawyer remotely (phone or video) anywhere in the state"
},
"budget_max": {
"type": "number",
"maximum": 10000000,
"minimum": 0,
"description": "Total budget the user mentioned, in US dollars"
},
"budget_min": {
"type": "number",
"maximum": 10000000,
"minimum": 0
},
"priorities": {
"type": "array",
"items": {
"enum": [
"price",
"speed",
"experience",
"proximity"
],
"type": "string"
},
"maxItems": 4,
"description": "What matters most, in order. Shifts ranking weights."
},
"client_side": {
"enum": [
"tenant",
"landlord",
"employee",
"employer",
"plaintiff",
"defendant",
"buyer",
"seller",
"other",
"unknown"
],
"type": "string",
"description": "Which side the user is on. ESQ Matching Engine has no record of which side lawyers usually represent, so results carry a warning to ask."
},
"description": {
"type": "string",
"maxLength": 2000,
"description": "Short description of the legal need in the user's words. Used only to pick a practice area; not stored."
},
"matter_type": {
"type": "string",
"maxLength": 80
},
"communication": {
"enum": [
"phone",
"email",
"video",
"in_person",
"any"
],
"type": "string"
},
"deadline_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "A deadline the USER reported (hearing, filing, response). ESQ Matching Engine does not verify or calculate deadlines."
},
"deadline_type": {
"enum": [
"hearing",
"filing",
"response",
"other"
],
"type": "string"
},
"practice_area": {
"type": "string",
"maxLength": 80,
"description": "Practice area, e.g. 'Landlord-Tenant Law', 'Family Law', 'Criminal Law'"
},
"service_needed": {
"enum": [
"advice_consultation",
"negotiation",
"document_preparation",
"litigation",
"ongoing_representation",
"unknown"
],
"type": "string"
},
"consultation_by": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Latest date the user wants a first consultation"
},
"procedural_stage": {
"enum": [
"not_started",
"pre_filing",
"filed",
"hearing_scheduled",
"trial",
"post_judgment",
"appeal",
"transaction",
"unknown"
],
"type": "string"
},
"subpractice_area": {
"type": "string",
"maxLength": 80
},
"language_required": {
"type": "boolean",
"description": "True if the language is essential, not just preferred"
},
"billing_preference": {
"enum": [
"hourly",
"flat_fee",
"contingency",
"retainer",
"any"
],
"type": "string"
},
"min_years_licensed": {
"type": "integer",
"maximum": 60,
"minimum": 0
},
"accessibility_needs": {
"type": "string",
"maxLength": 200
},
"payment_plan_needed": {
"type": "boolean"
},
"exclude_attorney_ids": {
"type": "array",
"items": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"maxItems": 50
},
"max_consultation_fee": {
"type": "number",
"maximum": 10000,
"minimum": 0,
"description": "0 means the user wants a free first consultation"
},
"reduced_fee_eligible": {
"type": "boolean",
"description": "User may qualify for pro bono, legal aid or reduced fees"
},
"representation_start_by": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Date as YYYY-MM-DD"
},
"include_unconfirmed_practice_area": {
"type": "boolean",
"description": "Also include licensed lawyers whose practice areas are not on record (labeled clearly)"
}
}
}| attribution_token |
| string |
| Signed campaign/partner token issued by ESQ Matching Engine, if the user arrived through a partner link |
| preferred_timeframe | string |
| preferred_contact_method* | string |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"attorney_id",
"state",
"contact",
"matter_summary",
"preferred_contact_method",
"consent"
],
"properties": {
"state": {
"type": "string",
"maxLength": 40,
"minLength": 2,
"description": "US state, two-letter code or name, e.g. CA or California"
},
"consent": {
"type": "object",
"required": [
"confirmed",
"recipient_attorney_id",
"fields_authorized"
],
"properties": {
"confirmed": {
"type": "boolean",
"const": true,
"description": "Must be true only after the user explicitly agreed to share the listed fields with this lawyer"
},
"user_statement": {
"type": "string",
"maxLength": 300,
"description": "The user's own words of consent, if available"
},
"fields_authorized": {
"type": "array",
"items": {
"enum": [
"name",
"email",
"phone",
"matter_summary",
"preferred_timeframe"
],
"type": "string"
},
"minItems": 1
},
"recipient_attorney_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
"description": "Must equal attorney_id: the user agreed to share with THIS lawyer"
}
},
"additionalProperties": false
},
"contact": {
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 120
},
"email": {
"type": "string",
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$",
"maxLength": 200
},
"phone": {
"type": "string",
"pattern": "^[0-9+().\\- ]{7,25}$"
}
},
"additionalProperties": false
},
"match_id": {
"type": "string",
"maxLength": 40
},
"attorney_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"practice_area": {
"type": "string",
"maxLength": 80
},
"matter_summary": {
"type": "string",
"maxLength": 2000,
"minLength": 10,
"description": "Summary the USER read and approved for sharing with this lawyer"
},
"idempotency_key": {
"type": "string",
"maxLength": 100,
"minLength": 8,
"description": "Same key on retries prevents a duplicate introduction"
},
"attribution_token": {
"type": "string",
"maxLength": 600,
"description": "Signed campaign/partner token issued by ESQ Matching Engine, if the user arrived through a partner link"
},
"preferred_timeframe": {
"type": "string",
"maxLength": 120
},
"preferred_contact_method": {
"enum": [
"email",
"phone",
"either"
],
"type": "string"
}
}
}| satisfaction_attorney | integer |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"comment": {
"type": "string",
"maxLength": 500,
"description": "Optional. Do not include case details."
},
"match_id": {
"type": "string",
"maxLength": 40
},
"retained": {
"enum": [
"yes",
"no",
"undecided"
],
"type": "string"
},
"relevance": {
"type": "integer",
"maximum": 5,
"minimum": 1
},
"referral_id": {
"type": "string",
"maxLength": 40
},
"status_token": {
"type": "string",
"maxLength": 100
},
"responsiveness": {
"type": "integer",
"maximum": 5,
"minimum": 1
},
"pricing_accuracy": {
"type": "integer",
"maximum": 5,
"minimum": 1
},
"satisfaction_match": {
"type": "integer",
"maximum": 5,
"minimum": 1
},
"satisfaction_process": {
"type": "integer",
"maximum": 5,
"minimum": 1
},
"availability_accuracy": {
"type": "integer",
"maximum": 5,
"minimum": 1
},
"satisfaction_attorney": {
"type": "integer",
"maximum": 5,
"minimum": 1
}
}
}