Interact overview
POST /v1/crawl/interact runs ordered browser actions against a live page and returns the post-action extraction result.
Use it when:
- the target requires clicks or form fills
- you need to wait for a selector before reading the page
- you want to reuse a browser profile across multiple calls
- scrape alone cannot reach the content you need
Login flow with extraction
```bash
curl https://api.faircompany.ai/v1/crawl/interact \
-X POST \
-H "Authorization: Bearer fc_live_xxx" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/login",
"actions": [
{ "type": "fill", "selector": "#email", "value": "user@example.com" },
{ "type": "fill", "selector": "#password", "value": "super-secret" },
{ "type": "click", "selector": "button[type=\"submit\"]" },
{ "type": "wait_for_selector", "selector": ".dashboard", "timeout_ms": 10000 },
{ "type": "extract", "format": "markdown" }
]
}'
```
```ts
const session = await fc.interact({
url: "https://example.com/login",
actions: [
{ type: "fill", selector: "#email", value: "user@example.com" },
{ type: "fill", selector: "#password", value: "super-secret" },
{ type: "click", selector: 'button[type="submit"]' },
{ type: "wait_for_selector", selector: ".dashboard", timeout_ms: 10000 },
{ type: "extract", format: "markdown" },
],
});
console.log(session.profile_id);
console.log(session.markdown);
```
```python
session = fc.interact(
"https://example.com/login",
[
{"type": "fill", "selector": "#email", "value": "user@example.com"},
{"type": "fill", "selector": "#password", "value": "super-secret"},
{"type": "click", "selector": "button[type=\"submit\"]"},
{"type": "wait_for_selector", "selector": ".dashboard", "timeout_ms": 10000},
{"type": "extract", "format": "markdown"},
],
)
print(session.profile_id)
print(session.markdown)
```
```json
{
"tool": "faircrawl_interact",
"arguments": {
"url": "https://example.com/login",
"actions": [
{ "type": "fill", "selector": "#email", "value": "user@example.com" },
{ "type": "fill", "selector": "#password", "value": "super-secret" },
{ "type": "click", "selector": "button[type=\"submit\"]" },
{ "type": "wait_for_selector", "selector": ".dashboard", "timeout_ms": 10000 },
{ "type": "extract", "format": "markdown" }
]
}
}
```
Result model
Interact returns action-by-action status, extracted content, optional screenshot URL, and a profile_id you can reuse on a follow-up call.