---
title: "Ask the assistant: a situation in plain words → a guide, form pack, form or document (10 a minute; nothing stored)"
method: POST
path: "/api/v1/ask"
tags: ["Ask"]
---

# Ask the assistant: a situation in plain words → a guide, form pack, form or document (10 a minute; nothing stored)

`POST /api/v1/ask`

## Request

- Base URL: `https://philforms.com`
- URL: `https://philforms.com/api/v1/ask`
- Auth: none declared

Body: the conversation so far, oldest first, the last message the person's. At most 12 messages of 1,000 characters. The answer may carry ONE follow-up `question` (at most 3 per conversation). Every pick is a real id: `url` opens it (/guide/:slug, /packs/:id, /fill/:id, /documents/:id). When nothing fits, `is_unlisted` is true and `official` names the agency's own site (`is_verified` false = the address was not confirmed to load). Before any text reaches the configured AI provider, ID numbers, phone numbers, emails, links, dates and introduced names are replaced with [number], [phone], [email], [link], [date], [name]; with no provider configured the answer comes from local ranking (`provider: "local"`).

## Request body

- object
  - `message` object[], required
    - `role` 'user' | 'assistant', required
    - `text` string, required

## Response `200`

{ reply, question, pick: [{ kind: guide|pack|form|document, id, title, url, why }], is_unlisted, official: [{ agency, name, url, is_verified }], source: [{ title, url }] (*.gov.ph only, when web research is configured), provider: model|local, is_cached, is_redacted, redaction_count }

## Other responses

- `400`: Not a conversation (the error says what is wrong)

---

[API](https://skmtc.dev/philforms/apis/philforms-api.md) · [All operations](https://skmtc.dev/philforms/apis/philforms-api/llms.txt) · [OpenAPI document](https://skmtc.dev/philforms/apis/philforms-api/revisions/a43bf313729c?raw)
