Skip to main content

CoquiTitle API

Base URL: https://api.alianzacap.com

Authentication: Authorization: Bearer <access_token> (Auth0 JWT)

Case Management

Create Case

POST/coquititle/cases

Create a new title study case

{
"finca_id": "12345-F",
"property_address": "123 Calle Principal, San Juan",
"demarcacion_code": "BA0101",
"ocr_mode": "document_ai",
"extractor_model": "gemini-2.5-flash",
"report_model": "gemini-3-pro-preview"
}

OCR Mode Options:

ModeDescriptionEvidence Support
document_aiFull OCR with bounding boxes (default)Yes
native_page_textUses Document AI's document.textYes
direct_pdf_gemini_25Skip OCR, send PDFs to Gemini 2.5No
direct_pdf_gemini_3Skip OCR, send PDFs to Gemini 3.0No

Response (201):

{
"case_id": "550e8400-...",
"status": "pending",
"ocr_mode": "document_ai",
"extractor_model": "gemini-2.5-flash",
"report_model": "gemini-3-pro-preview"
}

List Cases

GET/coquititle/cases

List all cases with optional filtering

Query Parameters:

  • limit (int): Results per page (default: 20)
  • offset (int): Pagination offset
  • status (string): Filter by status

Get Case

GET/coquititle/cases/{id}

Get case details by ID

Document Upload

Generate Upload URL

POST/coquititle/cases/{id}/upload-url

Generate a presigned S3 URL for direct upload

{
"filename": "folio-karibe.pdf",
"content_type": "application/pdf"
}

Response:

{
"upload_url": "https://s3.amazonaws.com/...",
"doc_id": "...",
"s3_key": "uploads/{case_id}/folio-karibe.pdf"
}

Upload directly to S3:

curl -X PUT "$upload_url" \
-H "Content-Type: application/pdf" \
--data-binary @file.pdf

Processing

Trigger Processing

POST/coquititle/cases/{id}/process

Start the OCR → extraction → report pipeline

Results

Get Report

GET/coquititle/cases/{id}/report

Get the generated title study report

Response:

{
"report_json": {
"header": {
"finca_number": "5164",
"inscription_system": "karibe",
"demarcacion": "PA0101",
"registry_section": "de Guayama"
},
"boundaries": {
"norte": "con parcela numero 23",
"sur": "con Calle numero 4",
"este": "con parcela numero 25",
"oeste": "con parcela numero 19"
},
"description_prose": "RUSTICA: Parcela de terreno...",
"description_prose_annotated": "<span data-field=\"...\">...</span>...",
"ownership_prose": "Consta inscrito...",
"ownership_prose_annotated": "...<span data-field=\"titulares[0].name\">Juan Perez</span>...",
"encumbrances": {
"by_origin": [],
"direct": [],
"by_origin_free": true,
"direct_free": true
},
"evidence_sources": {
"titulares[0].name": [{
"doc_id": "...",
"page_no": 1,
"bboxes": [{"x": 0.1, "y": 0.2, "width": 0.05, "height": 0.02}],
"match_method": "exact",
"match_confidence": 1.0
}]
},
"evidence_summary": {
"total_fields": 32,
"fields_with_evidence": 29,
"coverage_pct": 91
}
}
}

Get Extraction Results

GET/coquititle/cases/{id}/extraction-results

Get raw extraction JSON with evidence map

Get Pending Docs

GET/coquititle/cases/{id}/pending-docs

Get processed pending documents

Sharing

Create Share

POST/coquititle/cases/{id}/share

Create a public share link for a report

{
"expires_at": "2025-01-15T00:00:00Z"
}

Response (201):

{
"share_id": "86af1832-a807-4ca0-8dff-559616593170",
"case_id": "550e8400-...",
"created_at": "2024-12-05T10:00:00Z",
"expires_at": null
}

Share URL format: https://app.alianzacap.com/coquititle/s/{share_id}

Get Shared Report (Unauthenticated)

GET/coquititle/shares/{share_id}/report

Access report via share link (no auth required)

Status Values

StatusDescription
pendingCase created, no files uploaded
uploadedFiles uploaded, processing not started
processing_ocrOCR in progress
processing_extractionMulti-pass extraction in progress
processing_pending_docsPending documents processing
building_title_stateDeterministic title derivation
resolving_evidenceEvidence validation in progress
generating_reportMulti-pass report generation
completedProcessing complete, report available
failedError occurred (see error_message)

Errors

CodeMeaning
401Invalid/missing JWT
404Case not found
500Server error

CORS

Allowed origins: https://app.alianzacap.com, http://localhost:3000