first commit
Security: Sync from Public / sync-from-public (push) Has been cancelled
Test: Benchmark Nightly / build (push) Has been cancelled
Test: Benchmark Nightly / Notify Cats on failure (push) Has been cancelled
CI: Python / Checks (push) Has been cancelled
Test: Evals Python / Workflow Comparison Python (push) Has been cancelled
Util: Check Docs URLs / check-docs-urls (push) Has been cancelled
Test: Visual Storybook / Cloudflare Pages (push) Has been cancelled
Test: E2E Performance / build-and-test-performance (push) Has been cancelled
Test: Workflows Nightly / Run Workflow Tests (push) Has been cancelled
Util: Cleanup CI Docker Images / Delete stale CI images (push) Has been cancelled
Test: Benchmark Destroy Env / build (push) Has been cancelled
Util: Update Node Popularity / update-popularity (push) Has been cancelled
Test: E2E Coverage Weekly / Coverage Tests (push) Has been cancelled

This commit is contained in:
2026-03-17 16:22:57 +03:30
commit 3d5eaf9445
15349 changed files with 2847338 additions and 0 deletions
File diff suppressed because it is too large Load Diff
@@ -0,0 +1 @@
1.58.0
+426
View File
@@ -0,0 +1,426 @@
# AGENTS.md
## Commands
```bash
# Run tests locally
pnpm --filter=n8n-playwright test:local <file-path>
pnpm --filter=n8n-playwright test:local tests/e2e/credentials/crud.spec.ts
# Run with container capabilities (requires pnpm build:docker first)
pnpm --filter=n8n-playwright test:container:sqlite --grep @capability:email
# Lint and typecheck
pnpm --filter=n8n-playwright lint
pnpm --filter=n8n-playwright typecheck
```
Always trim output: `--reporter=list 2>&1 | tail -50`
## Test Maintenance (Janitor)
Static analysis for Playwright test architecture. Catches problems before they spread.
> **CRITICAL: Always use TCR for code changes.**
> When janitor identifies violations and you fix them, use `pnpm janitor tcr --execute` to safely commit. Never manually commit janitor-related fixes - TCR ensures tests pass before the commit lands.
### Golden Rules
1. **Analysis only?** Run `pnpm janitor` (no TCR needed)
2. **Making code changes?** Use TCR: `pnpm janitor tcr --execute -m="chore: ..."`
3. **Never** manually `git commit` janitor-related fixes - always go through TCR
4. **Never** modify `.janitor-baseline.json` via TCR - baseline updates must be done manually
### When to Use
| User Says | Intent | Approach |
|-----------|--------|----------|
| "Clean up the test codebase" | Incremental cleanup | Create baseline first, then use `--max-diff-lines=500` for small PRs. |
| "Start tracking violations" | Enable incremental cleanup | Run `janitor baseline` to snapshot current state, commit `.janitor-baseline.json`. |
| "Add a test for X" | New test following patterns | After writing, run janitor to verify architecture compliance. |
| "Fix architecture drift" | Enforce layered architecture | Run `selector-purity` and `no-page-in-flow` rules. |
| "Find dead code" | Remove unused methods | Run `dead-code` rule with `--fix --write` for auto-removal. |
| "Find copy-paste code" | Detect duplicates | Run `duplicate-logic` rule to find structural duplicates. |
| "This file is messy" | Targeted cleanup | Analyze specific file, fix issues, TCR to safely commit. |
| "Refactor this page object" | Safe refactoring | Use TCR - changes commit if tests pass, revert if they fail. |
| "What tests would break?" | Impact analysis | Run `impact` command before changing shared code. |
| "Prepare for PR" | Pre-commit check | Run janitor on changed files to catch violations early. |
### Architecture Rules
The janitor enforces a layered architecture:
```
Tests → Flows/Composables → Page Objects → Components → Playwright API
```
| Rule | What It Catches |
|------|-----------------|
| `selector-purity` | Raw locators in tests/flows: `page.getByTestId()`, `someLocator.locator()` |
| `no-page-in-flow` | Flows accessing `page` directly (should use page objects) |
| `boundary-protection` | Pages importing other pages (creates coupling) |
| `scope-lockdown` | Unscoped locators that escape their container |
| `dead-code` | Unused public methods in page objects |
| `deduplication` | Same selector defined in multiple files |
| `duplicate-logic` | Copy-pasted code across tests/pages (AST fingerprinting) |
### Commands
```bash
# Analyze entire codebase
pnpm janitor
# Analyze specific file
pnpm janitor --file=pages/CanvasPage.ts --verbose
# Run specific rule
pnpm janitor --rule=dead-code
# Auto-fix (dead-code only)
pnpm janitor:fix --rule=dead-code
# List all rules (short)
pnpm janitor --list
# Show detailed rule info (for AI agents)
pnpm janitor rules --json
# Discover test specs (for orchestration)
pnpm janitor discover
# Distribute specs across shards
pnpm janitor orchestrate --shards=14
```
### Baseline (Incremental Cleanup)
For codebases with existing violations, create a baseline to enable incremental cleanup:
```bash
# Create baseline - snapshots current violations
pnpm janitor baseline
# Commit the baseline
git add .janitor-baseline.json && git commit -m "chore: add janitor baseline"
```
Once baseline exists, janitor and TCR **only fail on NEW violations**. Pre-existing violations are tracked but don't block work.
> **Safeguard:** TCR blocks commits that modify `.janitor-baseline.json`. This prevents accidentally "fixing" violations by updating the baseline instead of the actual code. Baseline updates must be done manually after fixing violations.
```bash
# Update baseline after fixing violations (manual commit required)
pnpm janitor baseline
git add .janitor-baseline.json && git commit -m "chore: update baseline after cleanup"
```
### Incremental Cleanup Strategy
For large cleanups, keep diffs small and reviewable:
```bash
# Show ALL violations (ignoring baseline) for cleanup work
pnpm janitor --ignore-baseline --json
# Find easiest files to fix (lowest violation count)
pnpm janitor --ignore-baseline --json 2>/dev/null | jq '.fileReports | sort_by(.violationCount) | .[:5]'
# TCR with max diff size (skip if changes are too large)
pnpm janitor tcr --max-diff-lines=500 --execute -m="chore: cleanup"
```
**AI Cleanup Workflow:**
1. Use `--ignore-baseline` to see all violations (not just new ones)
2. Pick small fixes from the list
3. Fix violations, then TCR to safely commit
4. After fixing, run `pnpm janitor baseline` to update the baseline
### TCR Workflow (Test && Commit || Revert)
Safe refactoring loop: make changes, run affected tests, auto-commit or auto-revert.
```bash
# Dry run - see what would happen
pnpm janitor tcr --verbose
# Execute - actually commit/revert
pnpm janitor tcr --execute -m="chore: remove dead code"
# With guardrails - skip if diff too large
pnpm janitor tcr --execute --max-diff-lines=500 -m="chore: cleanup"
```
### After Writing New Tests
Always run janitor after adding or modifying tests to catch architecture violations early:
```bash
pnpm janitor --file=tests/my-new-test.spec.ts --verbose
```
See `packages/testing/janitor/README.md` for full documentation.
## Entry Points
All tests should start with `n8n.start.*` methods. See `composables/TestEntryComposer.ts`.
| Method | Use Case |
|--------|----------|
| `fromHome()` | Start from home page |
| `fromBlankCanvas()` | New workflow from scratch |
| `fromNewProjectBlankCanvas()` | Project-scoped workflow (returns projectId) |
| `fromNewProject()` | Project-scoped test, no canvas (returns projectId) |
| `fromImportedWorkflow(file)` | Test pre-built workflow JSON |
| `withUser(user)` | Isolated browser context per user |
| `withProjectFeatures()` | Enable sharing/folders/permissions |
## Test Isolation
Tests run in parallel. Design tests to be fully isolated so they don't interfere with each other.
### Unique Identifiers
Use `nanoid` for unique test data:
```typescript
const credentialName = `Test Credential ${nanoid()}`;
const workflow = await api.workflows.createWorkflow({
name: `Test Workflow ${nanoid()}`,
});
```
### Dynamic User Creation
Create users dynamically via the public API:
```typescript
const member = await api.publicApi.createUser({
email: `member-${nanoid()}@test.com`,
firstName: 'Test',
lastName: 'Member',
});
```
### Isolated Browser Contexts
For UI tests requiring multiple users, create isolated browser contexts:
```typescript
// 1. Create users via public API
const member1 = await api.publicApi.createUser({ role: 'global:member' });
const member2 = await api.publicApi.createUser({ role: 'global:member' });
// 2. Get isolated browser contexts
const member1Page = await n8n.start.withUser(member1);
const member2Page = await n8n.start.withUser(member2);
// 3. Each operates independently (no session bleeding)
await member1Page.navigate.toWorkflows();
await member2Page.navigate.toCredentials();
```
**Reference:** `tests/e2e/building-blocks/user-service.spec.ts`
| Pattern | Why | Use Instead |
|---------|-----|-------------|
| `test.describe.serial` | Creates test dependencies | Parallel tests with isolated setup |
| Fresh DB per file | Tests need isolated container | `test.use({ capability: { env: { TEST_ISOLATION: 'name' } } })` |
| Fresh DB per test | Tests modify shared state | `@db:reset` tag on describe (container-only, combined with `test.use()`) |
| `n8n.api.signin()` | Session bleeding | `n8n.start.withUser()` |
| `Date.now()` for IDs | Race conditions | `nanoid()` |
| `waitForTimeout()` | Flaky | `waitForResponse()`, `toBeVisible()` |
| `.toHaveCount(N)` | Brittle | Named element assertions |
| Raw `page.goto()` | Bypasses setup | `n8n.navigate.*` methods |
## Code Style
- Use specialized locators: `page.getByRole('button')` over `page.locator('[role=button]')`
- Use `nanoid()` for unique identifiers (parallel-safe)
- API setup over UI setup when possible (faster, more reliable)
## Architecture
```
Tests (*.spec.ts)
↓ uses
Composables (*Composer.ts) - Multi-step business workflows
↓ orchestrates
Page Objects (*Page.ts) - UI interactions
↓ extends
BasePage - Common utilities
```
See `CONTRIBUTING.md` for detailed patterns and conventions.
## Debugging
See [README.md#debugging](./README.md#debugging) for detailed instructions on:
- **Keepalive mode** - Keep containers running after tests with `N8N_CONTAINERS_KEEPALIVE=true`
- **Victoria exports** - Logs/metrics automatically attached on failure, importable locally via `scripts/import-victoria-data.mjs`
## Test Migration & Refactoring
**Test Name = Contract**
- Name declares intent, assertion proves it, everything else is flow
- Bad: `should open W1 as U2` (describes action)
- Good: `should allow sharee to edit shared workflow` (declares rule)
**Coverage Parity Check**
1. Read old test name → what was the intent?
2. Find the explicit assertion that proved it
3. Verify new test has equivalent proof
4. No proof found? Document as intentional drop or gap
**Legacy Tests (unauditable names/assertions)**
- Prioritize clarity over parity - can't audit what you can't read
- Document your best interpretation of intent
- Accept short-term risk, fix regressions forward
See [Quality Corner: Test Migration Guide](https://www.notion.so/n8n/Best-Practices-Test-Migration-Refactoring) for full rationale and examples.
## Reference Files
| Purpose | File |
|---------|------|
| Multi-user testing | `tests/e2e/building-blocks/user-service.spec.ts` |
| Entry points | `composables/TestEntryComposer.ts` |
| Page object example | `pages/CanvasPage.ts` |
| Composable example | `composables/WorkflowComposer.ts` |
| API helpers | `services/api-helper.ts` |
| Capabilities | `fixtures/capabilities.ts` |
```typescript
const member = await api.publicApi.createUser({...});
const memberN8n = await n8n.start.withUser(member);
await memberN8n.navigate.toWorkflows();
await expect(memberN8n.workflows.cards.getWorkflow(workflowName)).toBeVisible();
```
### Isolated API Contexts
For API-only operations as another user, create isolated API contexts (no browser needed):
```typescript
const member = await api.publicApi.createUser({...});
const memberApi = await api.createApiForUser(member);
const memberProject = await memberApi.projects.getMyPersonalProject();
await memberApi.credentials.createCredential({...});
```
### Identity-Based Assertions
Assert by identity (name) rather than count for parallel-safe tests:
```typescript
await expect(credentialDropdown.getByText(testCredName)).toBeVisible();
await expect(credentialDropdown.getByText(devCredName)).toBeHidden();
```
## Worker Isolation (Fresh Database)
Use `test.use()` at file top-level with unique capability config:
```typescript
// my-isolated-tests.spec.ts
import { test, expect } from '../fixtures/base';
// Must be top-level, not inside describe block
test.use({ capability: { env: { TEST_ISOLATION: 'my-isolated-tests' } } });
test('test with clean state', async ({ n8n }) => {
// Fresh container with reset database
});
```
For per-test database reset (when tests modify shared state like MFA), add `@db:reset` to the describe. **Note:** `@db:reset` is container-only - these tests won't run locally.
```typescript
test.use({ capability: { env: { TEST_ISOLATION: 'my-stateful-tests' } } });
test.describe('My stateful tests @db:reset', () => {
// Each test gets a fresh database reset (container-only)
});
```
## Data Setup
Use API helpers for fast, reliable test data setup. Reserve UI interactions for testing UI behavior:
```typescript
// API for data setup
const credential = await api.credentials.createCredential({
name: `Test Credential ${nanoid()}`,
type: 'notionApi',
data: { apiKey: 'test' },
});
const workflow = await api.workflows.createWorkflow({
name: `Test Workflow ${nanoid()}`,
nodes: [...],
});
// UI for verification
await n8n.navigate.toCredentials();
await expect(n8n.credentials.cards.getCredential(credential.name)).toBeVisible();
```
## Feature Enablement
The `n8n` fixture automatically enables project features. For API-only tests (no `n8n` fixture), enable features explicitly:
```typescript
test('API-only test', async ({ api }) => {
await api.enableProjectFeatures();
// ...
});
```
### Feature Flag Overrides
To test features behind feature flags (experiments), use `TestRequirements` with storage overrides:
```typescript
import type { TestRequirements } from '../config/TestRequirements';
const requirements: TestRequirements = {
storage: {
N8N_EXPERIMENT_OVERRIDES: JSON.stringify({ 'your_experiment': true }),
},
};
test.use({ requirements });
test('test with feature flag enabled', async ({ n8n }) => {
// Feature flag is now active for this test
});
```
**Common patterns:**
```typescript
// Single experiment
{ storage: { N8N_EXPERIMENT_OVERRIDES: JSON.stringify({ '025_new_canvas': true }) } }
// Multiple experiments
{ storage: { N8N_EXPERIMENT_OVERRIDES: JSON.stringify({
'025_new_canvas': true,
'026_another_feature': 'variant_a'
}) } }
// Combined with other requirements
const requirements: TestRequirements = {
storage: {
N8N_EXPERIMENT_OVERRIDES: JSON.stringify({ 'your_experiment': true }),
},
capability: {
env: { TEST_ISOLATION: 'my-test-suite' },
},
};
```
**Reference:** `config/TestRequirements.ts` for full interface definition.
## Shard Rebalancing
When refactoring, adding, or moving significant numbers of tests, consider rebalancing test shards to maintain even CI distribution. See `docs/ORCHESTRATION.md` for details.
+1
View File
@@ -0,0 +1 @@
@AGENTS.md
+564
View File
@@ -0,0 +1,564 @@
# n8n Playwright Test Contribution Guide
> For running tests, see [README.md](./README.md)
## 🚀 Quick Start for Test Development
### Prerequisites
- **VS Code/Cursor Extension**: Install "Playwright Test for VSCode"
- **Local n8n Instance**: Local server or Docker
### Configuration
Add to your `/.vscode/settings.json`:
```json
{
"playwright.env": {
"N8N_BASE_URL": "http://localhost:5679", // URL to test against (Don't use 5678 as that can wipe your dev instance DB)
"SHOW_BROWSER": "true", // Show browser (useful with n8n.page.pause())
"RESET_E2E_DB": "true" // Reset DB for fresh state
}
}
```
### Running Tests
1. **Initial Setup**: Click "Run global setup" in Playwright extension to reset database
2. **Run Tests**: Click play button next to any test in the IDE
3. **Debug**: Add `await n8n.page.pause()` to hijack test execution
Troubleshooting:
- Why can't I run my test from the UI?
- The tests are separated by groups for tests that can run in parallel or tests that need a DB reset each time. You can select the project in the test explorer.
- Not all my tests ran from the CLI
- Currently the DB reset tests are a "dependency" of the parallel tests, this is to stop them running at the same time. So if the parallel tests fail the sequential tests won't run.
---
## 🏗️ Architecture Overview
Our test architecture supports both UI-driven and API-driven testing:
### UI Testing (Four-Layer Approach)
```
Tests (*.spec.ts)
↓ uses
Composables (*Composer.ts) - Business workflows
↓ orchestrates
Page Objects (*Page.ts) - UI interactions
↓ extends
BasePage - Common utilities
```
### API Testing (Two-Layer Approach)
```
Tests (*.spec.ts)
↓ uses
API Services (ApiHelpers + specialized helpers)
```
### Core Principle: Separation of Concerns
- **BasePage**: Generic interaction methods
- **Page Objects**: Element locators and simple actions
- **Composables**: Complex business workflows
- **API Services**: REST API interactions, workflow management
- **Tests**: Readable scenarios using composables or API services
---
## 📐 Lexical Conventions
### Page Objects: Three Types of Methods
#### 1. Element Getters (No `async`, return `Locator`)
```typescript
// From WorkflowsPage.ts
getSearchBar() {
return this.page.getByTestId('resources-list-search');
}
getWorkflowByName(name: string) {
return this.getWorkflowItems().filter({ hasText: name });
}
// From CanvasPage.ts
nodeByName(nodeName: string): Locator {
return this.page.locator(`[data-test-id="canvas-node"][data-node-name="${nodeName}"]`);
}
saveWorkflowButton(): Locator {
return this.page.getByRole('button', { name: 'Save' });
}
```
#### 2. Simple Actions (`async`, return `void`)
```typescript
// From WorkflowsPage.ts
async clickAddWorklowButton() {
await this.clickByTestId('add-resource-workflow');
}
async searchWorkflows(searchTerm: string) {
await this.clickByTestId('resources-list-search');
await this.fillByTestId('resources-list-search', searchTerm);
}
// From CanvasPage.ts
async deleteNodeByName(nodeName: string): Promise<void> {
await this.nodeDeleteButton(nodeName).click();
}
async openNode(nodeName: string): Promise<void> {
await this.nodeByName(nodeName).dblclick();
}
```
#### 3. Query Methods (`async`, return data)
```typescript
// From CanvasPage.ts
async getPinnedNodeNames(): Promise<string[]> {
const pinnedNodesLocator = this.page
.getByTestId('canvas-node')
.filter({ has: this.page.getByTestId('canvas-node-status-pinned') });
const names: string[] = [];
const count = await pinnedNodesLocator.count();
for (let i = 0; i < count; i++) {
const node = pinnedNodesLocator.nth(i);
const name = await node.getAttribute('data-node-name');
if (name) {
names.push(name);
}
}
return names;
}
// From NotificationsPage.ts
async getNotificationCount(text?: string | RegExp): Promise<number> {
try {
const notifications = text
? this.notificationContainerByText(text)
: this.page.getByRole('alert');
return await notifications.count();
} catch {
return 0;
}
}
```
### Composables: Business Workflows
```typescript
// From WorkflowComposer.ts
export class WorkflowComposer {
async executeWorkflowAndWaitForNotification(notificationMessage: string) {
const responsePromise = this.n8n.page.waitForResponse(
(response) =>
response.url().includes('/rest/workflows/') &&
response.url().includes('/run') &&
response.request().method() === 'POST',
);
await this.n8n.canvas.clickExecuteWorkflowButton();
await responsePromise;
await this.n8n.notifications.waitForNotificationAndClose(notificationMessage);
}
async createWorkflow(name?: string) {
await this.n8n.workflows.clickAddWorklowButton();
const workflowName = name ?? 'My New Workflow';
await this.n8n.canvas.setWorkflowName(workflowName);
await this.n8n.canvas.saveWorkflow();
}
}
// From ProjectComposer.ts
export class ProjectComposer {
async createProject(projectName?: string) {
await this.n8n.page.getByTestId('universal-add').click();
await Promise.all([
this.n8n.page.waitForResponse('**/rest/projects/*'),
this.n8n.page.getByTestId('navigation-menu-item').filter({ hasText: 'Project' }).click(),
]);
await this.n8n.notifications.waitForNotificationAndClose('saved successfully');
await this.n8n.page.waitForLoadState();
const projectNameUnique = projectName ?? `Project ${Date.now()}`;
await this.n8n.projectSettings.fillProjectName(projectNameUnique);
await this.n8n.projectSettings.clickSaveButton();
const projectId = this.extractProjectIdFromPage('projects', 'settings');
return { projectName: projectNameUnique, projectId };
}
}
```
---
## 📁 File Structure & Naming
```
tests/
├── composables/ # Multi-page business workflows
│ ├── CanvasComposer.ts
│ ├── ProjectComposer.ts
│ └── WorkflowComposer.ts
├── pages/ # Page object models
│ ├── BasePage.ts
│ ├── CanvasPage.ts
│ ├── CredentialsPage.ts
│ ├── ExecutionsPage.ts
│ ├── NodeDisplayViewPage.ts
│ ├── NotificationsPage.ts
│ ├── ProjectSettingsPage.ts
│ ├── ProjectWorkflowsPage.ts
│ ├── SidebarPage.ts
│ ├── WorkflowSharingModal.ts
│ └── WorkflowsPage.ts
├── fixtures/ # Test fixtures and setup
├── services/ # API helpers
├── utils/ # Helper functions
├── config/ # Constants and configuration
│ ├── constants.ts
│ ├── intercepts.ts
│ └── test-users.ts
└── *.spec.ts # Test files
```
### Naming Conventions
| Type | Pattern | Example |
|------|---------|---------|
| **Page Objects** | `{PageName}Page.ts` | `CredentialsPage.ts` |
| **Composables** | `{Domain}Composer.ts` | `WorkflowComposer.ts` |
| **Test Files** | `{feature}.spec.ts` | `workflows.spec.ts` |
| **Test IDs** | `kebab-case` | `data-test-id="save-button"` |
---
## ✅ Implementation Checklist
### When Adding a Page Object Method
```typescript
// From ExecutionsPage.ts - Good example
export class ExecutionsPage extends BasePage {
// ✅ Getter: Returns Locator, no async
getExecutionItems(): Locator {
return this.page.locator('div.execution-card');
}
getLastExecutionItem(): Locator {
const executionItems = this.getExecutionItems();
return executionItems.nth(0);
}
// ✅ Action: Async, descriptive verb, returns void
async clickDebugInEditorButton(): Promise<void> {
await this.clickButtonByName('Debug in editor');
}
async clickLastExecutionItem(): Promise<void> {
const executionItem = this.getLastExecutionItem();
await executionItem.click();
}
// ❌ AVOID: Mixed concerns (this should be in a composable)
async handlePinnedNodesConfirmation(action: 'Unpin' | 'Cancel'): Promise<void> {
// This involves business logic and should be moved to a composable
}
}
```
### When Creating a Composable
```typescript
// From CanvasComposer.ts - Good example
export class CanvasComposer {
/**
* Pin the data on a node. Then close the node.
* @param nodeName - The name of the node to pin the data on.
*/
async pinNodeData(nodeName: string) {
await this.n8n.canvas.openNode(nodeName);
await this.n8n.ndv.togglePinData();
await this.n8n.ndv.close();
}
}
// From ProjectComposer.ts - Good example with return data
export class ProjectComposer {
async addCredentialToProject(
projectName: string,
credentialType: string,
credentialFieldName: string,
credentialValue: string,
) {
await this.n8n.sideBar.openNewCredentialDialogForProject(projectName);
await this.n8n.credentials.openNewCredentialDialogFromCredentialList(credentialType);
await this.n8n.credentials.fillCredentialField(credentialFieldName, credentialValue);
await this.n8n.credentials.saveCredential();
await this.n8n.notifications.waitForNotificationAndClose('Credential successfully created');
await this.n8n.credentials.closeCredentialDialog();
}
}
```
### When Writing Tests
#### E2E Tests
```typescript
// ✅ GOOD: From workflows/list/workflows.spec.ts
test('should create a new workflow using add workflow button', async ({ n8n }) => {
await n8n.workflows.addResource.workflow();
const workflowName = `Test Workflow ${Date.now()}`;
await n8n.canvas.setWorkflowName(workflowName);
await n8n.page.keyboard.press('Enter');
await n8n.canvas.waitForSaveWorkflowCompleted();
});
// ✅ GOOD: From workflows/editor/execution/debug.spec.ts - Using helper functions
async function createBasicWorkflow(n8n, url = URLS.FAILING) {
await n8n.navigate.toWorkflow('new');
await n8n.canvas.addNode('Manual Trigger');
await n8n.canvas.addNode('HTTP Request');
await n8n.ndv.fillParameterInput('URL', url);
await n8n.canvas.waitForSaveWorkflowCompleted();
await n8n.ndv.close();
}
test('should enter debug mode for failed executions', async ({ n8n }) => {
await createBasicWorkflow(n8n, URLS.FAILING);
await n8n.workflowComposer.executeWorkflowAndWaitForNotification(NOTIFICATIONS.PROBLEM_IN_NODE);
await importExecutionForDebugging(n8n);
expect(n8n.page.url()).toContain('/debug');
});
```
#### API Tests
```typescript
// ✅ GOOD: API-driven workflow testing
test('should create workflow via API, activate it, trigger webhook externally @auth:owner', async ({ api }) => {
const workflowDefinition = JSON.parse(
readFileSync(resolveFromRoot('workflows', 'simple-webhook-test.json'), 'utf8'),
);
const createdWorkflow = await api.workflowApi.createWorkflow(workflowDefinition);
await api.workflowApi.setActive(createdWorkflow.id, true);
const testPayload = { message: 'Hello from Playwright test' };
const webhookResponse = await api.workflowApi.triggerWebhook('test-webhook', { data: testPayload });
expect(webhookResponse.ok()).toBe(true);
const execution = await api.workflowApi.waitForExecution(createdWorkflow.id, 10000);
expect(execution.status).toBe('success');
const executionDetails = await api.workflowApi.getExecution(execution.id);
expect(executionDetails.data).toContain('Hello from Playwright test');
});
```
---
## 🎯 Best Practices
### 1. Always Use BasePage Methods
```typescript
// ✅ GOOD - From NodeDisplayViewPage.ts
async fillParameterInput(labelName: string, value: string) {
await this.getParameterByLabel(labelName).getByTestId('parameter-input-field').fill(value);
}
async clickBackToCanvasButton() {
await this.clickByTestId('ndv-close-button');
}
// ❌ AVOID
async badExample() {
await this.page.getByTestId('ndv-close-button').click();
}
```
### 2. Keep Page Objects Simple
```typescript
// ✅ GOOD - From CredentialsPage.ts
export class CredentialsPage extends BasePage {
async openCredentialSelector() {
await this.page.getByRole('combobox', { name: 'Select Credential' }).click();
}
async createNewCredential() {
await this.clickByText('Create new credential');
}
async fillCredentialField(fieldName: string, value: string) {
const field = this.page
.getByTestId(`parameter-input-${fieldName}`)
.getByTestId('parameter-input-field');
await field.click();
await field.fill(value);
}
}
```
### 3. Use Constants for Repeated Values
```typescript
// From constants.ts
export const MANUAL_TRIGGER_NODE_NAME = 'Manual Trigger';
export const MANUAL_TRIGGER_NODE_DISPLAY_NAME = 'When clicking 'Execute workflow'';
export const CODE_NODE_NAME = 'Code';
export const SET_NODE_NAME = 'Set';
export const HTTP_REQUEST_NODE_NAME = 'HTTP Request';
// From workflows/editor/execution/debug.spec.ts
const NOTIFICATIONS = {
EXECUTION_IMPORTED: 'Execution data imported',
PROBLEM_IN_NODE: 'Problem in node',
SUCCESSFUL: 'Successful',
DATA_NOT_IMPORTED: "Some execution data wasn't imported",
};
```
### 4. Handle Dynamic Data
```typescript
// From test-users.ts
export const INSTANCE_OWNER_CREDENTIALS: UserCredentials = {
email: 'nathan@n8n.io',
password: DEFAULT_USER_PASSWORD,
firstName: randFirstName(),
lastName: randLastName(),
};
// From tests
const projectName = `Test Project ${Date.now()}`;
const workflowName = `Archive Test ${Date.now()}`;
```
### 5. Proper Waiting Strategies
```typescript
// ✅ GOOD - From ProjectComposer.ts
await Promise.all([
this.n8n.page.waitForResponse('**/rest/projects/*'),
this.n8n.page.getByTestId('navigation-menu-item').filter({ hasText: 'Project' }).click(),
]);
// From NotificationsPage.ts
async waitForNotification(text: string | RegExp, options: { timeout?: number } = {}): Promise<boolean> {
const { timeout = 5000 } = options;
try {
const notification = this.notificationContainerByText(text).first();
await notification.waitFor({ state: 'visible', timeout });
return true;
} catch {
return false;
}
}
```
---
## 🚨 Common Anti-Patterns
### ❌ Don't Mix Concerns
```typescript
// BAD: From WorkflowsPage.ts - Should be in composable
async archiveWorkflow(workflowItem: Locator) {
await workflowItem.getByTestId('workflow-card-actions').click();
await this.getArchiveMenuItem().click();
}
// GOOD: Simple page object method
async clickArchiveMenuItem() {
await this.getArchiveMenuItem().click();
}
```
### ❌ Don't Use Raw Selectors in Tests
```typescript
// BAD: From workflows/list/workflows.spec.ts
await expect(n8n.page.getByText('No workflows found')).toBeVisible();
// GOOD: Add getter to page object
await expect(n8n.workflows.getEmptyStateMessage()).toBeVisible();
```
### ❌ Don't Create Overly Specific Methods
```typescript
// BAD: Too specific
async createAndSaveNewCredentialForNotionApi(apiKey: string) {
// Too specific! Break it down
}
// GOOD: From CredentialsPage.ts - Reusable parts
async openNewCredentialDialogFromCredentialList(credentialType: string): Promise<void>
async fillCredentialField(fieldName: string, value: string)
async saveCredential()
```
---
## 📝 Code Review Checklist
Before submitting your PR, ensure:
- [ ] All page object methods follow the getter/action/query pattern
- [ ] Complex workflows are in composables, not page objects
- [ ] Tests use composables, not low-level page methods
- [ ] Used `BasePage` methods instead of raw Playwright selectors
- [ ] Added JSDoc comments for non-obvious methods
- [ ] Test names clearly describe the business scenario
- [ ] No `waitForTimeout` - used proper Playwright waiting
- [ ] Constants used for repeated strings
- [ ] Dynamic data includes timestamps to avoid conflicts
- [ ] Methods are small and focused on one responsibility
- [ ] Janitor passes on changed files (`pnpm janitor --file=<your-file>`)
---
## 🔍 Real Implementation Example
Here's a complete example from our codebase showing all layers:
```typescript
// 1. Page Object (ProjectSettingsPage.ts)
export class ProjectSettingsPage extends BasePage {
// Simple action methods only
async fillProjectName(name: string) {
// Prefer stable ID selectors on the wrapper element and then target the inner control
await this.page.locator('#projectName input').fill(name);
}
async clickSaveButton() {
await this.clickButtonByName('Save');
}
}
// 2. Composable (ProjectComposer.ts)
export class ProjectComposer {
async createProject(projectName?: string) {
await this.n8n.page.getByTestId('universal-add').click();
await Promise.all([
this.n8n.page.waitForResponse('**/rest/projects/*'),
this.n8n.page.getByTestId('navigation-menu-item').filter({ hasText: 'Project' }).click(),
]);
await this.n8n.notifications.waitForNotificationAndClose('saved successfully');
await this.n8n.page.waitForLoadState();
const projectNameUnique = projectName ?? `Project ${Date.now()}`;
await this.n8n.projectSettings.fillProjectName(projectNameUnique);
await this.n8n.projectSettings.clickSaveButton();
const projectId = this.extractProjectIdFromPage('projects', 'settings');
return { projectName: projectNameUnique, projectId };
}
}
// 3. Test (projects/projects.spec.ts)
test('should filter credentials by project ID', async ({ n8n, api }) => {
const { projectName, projectId } = await n8n.projectComposer.createProject();
await n8n.projectComposer.addCredentialToProject(
projectName,
'Notion API',
'apiKey',
NOTION_API_KEY,
);
const credentials = await n8n.api.credentials.getCredentialsByProject(projectId);
expect(credentials).toHaveLength(1);
});
```
+415
View File
@@ -0,0 +1,415 @@
# Playwright E2E Test Guide
## Development setup
```bash
pnpm install-browsers:local # in playwright directory
pnpm build:docker # from root first to test against local changes
```
## Quick Start
```bash
pnpm test:all # Run all tests (fresh containers, pnpm build:docker from root first to ensure local containers)
pnpm test:local # Starts a local server and runs the E2E tests
N8N_BASE_URL=localhost:5068 pnpm test:local # Runs the E2E tests against the instance running
```
## Separate Backend and Frontend URLs
When developing with separate backend and frontend servers (e.g., backend on port 5680, frontend on port 8080), you can use the following environment variables:
- **`N8N_BASE_URL`**: Backend server URL (also used as frontend URL if `N8N_EDITOR_URL` is not set)
- **`N8N_EDITOR_URL`**: Frontend server URL (when set, overrides frontend URL while backend uses `N8N_BASE_URL`)
**How it works:**
- **Backend URL** (for API calls): Always uses `N8N_BASE_URL`
- **Frontend URL** (for browser navigation): Uses `N8N_EDITOR_URL` if set, otherwise falls back to `N8N_BASE_URL`
This allows you to:
- Test against a backend on port 5680 while the frontend dev server runs on port 8080
- Use different URLs for API calls vs browser navigation
- Maintain backward compatibility with single-URL setups
## Test Commands
```bash
# By Mode
pnpm test:container:sqlite # SQLite (default)
pnpm test:container:postgres # PostgreSQL
pnpm test:container:queue # Queue mode
pnpm test:container:multi-main # HA setup
pnpm test:performance # Runs the performance tests against Sqlite container
pnpm test:chaos # Runs the chaos tests
# Development
pnpm test:all --grep "workflow" # Pattern match, can run across all test types E2E/cli-workflow/performance
pnpm test:local --ui # To enable UI debugging and test running mode
```
## Test Tags
```typescript
test('basic test', ...) // All modes, fully parallel
test('postgres only @mode:postgres', ...) // Mode-specific
test('chaos test @mode:multi-main @chaostest', ...) // Isolated per worker
test('cloud resource test @cloud:trial', ...) // Cloud resource constraints
test('proxy test @capability:proxy', ...) // Requires proxy server capability
test('enterprise feature @licensed', ...) // Requires enterprise license (container-only)
```
### Tag Reference
| Tag | Description | When to Use |
|-----|-------------|-------------|
| `@mode:X` | Infrastructure mode (postgres, queue, multi-main) | Tests requiring specific DB or architecture |
| `@capability:X` | Container services (email, proxy, oidc, source-control, observability) | Tests needing external services |
| `@licensed` | Enterprise license features | Tests for features behind license flags at startup |
| `@cloud:X` | Resource constraints (trial, enterprise) | Performance tests with memory/CPU limits |
| `@chaostest` | Chaos engineering tests | Tests that intentionally break things |
| `@auth:X` | Authentication role (owner, admin, member, none) | Tests requiring specific user role |
| `@db:reset` | Reset database before each test (container-only) | Tests that need fresh DB state per test (e.g., MFA tests) |
### Worker Isolation (Fresh Database)
Tests that need their own isolated database should use `test.use()` with a unique capability config. This gives the test file its own container with a fresh database:
```typescript
// my-isolated-tests.spec.ts
import { test, expect } from '../fixtures/base';
// Unique value breaks worker cache → fresh container with clean DB
test.use({ capability: { env: { TEST_ISOLATION: 'my-test-name' } } });
test.describe('My isolated tests', () => {
test.describe.configure({ mode: 'serial' }); // If tests depend on each other's data
test('test with clean state', async ({ n8n }) => {
// Fresh container with reset database
});
});
```
**How it works:** The `capability` option is scoped to the worker level. When you pass a unique value via `test.use()`, Playwright creates a new worker with a fresh container. Each container starts with a clean database automatically.
### Per-Test Database Reset (@db:reset)
If tests within the same file need a fresh database before **each test** (not just the file), add `@db:reset` to the describe block. **Note:** This tag is container-only - tests with `@db:reset` won't run in local mode.
```typescript
// my-stateful-tests.spec.ts
import { test, expect } from '../fixtures/base';
test.use({ capability: { env: { TEST_ISOLATION: 'my-stateful-tests' } } });
test.describe('My stateful tests @db:reset', () => {
test('test 1', async ({ n8n }) => {
// Fresh database (reset before this test)
});
test('test 2', async ({ n8n }) => {
// Fresh database again (reset before this test too)
});
});
```
**When to use `@db:reset`:** When tests modify shared state that would break subsequent tests (e.g., enabling MFA, creating users, changing settings). Since resetting the database would affect all parallel tests in local mode, these tests are excluded from local runs and only execute in container mode where each worker has its own isolated database.
### Enterprise Features (@licensed)
Use the `@licensed` tag for tests that require enterprise features which are **only available when the license is present at startup**. This differs from features that can be enabled/disabled at runtime.
**When to use:**
- Features behind `@BackendModule({ licenseFlag: LICENSE_FEATURES.X })` decorators
- API endpoints that only exist when the module loads with a valid license
- Features like log streaming, SSO, LDAP where routes aren't registered without license
**Example:**
```typescript
// The @licensed tag ensures this only runs in container mode with a valid license
test.describe('Log Streaming @licensed', () => {
test.beforeEach(async ({ n8n }) => {
// enableFeature() works for runtime checks, but module must be loaded first
await n8n.api.enableFeature('logStreaming');
});
test('should show licensed view', async ({ n8n }) => {
await n8n.navigate.toLogStreaming();
// ...
});
});
```
> **Note:** `@licensed` tests are skipped in local mode (`test:local`) and only run in container mode where a license is available.
**Enterprise license for testing:**
To run `@licensed` tests or manually test enterprise features, set `N8N_LICENSE_TENANT_ID` and `N8N_LICENSE_ACTIVATION_KEY` in your environment. The containers package reads these variables automatically. Ask in Slack for the sandbox license key.
## Fixture Selection
- **`base.ts`**: Standard testing with worker-scoped containers (default choice)
- **`cloud-only.ts`**: Cloud resource testing with guaranteed isolation
- Use for performance testing under resource constraints
- Requires `@cloud:*` tags (`@cloud:trial`, `@cloud:enterprise`, etc.)
- Creates only cloud containers, no worker containers
```typescript
// Standard testing
import { test, expect } from '../fixtures/base';
// Cloud resource testing
import { test, expect } from '../fixtures/cloud-only';
test('Performance under constraints @cloud:trial', async ({ n8n, api }) => {
// Test runs with 384MB RAM, 250 millicore CPU
});
```
## Tips
- `test:*` commands use fresh containers (for testing)
- VS Code: Set `N8N_BASE_URL` in Playwright settings to run tests directly from VS Code
- Pass custom env vars via `N8N_TEST_ENV='{"KEY":"value"}'`
## Project Layout
- **composables**: Multi-page interactions (e.g., `WorkflowComposer.executeWorkflowAndWaitForNotification()`)
- **config**: Test setup and configuration (constants, test users, etc.)
- **fixtures**: Custom test fixtures extending Playwright's base test
- `base.ts`: Standard fixtures with worker-scoped containers
- `cloud-only.ts`: Cloud resource testing with test-scoped containers only
- **pages**: Page Object Models for UI interactions
- **services**: API helpers for E2E controller, REST calls, workflow management, etc.
- **utils**: Utility functions (string manipulation, helpers, etc.)
- **workflows**: Test workflow JSON files for import/reuse
## Writing Tests with Proxy
You can use ProxyServer to mock API requests.
```typescript
import { test, expect } from '../fixtures/base';
// The `@capability:proxy` tag ensures tests only run when proxy infrastructure is available.
test.describe('Proxy tests @capability:proxy', () => {
test('should mock HTTP requests', async ({ proxyServer, n8n }) => {
// Create mock expectations
await proxyServer.createGetExpectation('/api/data', { result: 'mocked' });
// Execute workflow that makes HTTP requests
await n8n.canvas.openNewWorkflow();
// ... test implementation
// Verify requests were proxied
expect(await proxyServer.wasGetRequestMade('/api/data')).toBe(true);
});
});
```
### Recording and replaying requests
The ProxyServer service supports recording HTTP requests for test mocking and replay. All proxied requests are automatically recorded by the mock server as described in the [Mock Server documentation](https://www.mock-server.com/proxy/record_and_replay.html).
#### Recording Expectations
```typescript
// Record all requests (the request is simplified/cleansed to method/path/body/query)
await proxyServer.recordExpectations('test-folder');
// Record with filtering and options
await proxyServer.recordExpectations('test-folder', {
host: 'googleapis.com', // Filter by host (partial match)
dedupe: true, // Remove duplicate requests
raw: false // Save cleaned requests (default)
});
// Record raw requests with all headers and metadata
await proxyServer.recordExpectations('test-folder', {
raw: true // Save complete original requests
});
// Record requests matching specific criteria
await proxyServer.recordExpectations('test-folder', {
pathOrRequestDefinition: {
method: 'POST',
path: '/api/workflows'
}
});
```
#### Loading and Using Recorded Expectations
Recorded expectations are saved as JSON files in the `expectations/` directory. To use them in tests, you must explicitly load them:
```typescript
test('should use recorded expectations', async ({ proxyServer }) => {
// Load expectations from a specific folder
await proxyServer.loadExpectations('test-folder');
// Your test code here - requests will be mocked using loaded expectations
});
```
#### Important: Cleanup Expectations
**Remember to clean up expectations before or after test runs:**
```typescript
test.beforeEach(async ({ proxyServer }) => {
// Clear any existing expectations before test
await proxyServer.clearAllExpectations();
});
test.afterEach(async ({ proxyServer }) => {
// Or clear expectations after test
await proxyServer.clearAllExpectations();
});
```
This prevents expectations from one test affecting others and ensures test isolation.
## Debugging
### Keepalive Mode
Use `N8N_CONTAINERS_KEEPALIVE=true` to keep containers running after tests complete. Useful for:
- Inspecting n8n instance state after a failure
- Exploring configured integrations (email, OIDC, source control)
- Manual testing against a pre-configured environment
```bash
N8N_CONTAINERS_KEEPALIVE=true pnpm test:container:sqlite --grep "@capability:email" --workers 1
```
After tests complete, connection details are printed:
```
=== KEEPALIVE: Containers left running for debugging ===
URL: http://localhost:54321
Project: n8n-stack-abc123
Cleanup: pnpm --filter n8n-containers stack:clean:all
=========================================================
```
Clean up when done: `pnpm --filter n8n-containers stack:clean:all`
### Victoria Export on Failure
When tests fail with observability enabled, logs and metrics are automatically exported as Currents attachments:
| Attachment | Description |
|------------|-------------|
| `container-logs` | Human-readable logs grouped by container |
| `victoria-logs-export.jsonl` | Raw logs in JSON Lines format |
| `victoria-metrics-export.jsonl` | All metrics in JSON Lines format |
#### Importing into a local Victoria instance
1. Download the `.jsonl` attachments from Currents
2. Import into running Victoria containers (e.g., from keepalive mode):
```bash
node scripts/import-victoria-data.mjs victoria-metrics-export.jsonl victoria-logs-export.jsonl
```
Or start standalone containers first with `--start`:
```bash
node scripts/import-victoria-data.mjs --start victoria-metrics-export.jsonl victoria-logs-export.jsonl
```
3. Query locally:
- **Metrics UI:** http://localhost:8428/vmui/
- **Logs UI:** http://localhost:9428/select/vmui/
## Janitor (Static Analysis)
Janitor enforces test architecture patterns via static analysis. It runs as a **pre-commit hook** and blocks new violations from being introduced.
Existing violations are tracked in a baseline file (`.janitor-baseline.json`) and don't block commits. Only **new** violations in your changed files will fail.
### Quick Commands
```bash
# Run all rules on entire codebase
pnpm janitor
# Run on a specific file
pnpm janitor --file=tests/e2e/my-test.spec.ts
# Run a specific rule
pnpm janitor --rule=dead-code
pnpm janitor --rule=selector-purity
# Dead code auto-removal
pnpm janitor:fix --rule=dead-code
# List all rules
pnpm janitor --list
# Verbose output (shows suggestions)
pnpm janitor --verbose
```
### Rules
| Rule | Severity | What it enforces |
|------|----------|------------------|
| `selector-purity` | error | Tests/flows use page objects, not raw locators |
| `scope-lockdown` | error | Page locators scoped to their container |
| `boundary-protection` | error | Pages don't import other pages |
| `no-direct-page-instantiation` | error | Access pages through the facade, not `new XPage()` |
| `dead-code` | warning | No unused methods/properties [fixable] |
| `no-page-in-flow` | warning | Flows use page objects, not `page` directly |
| `api-purity` | warning | Tests use API services, not raw HTTP calls |
| `deduplication` | warning | Same test ID defined in one page object only |
### Janitor Blocked My Commit - Now What?
When the pre-commit hook blocks your commit, you'll see output like:
```
Found 2 violation(s)
tests/e2e/my-test.spec.ts (2)
[ERR] L15: [selector-purity] Raw locator in test: page.getByTestId('save-button')
[ERR] L22: [selector-purity] Chained locator call: n8n.canvas.getNode('X').locator('.status')
```
**Steps to fix:**
1. **Read the rule name and message** - it tells you exactly what's wrong
2. **Move the selector into a page object** - the fix is almost always "put this in a page object method instead"
3. **Re-run janitor on your file** to verify: `pnpm janitor --file=<your-file>`
4. **Commit again**
**Common fixes by rule:**
| Rule | Problem | Fix |
|------|---------|-----|
| `selector-purity` | `page.getByTestId('x')` in test | Add a getter to the page object, call it from the test |
| `selector-purity` | `someLocator.locator('.child')` in test | Add a method to the page object that returns the specific element |
| `scope-lockdown` | `this.page.getByTestId('x')` in a component | Use `this.container.getByTestId('x')` instead |
| `boundary-protection` | Page importing another page | Move the composition to a flow/composable |
| `dead-code` | Unused method in page object | Delete it (or run `pnpm janitor:fix --rule=dead-code`) |
**False positive?** If you believe the violation is wrong, raise it with the QA team. Don't bypass the hook.
### Impact Analysis
Find which tests are affected by a file or method change:
```bash
# File-level: which tests use this page object?
pnpm janitor impact --file=pages/CanvasPage.ts
# Method-level: which tests call this specific method?
pnpm janitor method-impact --method=CanvasPage.addNode
# Pipe to playwright to run only affected tests
pnpm janitor impact --file=pages/CanvasPage.ts --test-list | xargs pnpm test:local
```
### Inventory (Codebase Discovery)
```bash
pnpm janitor inventory # Full inventory
pnpm janitor inventory --summary # Summary counts
pnpm janitor inventory --category=pages # Single category
```
## Writing Tests
For guidelines on writing new tests, see [CONTRIBUTING.md](./CONTRIBUTING.md).
+152
View File
@@ -0,0 +1,152 @@
import type { FrontendSettings } from '@n8n/api-types';
export class TestError extends Error {
constructor(message: string) {
super(message);
this.name = 'TestError';
}
}
/**
* Test requirements for Playwright tests.
*
* This interface allows you to declaratively specify all test setup requirements
* in one place, making tests more readable and maintainable.
* If a workflow is specified, the starting point for the test is now the canvas after the workflow is imported.
*
* @example
* ```typescript
* const requirements: TestRequirements = {
* config: {
* features: {
* aiAssistant: true,
* debugInEditor: true,
* sharing: true
* },
* settings: { telemetry: { enabled: false } }
* },
* workflow: {
* 'ai_assistant_test_workflow.json': 'AI Assistant Test Workflow'
* },
* intercepts: {
* 'ai-chat': {
* url: '*\/rest/ai/chat',
* response: { sessionId: '1', messages: [] }
* }
* },
* storage: {
* 'n8n-telemetry': '{"enabled": true}'
* }
* };
* ```
*/
export interface TestRequirements {
/**
* Configuration settings for the test environment
*/
config?: {
/** Frontend settings to override (merged with default settings) */
settings?: Partial<FrontendSettings>;
/** Feature flags to enable/disable for the test */
features?: Record<string, boolean>;
};
/**
* API route intercepts and their mock responses
*
* @example
* ```typescript
* intercepts: {
* 'ai-chat': {
* url: '*\/rest/ai/chat',
* response: {
* sessionId: '1',
* messages: [{ role: 'assistant', type: 'message', text: 'Hello!' }]
* }
* },
* 'become-creator': {
* url: '*\/rest/cta/become-creator',
* response: true
* },
* 'credentials-test': {
* url: '*\/rest/credentials/test',
* response: { data: { status: 'success', message: 'Tested successfully' } }
* }
* }
* ```
*/
intercepts?: Record<string, InterceptConfig>;
/**
* Single workflow to import for the test
*
* Key: Import file location (relative to workflows folder)
* Value: Name to give the workflow when imported
*
* Note: Only one workflow is supported. Multiple workflows will throw an error.
*
* @example
* ```typescript
* workflow: {
* 'ai_assistant_test_workflow.json': 'AI Assistant Test Workflow'
* }
* ```
*/
workflow?: string | Record<string, string>;
/**
* Browser storage values to set before the test
*
* Supports localStorage, sessionStorage, and other browser storage APIs
*
* @example
* ```typescript
* storage: {
* 'n8n-telemetry': '{"enabled": true}',
* 'n8n-instance-id': 'test-instance-id'
* }
* ```
*/
storage?: Record<string, string>;
}
/**
* Configuration for API route interception in Playwright
*
* @example
* ```typescript
* {
* url: '*\/rest/ai/chat',
* response: { sessionId: '1', messages: [] },
* status: 200
* }
* ```
*
* @example Network error simulation
* ```typescript
* {
* url: '*\/rest/credentials/test',
* forceNetworkError: true
* }
* ```
*/
export interface InterceptConfig {
/** URL pattern to intercept (supports wildcards) */
url: string;
/** Mock response data */
response?: unknown;
/** HTTP status code to return (default: 200) */
status?: number;
/** HTTP headers to return */
headers?: Record<string, string>;
/** Content type for the response (default: 'application/json') */
contentType?: string;
/** Force network error instead of mock response */
forceNetworkError?: boolean;
}
@@ -0,0 +1,150 @@
import { expect } from '@playwright/test';
import type { n8nPage } from '../pages/n8nPage';
export class CanvasComposer {
constructor(private readonly n8n: n8nPage) {}
/**
* Pin the data on a node. Then close the node.
* @param nodeName - The name of the node to pin the data on.
*/
async pinNodeData(nodeName: string) {
await this.n8n.canvas.openNode(nodeName);
await this.n8n.ndv.togglePinData();
await this.n8n.ndv.close();
}
/**
* Copy selected nodes and verify success toast
*/
async copySelectedNodesWithToast(): Promise<void> {
await this.n8n.clipboard.grant();
await this.n8n.canvas.copyNodes();
await this.n8n.notifications.waitForNotificationAndClose('Copied to clipboard');
}
/**
* Select all nodes and copy them
*/
async selectAllAndCopy(): Promise<void> {
await this.n8n.clipboard.grant();
await this.n8n.canvas.selectAll();
await this.copySelectedNodesWithToast();
}
/**
* Get workflow JSON from clipboard
* Grants permissions, selects all, copies, and returns parsed workflow
* @returns The parsed workflow object from clipboard
*/
async getWorkflowFromClipboard(): Promise<{
nodes: Array<{ credentials?: Record<string, unknown> }>;
meta?: Record<string, unknown>;
}> {
await this.n8n.clipboard.grant();
await this.n8n.canvas.selectAll();
await this.n8n.canvas.copyNodes();
const workflowJSON = await this.n8n.clipboard.readText();
return JSON.parse(workflowJSON);
}
/**
* Switch between editor and workflow history and back
*/
async switchBetweenEditorAndHistory(): Promise<void> {
await this.n8n.canvas.openWorkflowHistory();
await this.n8n.canvas.closeWorkflowHistory();
await this.n8n.page.waitForLoadState();
await expect(this.n8n.canvas.getCanvasNodes().first()).toBeVisible();
await expect(this.n8n.canvas.getCanvasNodes().last()).toBeVisible();
}
/**
* Switch between editor and workflow list and back
*/
async switchBetweenEditorAndWorkflowList(): Promise<void> {
await this.n8n.sideBar.clickHomeButton();
await this.n8n.workflows.cards.getWorkflows().first().click();
await expect(this.n8n.canvas.getCanvasNodes().first()).toBeVisible();
await expect(this.n8n.canvas.getCanvasNodes().last()).toBeVisible();
}
/**
* Zoom in and validate that zoom functionality works
*/
async zoomInAndCheckNodes(): Promise<void> {
await this.n8n.canvas.getCanvasNodes().first().waitFor();
const initialNodeSize = await this.n8n.page.evaluate(() => {
const firstNode = document.querySelector('[data-test-id="canvas-node"]');
if (!firstNode) {
throw new Error('Canvas node not found during initial measurement');
}
return firstNode.getBoundingClientRect().width;
});
for (let i = 0; i < 4; i++) {
await this.n8n.canvas.clickZoomInButton();
}
const finalNodeSize = await this.n8n.page.evaluate(() => {
const firstNode = document.querySelector('[data-test-id="canvas-node"]');
if (!firstNode) {
throw new Error('Canvas node not found during final measurement');
}
return firstNode.getBoundingClientRect().width;
});
// Validate zoom increased node sizes by at least 50%
const zoomWorking = finalNodeSize > initialNodeSize * 1.5;
if (!zoomWorking) {
throw new Error(
"Zoom functionality not working: nodes didn't scale properly. " +
`Initial: ${initialNodeSize.toFixed(1)}px, Final: ${finalNodeSize.toFixed(1)}px`,
);
}
}
/**
* Rename a node using keyboard shortcut
* @param oldName - The current name of the node
* @param newName - The new name for the node
*/
async renameNodeViaShortcut(oldName: string, newName: string): Promise<void> {
await this.n8n.canvas.nodeByName(oldName).click();
await this.n8n.page.keyboard.press('F2');
await expect(this.n8n.canvas.getRenamePrompt()).toBeVisible();
await this.n8n.page.keyboard.type(newName);
await this.n8n.page.keyboard.press('Enter');
}
/**
* Reload the page and wait for canvas to be ready
*/
async reloadAndWaitForCanvas(): Promise<void> {
await this.n8n.page.reload();
await expect(this.n8n.canvas.getNodeViewLoader()).toBeHidden();
await expect(this.n8n.canvas.getLoadingMask()).toBeHidden();
}
/**
* Wait for workflow save to complete and URL to be updated with the workflow ID.
* Use this when you need the workflow URL/ID immediately after saving.
* @returns The workflow URL after save
*/
async waitForWorkflowSaveAndUrl(): Promise<string> {
const isNewWorkflow = this.n8n.page.url().includes('/workflow/new');
if (isNewWorkflow) {
await this.n8n.canvas.waitForSaveWorkflowCompleted();
// Wait for URL to update after response
await this.n8n.page.waitForURL(/\/workflow\/[a-zA-Z0-9]+$/);
} else {
await this.n8n.canvas.waitForSaveWorkflowCompleted();
}
return this.n8n.page.url();
}
}
@@ -0,0 +1,51 @@
import type { CreateCredentialDto } from '@n8n/api-types';
import type { n8nPage } from '../pages/n8nPage';
export class CredentialsComposer {
constructor(private readonly n8n: n8nPage) {}
/**
* Create a credential through the Credentials list UI.
* Expects the visible label of the credential type (e.g. 'Notion API').
*/
async createFromList(
credentialType: string,
fields: Record<string, string>,
options?: { name?: string; projectId?: string; closeDialog?: boolean },
) {
if (options?.projectId) {
await this.n8n.navigate.toCredentials(options.projectId);
} else {
await this.n8n.navigate.toCredentials();
}
await this.n8n.credentials.addResource.credential();
await this.n8n.credentials.createCredentialFromCredentialPicker(credentialType, fields, {
name: options?.name,
closeDialog: options?.closeDialog,
});
}
/**
* Create a credential through the NDV flow.
* Type is implied by the open node's credential requirement.
*/
async createFromNdv(
fields: Record<string, string>,
options?: { name?: string; closeDialog?: boolean },
) {
await this.n8n.ndv.clickCreateNewCredential();
await this.n8n.canvas.credentialModal.addCredential(fields, {
name: options?.name,
closeDialog: options?.closeDialog,
});
}
/**
* Create a credential directly via API. Returns created credential object.
*/
async createFromApi(payload: CreateCredentialDto & { projectId?: string }) {
return await this.n8n.api.credentials.createCredential(payload);
}
}
@@ -0,0 +1,42 @@
import type { n8nPage } from '../pages/n8nPage';
export class DataTableComposer {
constructor(private readonly n8n: n8nPage) {}
async createNewDataTable(name: string) {
const nameInput = this.n8n.dataTable.getNewDataTableNameInput();
await nameInput.fill(name);
await this.n8n.dataTable.getFromScratchOption().click();
await this.n8n.dataTable.getProceedFromSelectButton().click();
}
/**
* Creates project and data table inside it, navigating to project 'Data Table' tab
* @param projectName
* @param dataTableName
* @param source - from where the creation is initiated (empty state or header dropdown)
*/
async createDataTableInNewProject(
projectName: string,
dataTableName: string,
source: 'empty-state' | 'header-dropdown',
fromDataTableTab: boolean = true,
) {
await this.n8n.projectComposer.createProject(projectName);
const { projectId } = await this.n8n.projectComposer.createProject();
if (fromDataTableTab) {
await this.n8n.page.goto(`projects/${projectId}/datatables`);
} else {
await this.n8n.page.goto(`projects/${projectId}`);
}
if (source === 'empty-state') {
await this.n8n.dataTable.clickEmptyStateButton();
} else {
await this.n8n.dataTable.clickAddDataTableAction(fromDataTableTab);
}
await this.n8n.dataTableComposer.createNewDataTable(dataTableName);
await this.n8n.page.goto(`projects/${projectId}/datatables`);
}
}
@@ -0,0 +1,59 @@
import type { n8nPage } from '../pages/n8nPage';
/**
* A class for user interactions with workflow executions that go across multiple pages.
*/
export class ExecutionsComposer {
constructor(private readonly n8n: n8nPage) {}
/**
* Creates workflow executions by executing the workflow multiple times.
* Waits for each execution to complete (by waiting for the POST /rest/workflows/:id/run response)
* before starting the next one.
*
* @param count - Number of executions to create
* @example
* // Create 10 executions
* await n8n.executionsComposer.createExecutions(10);
*/
async createExecutions(count: number): Promise<void> {
for (let i = 0; i < count; i++) {
const responsePromise = this.n8n.page.waitForResponse(
(response) =>
response.url().includes('/rest/workflows/') &&
response.url().includes('/run') &&
response.request().method() === 'POST',
);
await this.n8n.canvas.clickExecuteWorkflowButton();
await responsePromise;
}
}
/**
* Execute a specific node and capture the workflow run request payload.
* Sets up request interception before executing the node, then returns the parsed request body.
* Useful for testing the payload structure sent to the workflow run API.
*
* @param nodeName - The name of the node to execute
* @returns The parsed request body from the workflow run API call
* @example
* // Execute a node and verify payload structure
* const payload = await n8n.executionsComposer.executeNodeAndCapturePayload('Process The Data');
* expect(payload).toHaveProperty('runData');
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
async executeNodeAndCapturePayload(nodeName: string): Promise<any> {
const workflowRunPromise = this.n8n.page.waitForRequest(
(request) =>
request.url().includes('/rest/workflows/') &&
request.url().includes('/run') &&
request.method() === 'POST',
);
await this.n8n.canvas.executeNode(nodeName);
const workflowRunRequest = await workflowRunPromise;
return workflowRunRequest.postDataJSON();
}
}
@@ -0,0 +1,69 @@
import { expect } from '@playwright/test';
import { authenticator } from 'otplib';
import type { n8nPage } from '../pages/n8nPage';
export class MfaComposer {
constructor(private readonly n8n: n8nPage) {}
/**
* Enable MFA for a user using predefined secret
* @param email - User email
* @param password - User password
* @param mfaSecret - Known MFA secret to use for token generation
*/
async enableMfa(email: string, password: string, mfaSecret: string): Promise<void> {
await this.n8n.signIn.loginWithEmailAndPassword(email, password, true);
await this.n8n.settingsPersonal.goto();
await this.n8n.settingsPersonal.clickEnableMfa();
await this.n8n.mfaSetupModal.getModalContainer().waitFor({ state: 'visible' });
await this.n8n.mfaSetupModal.clickCopySecretToClipboard();
const token = authenticator.generate(mfaSecret);
await this.n8n.mfaSetupModal.fillToken(token);
await expect(this.n8n.mfaSetupModal.getDownloadRecoveryCodesButton()).toBeVisible();
await this.n8n.mfaSetupModal.clickDownloadRecoveryCodes();
await this.n8n.mfaSetupModal.clickSave();
await this.n8n.mfaSetupModal.waitForHidden();
}
/**
* Login with MFA code
* @param email - User email
* @param password - User password
* @param mfaSecret - Known MFA secret for token generation
*/
async loginWithMfaCode(email: string, password: string, mfaSecret: string): Promise<void> {
await this.n8n.signIn.fillEmail(email);
await this.n8n.signIn.fillPassword(password);
await this.n8n.signIn.clickSubmit();
await expect(this.n8n.mfaLogin.getForm()).toBeVisible();
const loginMfaCode = authenticator.generate(mfaSecret);
await this.n8n.mfaLogin.submitMfaCode(loginMfaCode);
await expect(this.n8n.page).toHaveURL(/workflows/);
}
/**
* Login with MFA recovery code
* @param email - User email
* @param password - User password
* @param recoveryCode - Known recovery code
*/
async loginWithMfaRecoveryCode(
email: string,
password: string,
recoveryCode: string,
): Promise<void> {
await this.n8n.signIn.fillEmail(email);
await this.n8n.signIn.fillPassword(password);
await this.n8n.signIn.clickSubmit();
await expect(this.n8n.mfaLogin.getForm()).toBeVisible();
await this.n8n.mfaLogin.submitMfaRecoveryCode(recoveryCode);
await expect(this.n8n.page).toHaveURL(/workflows/);
}
}
@@ -0,0 +1,66 @@
import type { n8nPage } from '../pages/n8nPage';
/**
* A class for user interactions with Node Details View (NDV) that involve multi-step workflows.
*/
export class NodeDetailsViewComposer {
constructor(private readonly n8n: n8nPage) {}
/**
* Selects a workflow from the resource locator list by name
* @param paramName - The parameter name for the resource locator
* @param workflowName - The name of the workflow to select
*/
async selectWorkflowFromList(paramName: string, workflowName: string): Promise<void> {
await this.n8n.ndv.openResourceLocator(paramName);
const items = this.n8n.page.getByTestId('rlc-item');
const targetItem = items.filter({ hasText: workflowName });
await targetItem.first().click();
}
/**
* Filters the resource locator list by search term
* @param paramName - The parameter name for the resource locator
* @param searchTerm - The term to search for
*/
async filterWorkflowList(paramName: string, searchTerm: string): Promise<void> {
await this.n8n.ndv.openResourceLocator(paramName);
await this.n8n.ndv.getResourceLocatorSearch(paramName).fill(searchTerm);
}
/**
* Selects the first workflow item from a filtered list
*/
async selectFirstFilteredWorkflow(): Promise<void> {
const items = this.n8n.page.getByTestId('rlc-item');
await items.first().click();
}
/**
* Switches a resource locator to expression mode
* @param paramName - The parameter name for the resource locator
* @param workflowName - The workflow to select before switching to expression mode
*/
async switchToExpressionMode(paramName: string, workflowName?: string): Promise<void> {
if (workflowName) {
await this.selectWorkflowFromList(paramName, workflowName);
}
// Switch to expression mode
await this.n8n.page.getByTestId('radio-button-expression').nth(1).click();
}
/**
* Clicks add resource option to create a new sub-workflow
* @param paramName - The parameter name for the resource locator
*/
async createNewSubworkflow(paramName: string): Promise<void> {
await this.n8n.ndv.openResourceLocator(paramName);
const addResourceItem = this.n8n.page.getByTestId('rlc-item-add-resource').first();
await addResourceItem.waitFor({ state: 'visible' });
await addResourceItem.click();
}
}
@@ -0,0 +1,30 @@
import type { n8nPage } from '../pages/n8nPage';
/**
* Composer for OIDC-related operations in E2E tests.
* Handles configuring OIDC settings.
*/
export class OidcComposer {
constructor(private readonly n8n: n8nPage) {}
/**
* Configure OIDC via UI form.
*
* @param discoveryUrl - The discovery URL for n8n backend (e.g., https://keycloak:8443/...)
* @param clientId - The OIDC client ID
* @param clientSecret - The OIDC client secret
*/
async configureOidc(discoveryUrl: string, clientId: string, clientSecret: string): Promise<void> {
const { settingsSso } = this.n8n;
await settingsSso.goto();
await settingsSso.selectOidcProtocol();
await settingsSso.fillOidcForm({
discoveryEndpoint: discoveryUrl,
clientId,
clientSecret,
enableLogin: true,
});
await settingsSso.saveOidcConfig();
}
}
@@ -0,0 +1,112 @@
import { expect } from '@playwright/test';
import type { n8nPage } from '../pages/n8nPage';
/**
* A class for partial execution testing workflows that involve
* complex multi-step scenarios across pages.
*/
export class PartialExecutionComposer {
constructor(private readonly n8n: n8nPage) {}
/**
* Sets up partial execution version 2 in localStorage
* This enables the v2 partial execution feature
*/
async enablePartialExecutionV2(): Promise<void> {
await this.n8n.page.evaluate(() => {
window.localStorage.setItem('PartialExecution.version', '2');
});
}
/**
* Executes a full workflow and verifies all nodes show success status
* @param nodeNames - Array of node names to verify
*/
async executeFullWorkflowAndVerifySuccess(nodeNames: string[]): Promise<void> {
await this.n8n.canvas.clickExecuteWorkflowButton();
// Verify all nodes show success status
for (const nodeName of nodeNames) {
await expect(this.n8n.canvas.getNodeSuccessStatusIndicator(nodeName)).toBeVisible();
}
}
/**
* Captures output data from a node for later comparison
* @param nodeName - The node to capture data from
* @returns The captured text content
*/
async captureNodeOutputData(nodeName: string): Promise<string> {
await this.n8n.canvas.openNode(nodeName);
await this.n8n.ndv.outputPanel.getTable().waitFor();
// Note: Using row 0 for tbody (equivalent to row 1 in Cypress which includes header)
const cell = this.n8n.ndv.outputPanel.getTbodyCell(0, 0);
await expect(cell).toHaveText(/.+/);
const beforeText = await cell.textContent();
await this.n8n.ndv.close();
return beforeText!;
}
/**
* Modifies a node parameter to trigger stale state
* @param nodeName - The node to modify
*/
async modifyNodeToTriggerStaleState(nodeName: string): Promise<void> {
await this.n8n.canvas.openNode(nodeName);
await this.n8n.ndv.clickAssignmentCollectionDropArea();
// Verify stale node indicator appears after parameter change
await expect(this.n8n.ndv.getStaleNodeIndicator()).toBeVisible();
await this.n8n.ndv.close();
}
/**
* Verifies node states after parameter change for partial execution v2
* @param unchangedNodes - Nodes that should still show success
* @param modifiedNodes - Nodes that should show warning (need re-execution)
*/
async verifyNodeStatesAfterChange(
unchangedNodes: string[],
modifiedNodes: string[],
): Promise<void> {
// Verify unchanged nodes still show success
for (const nodeName of unchangedNodes) {
await expect(this.n8n.canvas.getNodeSuccessStatusIndicator(nodeName)).toBeVisible();
}
// Verify modified nodes show warning status
for (const nodeName of modifiedNodes) {
await expect(this.n8n.canvas.getNodeWarningStatusIndicator(nodeName)).toBeVisible();
}
}
/**
* Performs partial execution on a node and verifies all nodes return to success
* @param targetNodeName - The node to execute from
* @param allNodeNames - All nodes that should show success after partial execution
*/
async performPartialExecutionAndVerifySuccess(
targetNodeName: string,
allNodeNames: string[],
): Promise<void> {
// Perform partial execution by clicking execute button on target node
await this.n8n.canvas.executeNode(targetNodeName);
// Verify all nodes show success status after partial execution
for (const nodeName of allNodeNames) {
await expect(this.n8n.canvas.getNodeSuccessStatusIndicator(nodeName)).toBeVisible();
}
}
/**
* Opens a node for data verification (test should handle the assertion)
* @param nodeName - The node to open for verification
* @returns Promise that resolves when node is open and ready for verification
*/
async openNodeForDataVerification(nodeName: string): Promise<void> {
await this.n8n.canvas.openNode(nodeName);
await this.n8n.ndv.outputPanel.getTable().waitFor();
}
}
@@ -0,0 +1,53 @@
import { nanoid } from 'nanoid';
import type { n8nPage } from '../pages/n8nPage';
export class ProjectComposer {
constructor(private readonly n8n: n8nPage) {}
/**
* Create a project and return the project name and ID. If no project name is provided, a unique name will be generated.
* @param projectName - The name of the project to create.
* @returns The project name and ID.
*/
async createProject(projectName?: string) {
await this.n8n.page.getByTestId('universal-add').click();
await this.n8n.page.getByTestId('navigation-menu-item').filter({ hasText: 'Project' }).click();
await this.n8n.notifications.waitForNotificationAndClose('saved successfully');
await this.n8n.page.waitForLoadState();
const projectNameUnique = projectName ?? `Project ${nanoid(8)}`;
await this.n8n.projectSettings.fillProjectName(projectNameUnique);
await this.n8n.projectSettings.clickSaveButton();
const projectId = this.extractProjectIdFromPage('projects', 'settings');
return { projectName: projectNameUnique, projectId };
}
/**
* Add a new credential to a project.
* @param projectName - The name of the project to add the credential to.
* @param credentialType - The type of credential to add by visible name e.g 'Notion API'
* @param credentialFieldName - The name of the field to add the credential to. e.g. 'apiKey' which would be data-test-id='parameter-input-apiKey'
* @param credentialValue - The value of the credential to add.
*/
async addCredentialToProject(
projectName: string,
credentialType: string,
credentialFieldName: string,
credentialValue: string,
) {
await this.n8n.sideBar.openNewCredentialDialogForProject(projectName);
await this.n8n.credentials.createCredentialFromCredentialPicker(credentialType, {
[credentialFieldName]: credentialValue,
});
}
extractIdFromUrl(url: string, beforeWord: string, afterWord: string): string {
const path = url.includes('://') ? new URL(url).pathname : url;
const match = path.match(new RegExp(`/${beforeWord}/([^/]+)/${afterWord}`));
return match?.[1] ?? '';
}
extractProjectIdFromPage(beforeWord: string, afterWord: string): string {
return this.extractIdFromUrl(this.n8n.page.url(), beforeWord, afterWord);
}
}
@@ -0,0 +1,65 @@
import { expect } from '@playwright/test';
import type { n8nPage } from '../pages/n8nPage';
/**
* A class for user interactions with templates that go across multiple pages.
*/
export class TemplatesComposer {
constructor(private readonly n8n: n8nPage) {}
/**
* Navigates to templates page, waits for loading to complete,
* selects the first available template, and imports it to a new workflow
* @returns Promise that resolves when the template has been imported
*/
async importFirstTemplate(): Promise<void> {
await this.n8n.navigate.toTemplates();
await expect(this.n8n.templates.getSkeletonLoader()).toBeHidden();
await expect(this.n8n.templates.getFirstTemplateCard()).toBeVisible();
await expect(this.n8n.templates.getTemplatesLoadingContainer()).toBeHidden();
await this.n8n.templates.clickFirstTemplateCard();
await expect(this.n8n.templates.getUseTemplateButton()).toBeVisible();
await this.n8n.templates.clickUseTemplateButton();
// New workflows redirect to /workflow/<id>?new=true with optional templateId
await expect(this.n8n.page).toHaveURL(/\/workflow\/[a-zA-Z0-9_-]+\?.*new=true/);
}
/**
* Fill in dummy credentials for an app in the template credential setup flow
* Opens credential creation, fills name, saves, and closes modal
* @param appName - The name of the app (e.g. 'Shopify', 'X (Formerly Twitter)')
*/
async fillDummyCredentialForApp(
appName: string,
{ fields }: { fields: Record<string, string> } = { fields: {} },
): Promise<void> {
await this.n8n.templateCredentialSetup.openCredentialCreation(appName);
await this.n8n.templateCredentialSetup.credentialModal.getCredentialName().click();
await this.n8n.templateCredentialSetup.credentialModal.getNameInput().fill('test');
await this.n8n.templateCredentialSetup.credentialModal.fillAllFields(fields);
await this.n8n.templateCredentialSetup.credentialModal.save();
await this.n8n.templateCredentialSetup.credentialModal.close();
}
/**
* Fill in dummy credentials for an OAuth app.
* OAuth credentials have no Save button — clicking Connect implicitly saves.
* @param appName - The name of the app (e.g. 'X (Formerly Twitter)')
*/
async fillDummyCredentialForOAuthApp(
appName: string,
{ fields }: { fields: Record<string, string> } = { fields: {} },
): Promise<void> {
await this.n8n.templateCredentialSetup.openCredentialCreation(appName);
await this.n8n.templateCredentialSetup.credentialModal.getCredentialName().click();
await this.n8n.templateCredentialSetup.credentialModal.getNameInput().fill('test');
await this.n8n.templateCredentialSetup.credentialModal.fillAllFields(fields);
await this.n8n.templateCredentialSetup.credentialModal.oauthConnectButton.click();
await this.n8n.templateCredentialSetup.credentialModal.close();
await this.n8n.templateCredentialSetup.dismissMessageBox();
}
}
@@ -0,0 +1,110 @@
import type { Page } from '@playwright/test';
import { setupDefaultInterceptors } from '../config/intercepts';
import type { n8nPage } from '../pages/n8nPage';
import type { TestUser } from '../services/user-api-helper';
/**
* Composer for UI test entry points. All methods in this class navigate to or verify UI state.
* For API-only testing, use the standalone `api` fixture directly instead.
*/
export class TestEntryComposer {
constructor(private readonly n8n: n8nPage) {}
/**
* Start UI test from the home page and navigate to canvas
*/
async fromHome() {
await this.n8n.goHome();
await this.n8n.page.waitForURL('/home/workflows');
}
/**
* Start UI test from a blank canvas (assumes already on canvas)
*/
async fromBlankCanvas() {
await this.n8n.navigate.toWorkflow('new');
// Verify we're on canvas
await this.n8n.canvas.canvasPane().isVisible();
}
/**
* Start UI test from a workflow in a new project on a new canvas
*/
async fromNewProjectBlankCanvas() {
// Enable features to allow us to create a new project
await this.n8n.api.enableFeature('projectRole:admin');
await this.n8n.api.enableFeature('projectRole:editor');
await this.n8n.api.setMaxTeamProjectsQuota(-1);
// Create a project using the API
const response = await this.n8n.api.projects.createProject();
const projectId = response.id;
await this.n8n.page.goto(`workflow/new?projectId=${projectId}`);
await this.n8n.canvas.canvasPane().isVisible();
return projectId;
}
async fromNewProject() {
const response = await this.n8n.api.projects.createProject();
const projectId = response.id;
await this.n8n.navigate.toProject(projectId);
return projectId;
}
/**
* Start UI test from the canvas of an imported workflow
* Returns the workflow import result for use in the test
*/
async fromImportedWorkflow(workflowFile: string) {
const workflowImportResult = await this.n8n.api.workflows.importWorkflowFromFile(workflowFile);
await this.n8n.page.goto(`workflow/${workflowImportResult.workflowId}`);
return workflowImportResult;
}
/**
* Start UI test on a new page created by an action
* @param action - The action that will create a new page
* @returns n8nPage instance for the new page
*/
async fromNewPage(action: () => Promise<void>): Promise<n8nPage> {
const newPagePromise = this.n8n.page.waitForEvent('popup');
await action();
const newPage = await newPagePromise;
await newPage.waitForLoadState('domcontentloaded');
// Use the constructor from the current instance to avoid circular dependency
const n8nPageConstructor = this.n8n.constructor as new (page: Page) => n8nPage;
return new n8nPageConstructor(newPage);
}
/**
* Enable project feature set
* Allow project creation, sharing, and folder creation
*/
async withProjectFeatures() {
await this.n8n.api.enableFeature('sharing');
await this.n8n.api.enableFeature('folders');
await this.n8n.api.enableFeature('advancedPermissions');
await this.n8n.api.enableFeature('projectRole:admin');
await this.n8n.api.enableFeature('projectRole:editor');
await this.n8n.api.setMaxTeamProjectsQuota(-1);
}
/**
* Create a new isolated user context with fresh page and authentication.
* Use this when you need a browser context for UI interactions.
* For API-only operations, use `api.createApiForUser()` instead.
* @param user - User with email and password
* @returns Fresh n8nPage instance with user authentication
*/
async withUser(user: Pick<TestUser, 'email' | 'password'>): Promise<n8nPage> {
const browser = this.n8n.page.context().browser()!;
const context = await browser.newContext();
await setupDefaultInterceptors(context);
const page = await context.newPage();
const newN8n = new (this.n8n.constructor as new (page: Page) => n8nPage)(page);
await newN8n.api.login({ email: user.email, password: user.password });
return newN8n;
}
}
@@ -0,0 +1,159 @@
import { expect } from '@playwright/test';
import { nanoid } from 'nanoid';
import type { n8nPage } from '../pages/n8nPage';
/**
* A class for user interactions with workflows that go across multiple pages.
*/
export class WorkflowComposer {
constructor(private readonly n8n: n8nPage) {}
/**
* Executes a successful workflow and waits for the notification to be closed.
* This waits for http calls and also closes the notification.
*/
async executeWorkflowAndWaitForNotification(
notificationMessage: string,
options: { timeout?: number } = {},
) {
const { timeout = 3000 } = options;
const responsePromise = this.n8n.page.waitForResponse(
(response) =>
response.url().includes('/rest/workflows/') &&
response.url().includes('/run') &&
response.request().method() === 'POST',
);
await this.n8n.canvas.clickExecuteWorkflowButton();
await responsePromise;
await this.n8n.notifications.waitForNotificationAndClose(notificationMessage, { timeout });
}
/**
* Creates a new workflow by clicking the add workflow button and setting the name
* Workflow is autosaved after a name update
* @param workflowName - The name of the workflow to create
*/
async createWorkflow(workflowName = 'My New Workflow') {
await this.n8n.workflows.addResource.workflow();
await this.n8n.canvas.setWorkflowName(workflowName);
await this.n8n.page.keyboard.press('Enter');
await this.n8n.canvas.waitForSaveWorkflowCompleted();
}
/**
* Creates a new workflow by clicking the add workflow button
* Workflow is autosaved after a name update
* @param workflowName - The name of the workflow to create
*/
async createWorkflowFromSidebar(workflowName = 'My New Workflow') {
await this.n8n.sideBar.addWorkflowFromUniversalAdd('Personal');
await this.n8n.canvas.setWorkflowName(workflowName);
await this.n8n.page.keyboard.press('Enter');
await this.n8n.canvas.waitForSaveWorkflowCompleted();
}
/**
* Creates a new workflow by importing a JSON file
* @param fileName - The workflow JSON file name (e.g., 'test_pdf_workflow.json', will search in workflows folder)
* @param name - Optional custom name. If not provided, generates a unique name
* @returns The actual workflow name that was used
*/
async createWorkflowFromJsonFile(
fileName: string,
name?: string,
): Promise<{ workflowName: string }> {
const workflowName = name ?? `Imported Workflow ${nanoid(8)}`;
await this.n8n.goHome();
await this.n8n.workflows.addResource.workflow();
await this.n8n.canvas.importWorkflow(fileName, workflowName);
return { workflowName };
}
/**
* Duplicates a workflow via the duplicate modal UI.
* Verifies the form interaction completes without errors.
* Note: This opens a new window/tab with the duplicated workflow but doesn't interact with it.
* @param name - The name for the duplicated workflow
* @param tag - Optional tag to add to the workflow
*/
async duplicateWorkflow(name: string, tag?: string): Promise<void> {
await this.n8n.workflowSettingsModal.getWorkflowMenu().click();
await this.n8n.workflowSettingsModal.getDuplicateMenuItem().click();
const modal = this.n8n.workflowSettingsModal.getDuplicateModal();
await expect(modal).toBeVisible();
const nameInput = this.n8n.workflowSettingsModal.getDuplicateNameInput();
await expect(nameInput).toBeVisible();
await nameInput.press('ControlOrMeta+a');
await nameInput.fill(name);
if (tag) {
const tagsInput = this.n8n.workflowSettingsModal.getDuplicateTagsInput();
await tagsInput.fill(tag);
await tagsInput.press('Enter');
await tagsInput.press('Escape');
}
const saveButton = this.n8n.workflowSettingsModal.getDuplicateSaveButton();
await expect(saveButton).toBeVisible();
await saveButton.click();
}
/**
* Moves a workflow to a different project or user.
* @param workflowName - The name of the workflow to move
* @param projectNameOrEmail - The destination project name or user email
* @param folder - The folder name (e.g., 'My Folder') or 'No folder (project root)' to place the workflow at project root level.
* Pass null when moving to another user's personal project, as users cannot create folders in other users' personal spaces,
* so the folder dropdown will not be shown. Defaults to 'No folder (project root)' which places the workflow at the root level.
*/
async moveToProject(
workflowName: string,
projectNameOrEmail: string,
folder: string | null = 'No folder (project root)',
): Promise<void> {
const workflowCard = this.n8n.workflows.cards.getWorkflow(workflowName);
await this.n8n.workflows.cards.openCardActions(workflowCard);
await this.n8n.workflows.cards.getCardAction('moveToFolder').click();
await this.selectProjectInMoveModal(projectNameOrEmail);
if (folder !== null) {
// Wait for folder dropdown to appear after project selection
await this.n8n.resourceMoveModal.getFolderSelect().waitFor({ state: 'visible' });
await this.selectFolderInMoveModal(folder);
}
await this.n8n.resourceMoveModal.clickConfirmMoveButton();
}
private async selectProjectInMoveModal(projectNameOrEmail: string): Promise<void> {
const workflowSelect = this.n8n.resourceMoveModal.getProjectSelect();
const input = workflowSelect.locator('input');
await input.click();
await input.waitFor({ state: 'visible' });
await this.n8n.page.keyboard.press('ControlOrMeta+a');
await this.n8n.page.keyboard.press('Backspace');
await this.n8n.page.keyboard.type(projectNameOrEmail, { delay: 50 });
const projectOption = this.n8n.page
.getByTestId('project-sharing-info')
.getByText(projectNameOrEmail)
.first();
await projectOption.waitFor({ state: 'visible' });
await projectOption.click();
}
private async selectFolderInMoveModal(folderName: string): Promise<void> {
await this.n8n.resourceMoveModal.getFolderSelect().locator('input').click();
await this.n8n.page.keyboard.type(folderName, { delay: 50 });
const folderOption = this.n8n.page.getByTestId('move-to-folder-option').getByText(folderName);
await folderOption.waitFor({ state: 'visible' });
await folderOption.click();
}
}
@@ -0,0 +1,280 @@
import type { TestRequirements } from '../Types';
// #region Mock AI Responses
export const simpleAssistantResponse = {
sessionId: '1',
messages: [
{
role: 'assistant',
type: 'message',
text: 'Hey, this is an assistant message',
},
],
};
export const codeDiffSuggestionResponse = {
sessionId: '1',
messages: [
{
role: 'assistant',
type: 'message',
text: 'Hi there! Here is my top solution to fix the error in your **Code** node 👇',
},
{
role: 'assistant',
type: 'code-diff',
description:
"Fix the syntax error by changing '1asd' to a valid value. In this case, it seems like '1' was intended.",
suggestionId: '1',
codeDiff:
'@@ -2,2 +2,2 @@\\n item.json.myNewField = 1asd;\\n+ item.json.myNewField = 1;\\n',
quickReplies: [
{
text: 'Give me another solution',
type: 'new-suggestion',
},
],
},
],
};
export const applyCodeDiffResponse = {
data: {
sessionId:
'f9130bd7-c078-4862-a38a-369b27b0ff20-e96eb9f7-d581-4684-b6a9-fd3dfe9fe1fb-emTezIGat7bQsDdtIlbti',
parameters: {
jsCode:
"// Loop over input items and add a new field called 'myNewField' to the JSON of each one\\nfor (export const item of $input.all()) {\\n item.json.myNewField = 1;\\n}\\n\\nreturn $input.all();",
},
},
};
export const nodeExecutionSucceededResponse = {
sessionId: '1',
messages: [
{
role: 'assistant',
type: 'message',
text: '**Code** node ran successfully, did my solution help resolve your issue?',
quickReplies: [
{
text: 'Yes, thanks',
type: 'all-good',
isFeedback: true,
},
{
text: 'No, I am still stuck',
type: 'still-stuck',
isFeedback: true,
},
],
},
],
};
export const codeSnippetAssistantResponse = {
sessionId:
'f1d19ed5-0d55-4bad-b49a-f0c56bd6f76f-705b5dbf-12d4-4805-87a3-1e5b3c716d29-W1JgVNrpfitpSNF9rAjB4',
messages: [
{
role: 'assistant',
type: 'message',
text: 'To use expressions in n8n, follow these steps:\\n\\n1. Hover over the parameter where you want to use an expression.\\n2. Select **Expressions** in the **Fixed/Expression** toggle.\\n3. Write your expression in the parameter, or select **Open expression editor** to open the expressions editor. You can browse the available data in the **Variable selector**. All expressions have the format `{{ your expression here }}`.\\n\\n### Example: Get data from webhook body\\n\\nIf your webhook data looks like this:\\n\\n```json\\n[\\n {\\n \\"headers\\": {\\n \\"host\\": \\"n8n.instance.address\\",\\n ...\\n },\\n \\"params\\": {},\\n \\"query\\": {},\\n \\"body\\": {\\n \\"name\\": \\"Jim\\",\\n \\"age\\": 30,\\n \\"city\\": \\"New York\\"\\n }\\n }\\n]\\n```\\n\\nYou can use the following expression to get the value of `city`:\\n\\n```js\\n{{$json.body.city}}\\n```\\n\\nThis expression accesses the incoming JSON-formatted data using n8n\'s custom `$json` variable and finds the value of `city` (in this example, \\"New York\\").',
codeSnippet: '{{$json.body.city}}',
},
{
role: 'assistant',
type: 'message',
text: 'Did this answer solve your question?',
quickReplies: [
{
text: 'Yes, thanks',
type: 'all-good',
isFeedback: true,
},
{
text: 'No, I am still stuck',
type: 'still-stuck',
isFeedback: true,
},
],
},
],
};
// #endregion
// #region Test Requirements for different scenarios
export const aiDisabledRequirements: TestRequirements = {
config: {
settings: {
aiAssistant: { enabled: false, setup: false },
},
features: { aiAssistant: false },
},
};
export const aiEnabledRequirements: TestRequirements = {
config: {
settings: {
aiAssistant: { enabled: true, setup: true },
},
features: { aiAssistant: true, setup: true },
},
};
export const aiEnabledWithWorkflowRequirements: TestRequirements = {
config: {
settings: {
aiAssistant: { enabled: true, setup: true },
},
features: { aiAssistant: true, setup: true },
},
workflow: {
'ai_assistant_test_workflow.json': 'AI_Assistant_Test_Workflow',
},
intercepts: {
aiChat: {
url: '**/rest/ai/chat',
response: simpleAssistantResponse,
},
},
};
export const aiEnabledWithQuickRepliesRequirements: TestRequirements = {
config: {
settings: {
aiAssistant: { enabled: true, setup: true },
},
features: { aiAssistant: true },
},
workflow: {
'ai_assistant_test_workflow.json': 'AI_Assistant_Test_Workflow',
},
intercepts: {
aiChat: {
url: '**/rest/ai/chat',
response: {
sessionId: '1',
messages: [
{
role: 'assistant',
type: 'message',
text: 'Hey, this is an assistant message',
quickReplies: [
{
text: "Sure, let's do it",
type: 'yes',
},
{
text: "Nah, doesn't sound good",
type: 'no',
},
],
},
],
},
},
},
};
export const aiEnabledWithEndSessionRequirements: TestRequirements = {
config: {
settings: {
aiAssistant: { enabled: true, setup: true },
},
features: { aiAssistant: true },
},
workflow: {
'ai_assistant_test_workflow.json': 'AI_Assistant_Test_Workflow',
},
intercepts: {
aiChat: {
url: '**/rest/ai/chat',
response: {
sessionId: '1',
messages: [
{
role: 'assistant',
type: 'message',
title: 'Glad to Help',
text: "I'm glad I could help. If you have any more questions or need further assistance with your n8n workflows, feel free to ask!",
},
{
role: 'assistant',
type: 'event',
eventName: 'end-session',
},
],
},
},
},
};
export const aiEnabledWorkflowBaseRequirements: TestRequirements = {
config: {
settings: {
aiAssistant: { enabled: true, setup: true },
},
features: { aiAssistant: true, setup: true },
},
workflow: {
'ai_assistant_test_workflow.json': 'AI_Assistant_Test_Workflow',
},
};
export const aiEnabledWithCodeDiffRequirements: TestRequirements = {
...aiEnabledWorkflowBaseRequirements,
intercepts: {
aiChat: {
url: '**/rest/ai/chat',
response: codeDiffSuggestionResponse,
},
},
};
export const aiEnabledWithSimpleChatRequirements: TestRequirements = {
config: {
settings: {
aiAssistant: { enabled: true, setup: true },
},
features: { aiAssistant: true, setup: true },
},
intercepts: {
aiChat: {
url: '**/rest/ai/chat',
response: simpleAssistantResponse,
},
},
};
export const aiEnabledWithCodeSnippetRequirements: TestRequirements = {
config: {
settings: {
aiAssistant: { enabled: true, setup: true },
},
features: { aiAssistant: true, setup: true },
},
intercepts: {
aiChat: {
url: '**/rest/ai/chat',
response: codeSnippetAssistantResponse,
},
},
};
export const aiEnabledWithHttpWorkflowRequirements: TestRequirements = {
config: {
settings: {
aiAssistant: { enabled: true, setup: true },
},
features: { aiAssistant: true, setup: true },
},
workflow: {
'Simple_workflow_with_http_node.json': 'Simple HTTP Workflow',
},
};
// #endregion
@@ -0,0 +1,19 @@
import type { TestRequirements } from '../Types';
/**
* Requirements for enabling the AI workflow builder feature.
* These tests use the real Anthropic API for workflow generation,
* requiring N8N_AI_ANTHROPIC_KEY to be set in the environment.
*/
export const workflowBuilderEnabledRequirements: TestRequirements = {
config: {
settings: {
aiAssistant: { enabled: true, setup: true },
aiBuilder: { enabled: true, setup: true },
},
features: {
aiAssistant: true,
aiBuilder: true,
},
},
};
@@ -0,0 +1,51 @@
export const BACKEND_BASE_URL = 'http://localhost:5678';
export const N8N_AUTH_COOKIE = 'n8n-auth';
export const DEFAULT_USER_PASSWORD = 'PlaywrightTest123';
export const MANUAL_TRIGGER_NODE_NAME = 'Manual Trigger';
export const MANUAL_TRIGGER_NODE_DISPLAY_NAME = 'When clicking Execute workflow';
export const MANUAL_CHAT_TRIGGER_NODE_NAME = 'Chat';
export const CHAT_TRIGGER_NODE_DISPLAY_NAME = 'When chat message received';
export const SCHEDULE_TRIGGER_NODE_NAME = 'Schedule Trigger';
export const CODE_NODE_NAME = 'Code';
export const CODE_NODE_DISPLAY_NAME = 'Code in JavaScript';
export const SET_NODE_NAME = 'Set';
export const EDIT_FIELDS_SET_NODE_NAME = 'Edit Fields (Set)';
export const LOOP_OVER_ITEMS_NODE_NAME = 'Loop Over Items';
export const IF_NODE_NAME = 'If';
export const MERGE_NODE_NAME = 'Merge';
export const SWITCH_NODE_NAME = 'Switch';
export const GMAIL_NODE_NAME = 'Gmail';
export const TRELLO_NODE_NAME = 'Trello';
export const NOTION_NODE_NAME = 'Notion';
export const PIPEDRIVE_NODE_NAME = 'Pipedrive';
export const HTTP_REQUEST_NODE_NAME = 'HTTP Request';
export const AGENT_NODE_NAME = 'AI Agent';
export const BASIC_LLM_CHAIN_NODE_NAME = 'Basic LLM Chain';
export const AI_MEMORY_WINDOW_BUFFER_MEMORY_NODE_NAME = 'Simple Memory';
export const AI_TOOL_CALCULATOR_NODE_NAME = 'Calculator';
export const AI_TOOL_CODE_NODE_NAME = 'Code Tool';
export const AI_TOOL_WIKIPEDIA_NODE_NAME = 'Wikipedia';
export const AI_TOOL_HTTP_NODE_NAME = 'HTTP Request Tool';
export const AI_LANGUAGE_MODEL_OPENAI_CHAT_MODEL_NODE_NAME = 'OpenAI Chat Model';
export const AI_MEMORY_POSTGRES_NODE_NAME = 'Postgres Chat Memory';
export const AI_MEMORY_REDIS_CHAT_NODE_NAME = 'Redis Chat Memory';
export const AI_OUTPUT_PARSER_AUTO_FIXING_NODE_NAME = 'Auto-fixing Output Parser';
export const WEBHOOK_NODE_NAME = 'Webhook';
export const EXECUTE_WORKFLOW_NODE_NAME = 'Execute Workflow';
export const NO_OPERATION_NODE_NAME = 'No Operation, do nothing';
export const HACKER_NEWS_NODE_NAME = 'Hacker News';
export const NEW_GOOGLE_ACCOUNT_NAME = 'Gmail account';
export const NEW_TRELLO_ACCOUNT_NAME = 'Trello account';
export const NEW_NOTION_ACCOUNT_NAME = 'Notion account';
export const NEW_QUERY_AUTH_ACCOUNT_NAME = 'Query Auth account';
export const E2E_TEST_NODE_NAME = 'E2E Test';
export const TOOL_SUBCATEGORY = 'Action in an app';
export const HITL_TOOL_SUBCATEGORY = 'Human review';
export const ROUTES = {
NEW_WORKFLOW_PAGE: '/workflow/new',
};
@@ -0,0 +1,123 @@
import type { BrowserContext, Route } from '@playwright/test';
import cloneDeep from 'lodash/cloneDeep';
import merge from 'lodash/merge';
const contextSettings = new Map<BrowserContext, Partial<Record<string, unknown>>>();
export function setContextSettings(
context: BrowserContext,
settings: Partial<Record<string, unknown>>,
) {
contextSettings.set(context, settings);
}
export function getContextSettings(context: BrowserContext) {
return contextSettings.get(context);
}
export async function setupDefaultInterceptors(target: BrowserContext) {
// Global /rest/settings intercept - always active like Cypress
// TODO: Remove this as a global and move it per test
await target.route('**/rest/settings', async (route: Route) => {
try {
const originalResponse = await route.fetch();
const originalJson = await originalResponse.json();
// Get settings stored for this specific context
const testSettings = getContextSettings(target);
// Deep merge test settings with backend settings (like Cypress)
const modifiedData = {
data:
testSettings && Object.keys(testSettings).length > 0
? merge(cloneDeep(originalJson.data), testSettings)
: originalJson.data,
};
await route.fulfill({
status: originalResponse.status(),
headers: originalResponse.headers(),
contentType: 'application/json',
body: JSON.stringify(modifiedData),
});
} catch (error) {
console.error('Error in /rest/settings intercept:', error);
await route.continue();
}
});
// POST /rest/credentials/test
await target.route('**/rest/credentials/test', async (route: Route) => {
if (route.request().method() === 'POST') {
await route.fulfill({
contentType: 'application/json',
body: JSON.stringify({ data: { status: 'success', message: 'Tested successfully' } }),
});
} else {
await route.continue();
}
});
// POST /rest/license/renew
await target.route('**/rest/license/renew', async (route: Route) => {
if (route.request().method() === 'POST') {
await route.fulfill({
contentType: 'application/json',
body: JSON.stringify({
data: {
usage: { activeWorkflowTriggers: { limit: -1, value: 0, warningThreshold: 0.8 } },
license: { planId: '', planName: 'Community' },
},
}),
});
} else {
await route.continue();
}
});
// Pathname /api/health
await target.route(
(url) => url.pathname.endsWith('/api/health'),
async (route: Route) => {
await route.fulfill({
contentType: 'application/json',
body: JSON.stringify({ status: 'OK' }),
});
},
);
// Pathname /api/versions/*
await target.route(
(url) => url.pathname.startsWith('/api/versions/'),
async (route: Route) => {
await route.fulfill({
contentType: 'application/json',
body: JSON.stringify([
{
name: '1.45.1',
createdAt: '2023-08-18T11:53:12.857Z',
hasSecurityIssue: null,
hasSecurityFix: null,
securityIssueFixVersion: null,
hasBreakingChange: null,
documentationUrl: 'https://docs.n8n.io/release-notes/#n8n131',
nodes: [],
description: 'Includes <strong>bug fixes</strong>',
},
{
name: '1.0.5',
createdAt: '2023-07-24T10:54:56.097Z',
hasSecurityIssue: false,
hasSecurityFix: null,
securityIssueFixVersion: null,
hasBreakingChange: true,
documentationUrl: 'https://docs.n8n.io/release-notes/#n8n104',
nodes: [],
description:
'Includes <strong>core functionality</strong> and <strong>bug fixes</strong>',
},
]),
});
},
);
}
@@ -0,0 +1,96 @@
import { DEFAULT_USER_PASSWORD } from './constants';
export interface UserCredentials {
email: string;
password: string;
firstName: string;
lastName: string;
mfaEnabled?: boolean;
mfaSecret?: string;
mfaRecoveryCodes?: string[];
}
// Simple name generators
const FIRST_NAMES = [
'Alex',
'Jordan',
'Taylor',
'Morgan',
'Casey',
'Riley',
'Avery',
'Quinn',
'Sam',
'Drew',
'Blake',
'Sage',
'River',
'Rowan',
'Skylar',
'Emery',
];
const LAST_NAMES = [
'Smith',
'Johnson',
'Williams',
'Brown',
'Jones',
'Garcia',
'Miller',
'Davis',
'Rodriguez',
'Martinez',
'Hernandez',
'Lopez',
'Gonzalez',
'Wilson',
'Anderson',
'Thomas',
];
const getRandomName = (names: string[]): string => {
return names[Math.floor(Math.random() * names.length)];
};
const randFirstName = (): string => getRandomName(FIRST_NAMES);
const randLastName = (): string => getRandomName(LAST_NAMES);
export const INSTANCE_OWNER_CREDENTIALS: UserCredentials = {
email: 'nathan@n8n.io',
password: DEFAULT_USER_PASSWORD,
firstName: randFirstName(),
lastName: randLastName(),
mfaEnabled: false,
mfaSecret: 'KVKFKRCPNZQUYMLXOVYDSQKJKZDTSRLD',
mfaRecoveryCodes: ['d04ea17f-e8b2-4afa-a9aa-57a2c735b30e'],
};
export const INSTANCE_ADMIN_CREDENTIALS: UserCredentials = {
email: 'admin@n8n.io',
password: DEFAULT_USER_PASSWORD,
firstName: randFirstName(),
lastName: randLastName(),
};
export const INSTANCE_MEMBER_CREDENTIALS: UserCredentials[] = [
{
email: 'member@n8n.io',
password: DEFAULT_USER_PASSWORD,
firstName: randFirstName(),
lastName: randLastName(),
},
{
email: 'member2@n8n.io',
password: DEFAULT_USER_PASSWORD,
firstName: randFirstName(),
lastName: randLastName(),
},
];
export const INSTANCE_CHAT_CREDENTIALS: UserCredentials = {
email: 'chat@n8n.io',
password: DEFAULT_USER_PASSWORD,
firstName: randFirstName(),
lastName: randLastName(),
};
@@ -0,0 +1,14 @@
import type { CurrentsConfig } from '@currents/playwright';
const config: CurrentsConfig = {
recordKey: process.env.CURRENTS_RECORD_KEY ?? '',
projectId: process.env.CURRENTS_PROJECT_ID ?? 'LRxcNt',
...(process.env.BUILD_WITH_COVERAGE === 'true' && {
coverage: {
projects: true,
},
}),
};
// eslint-disable-next-line import-x/no-default-export
export default config;
@@ -0,0 +1,171 @@
# Custom Test Orchestration
Capability-aware test distribution across CI shards.
## How It Works
| Step | What Happens |
|------|--------------|
| 1. Discovery | `pnpm janitor discover` (AST-based, detects `test.fixme()`/`test.skip()` automatically) |
| 2. Metrics | Get `avgDuration` per spec from Currents (last 30 days) |
| 3. Default | Missing specs get **60s** default (accounts for container startup) |
| 4. Group | Group specs by `@capability:xxx` tag for worker reuse |
| 5. Effective Duration | Calculate actual time accounting for container reuse within groups |
| 6. Split | If a group exceeds **5 min**, split into sub-groups |
| 7. Bin Pack | Greedy assign groups + standard specs to lightest shard |
### Why Group by Capability?
Tests requiring containers (proxy, email, etc.) include ~20s startup overhead. When grouped on the same shard, only the first test pays this cost - the rest reuse the worker.
**Example:** 15 proxy tests across 8 shards = 8 container starts (160s). Grouped on 2 shards = 2 starts (40s). **Saves 120s.**
### Self-Balancing
Metrics auto-correct over time. As grouped tests run, they report actual execution time (not startup overhead), so future distributions become more accurate.
## Writing Tests with Capabilities
### 1. Use capability option (enables worker reuse)
```typescript
// String capability - maps to predefined config
test.use({ capability: 'proxy' });
// Custom config - full control over container settings
test.use({
capability: {
proxyServerEnabled: true,
env: { MY_VAR: 'value' },
},
});
```
### 2. Add @capability tag (required for orchestration grouping)
```typescript
test('My feature @capability:proxy', async ({ page }) => {
// This test will be grouped with other proxy tests
});
// Or at describe level:
test.describe('Feature @capability:email', () => {
// All tests inherit the tag
});
```
### Available Capabilities
| Capability | Tag | Containers |
|------------|-----|-----------|
| `'proxy'` | `@capability:proxy` | Proxy server |
| `'email'` | `@capability:email` | Mailpit |
| `'source-control'` | `@capability:source-control` | Git server |
| `'task-runner'` | `@capability:task-runner` | Task runner |
| `'oidc'` | `@capability:oidc` | OIDC provider |
| `'observability'` | `@capability:observability` | VictoriaLogs + VictoriaMetrics + Vector |
## Modes vs Capabilities
**Capabilities** (`@capability:X`) are add-on features you can combine with any infrastructure:
- Use `test.use({ capability: 'proxy' })` to configure the worker
- Add-on containers (proxy, email, gitea, etc.) spin up alongside n8n
**Modes** (`@mode:X`) define the infrastructure configuration itself:
- `@mode:postgres` - n8n with PostgreSQL database (vs default sqlite)
- `@mode:queue` - n8n with EXECUTIONS_MODE=queue (workers via Bull, rarely used as tag)
- `@mode:multi-main` - n8n HA setup with leader election (implies queue mode)
Most e2e tests run against ALL modes via projects (`sqlite:e2e`, `postgres:e2e`, etc).
Use `@mode:X` only for tests that ONLY work with a specific infrastructure.
```typescript
// Capability - add-on feature
test.use({ capability: 'proxy' });
test('API mocking @capability:proxy', ...);
// Mode - infrastructure requirement (no test.use needed, project handles it)
test('Postgres-specific test @mode:postgres', ...);
// Combined - capability ON a specific mode
test.use({ capability: 'observability' });
test('Multi-main logs @capability:observability @mode:multi-main', ...);
```
Both `@capability:X` and `@mode:X` tests are skipped in local mode (they require containers).
## Temporarily Disabling Tests
Use `test.fixme()` to mark tests that need fixing. The janitor's `discover` command detects `test.fixme()` and `test.skip()` calls via AST analysis and automatically excludes them from CI distribution.
```typescript
// Individual test
test.fixme('broken test', async ({ n8n }) => {
// Excluded from CI distribution automatically
});
// Entire describe block
test.describe('Feature', () => {
test.fixme(); // Marks all tests in this block
test('test 1', async ({ n8n }) => { ... });
test('test 2', async ({ n8n }) => { ... });
});
```
## Refreshing Metrics
```bash
CURRENTS_API_KEY=<key> node packages/testing/playwright/scripts/fetch-currents-metrics.mjs --project=<id>
```
This fetches the last 30 days of test durations from Currents, aggregates by spec, and writes to `.github/test-metrics/playwright.json`.
**When to refresh:**
- Weekly (recommended)
- After significant test changes
- When adding new specs (optional - they get 60s default)
## Architecture
```
janitor orchestrate (generic) distribute-tests.mjs (n8n CI adapter)
┌──────────────────────────┐ ┌──────────────────────────┐
│ AST discovery │ │ Calls janitor orchestrate│
│ Metrics loading │ JSON │ Maps capabilities → │
│ Capability grouping │ ──────→ │ Docker images │
│ Group splitting │ │ Adds container overhead │
│ Greedy bin-packing │ │ Outputs GH Actions matrix│
└──────────────────────────┘ └──────────────────────────┘
```
The janitor handles generic orchestration (works for any Playwright project).
`distribute-tests.mjs` is n8n's CI adapter that maps capabilities to Docker images.
## Scripts
| Script | Purpose |
|--------|---------|
| `scripts/distribute-tests.mjs` | CI adapter — calls janitor, maps images, outputs matrix |
| `scripts/fetch-currents-metrics.mjs` | Fetches metrics from Currents API |
### Testing Locally
```bash
# Janitor orchestration (generic output)
pnpm janitor orchestrate --shards=14
# CI adapter (n8n-specific output with Docker images)
node scripts/distribute-tests.mjs --matrix 14 --orchestrate
# Get specs for shard 0
node scripts/distribute-tests.mjs 14 0
```
## Troubleshooting
| Problem | Solution |
|---------|----------|
| Specs not running | Check path matches janitor test patterns in `janitor.config.mjs` |
| Unbalanced shards | Refresh metrics - durations may have drifted |
| Worker not reused | Use string capabilities like `'proxy'`, not inline objects |
@@ -0,0 +1,16 @@
# Playwright Test Troubleshooting
Known issues and solutions for common test failures.
## 1. Hover/Tooltip Test Flakiness
**Problem:** Hover and tooltip tests become unreliable when running in parallel
**Root Cause:** When multiple tests run in parallel, the browser becomes overloaded and begins coalescing or delaying mouse events to maintain performance. Unlike page loads (which the browser commits to completing), hover interactions trigger chains of small, low-priority events that can be delayed or combined when the system is stressed.
**What happens under load:**
- Multiple mousemove/pointermove events get merged into single events
- The rendering pipeline (event → framework update → style → paint) gets backed up
- Tooltip appearances become unpredictable as the browser skips frames to catch up
**Solution:** Run these tests serially to prevent browser event loop overload
@@ -0,0 +1,77 @@
import { baseConfig } from '@n8n/eslint-config/base';
import playwrightPlugin from 'eslint-plugin-playwright';
export default [
...baseConfig,
playwrightPlugin.configs['flat/recommended'],
{
ignores: [
'playwright-report/**/*',
'ms-playwright-cache/**/*',
'coverage/**/*',
'scripts/**/*',
'janitor.config.mjs',
],
},
{
rules: {
'@typescript-eslint/no-unsafe-argument': 'off',
'@typescript-eslint/no-unsafe-assignment': 'off',
'@typescript-eslint/no-unsafe-call': 'off',
'@typescript-eslint/no-unsafe-member-access': 'off',
'@typescript-eslint/no-unsafe-return': 'off',
'@typescript-eslint/no-unused-expressions': 'off',
'@typescript-eslint/no-use-before-define': 'off',
'@typescript-eslint/promise-function-async': 'off',
'n8n-local-rules/no-uncaught-json-parse': 'off',
'playwright/expect-expect': 'warn',
'playwright/max-nested-describe': 'warn',
'playwright/no-conditional-in-test': 'error',
'playwright/no-skipped-test': 'warn',
// Allow any naming convention for TestRequirements object properties
// This is specifically for workflow filenames and intercept keys that may not follow camelCase
'@typescript-eslint/naming-convention': [
'error',
{
selector: 'default',
format: ['camelCase'],
leadingUnderscore: 'allow',
trailingUnderscore: 'allow',
},
{
selector: 'variable',
format: ['camelCase', 'UPPER_CASE'],
},
{
selector: 'typeLike',
format: ['PascalCase'],
},
{
selector: 'property',
format: ['camelCase', 'snake_case', 'UPPER_CASE'],
filter: {
// Allow any format for properties in TestRequirements objects (workflow files, intercept keys, etc.)
regex: '^(workflow|intercepts|storage|config)$',
match: false,
},
},
{
selector: 'objectLiteralProperty',
format: null, // Allow any format for object literal properties in TestRequirements
filter: {
// This allows workflow filenames and intercept keys to use any naming convention
regex: '\\.(json|spec\\.ts)$|[a-zA-Z0-9_-]+',
match: true,
},
},
],
'import-x/no-extraneous-dependencies': [
'error',
{
devDependencies: ['**/tests/**', '**/e2e/**', '**/playwright/**'],
optionalDependencies: false,
},
],
},
},
];
@@ -0,0 +1,102 @@
{
"httpRequest": {
"method": "GET",
"path": "/v1/models"
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["53"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrrWNUtV5BKSbXrAcrcF"],
"cf-cache-status": ["DYNAMIC"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 12:58:03 GMT"],
"Content-Type": ["application/json"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"CF-RAY": ["9c9ad11d2bfbe50d-TXL"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"data": [
{
"type": "model",
"id": "claude-opus-4-6",
"display_name": "Claude Opus 4.6",
"created_at": "2026-02-04T00:00:00Z"
},
{
"type": "model",
"id": "claude-opus-4-5-20251101",
"display_name": "Claude Opus 4.5",
"created_at": "2025-11-24T00:00:00Z"
},
{
"type": "model",
"id": "claude-haiku-4-5-20251001",
"display_name": "Claude Haiku 4.5",
"created_at": "2025-10-15T00:00:00Z"
},
{
"type": "model",
"id": "claude-sonnet-4-5-20250929",
"display_name": "Claude Sonnet 4.5",
"created_at": "2025-09-29T00:00:00Z"
},
{
"type": "model",
"id": "claude-opus-4-1-20250805",
"display_name": "Claude Opus 4.1",
"created_at": "2025-08-05T00:00:00Z"
},
{
"type": "model",
"id": "claude-opus-4-20250514",
"display_name": "Claude Opus 4",
"created_at": "2025-05-22T00:00:00Z"
},
{
"type": "model",
"id": "claude-sonnet-4-20250514",
"display_name": "Claude Sonnet 4",
"created_at": "2025-05-22T00:00:00Z"
},
{
"type": "model",
"id": "claude-3-7-sonnet-20250219",
"display_name": "Claude Sonnet 3.7",
"created_at": "2025-02-24T00:00:00Z"
},
{
"type": "model",
"id": "claude-3-5-haiku-20241022",
"display_name": "Claude Haiku 3.5",
"created_at": "2024-10-22T00:00:00Z"
},
{
"type": "model",
"id": "claude-3-haiku-20240307",
"display_name": "Claude Haiku 3",
"created_at": "2024-03-07T00:00:00Z"
}
],
"has_more": false,
"first_id": "claude-opus-4-6",
"last_id": "claude-3-haiku-20240307"
},
"rawBytes": "eyJkYXRhIjpbeyJ0eXBlIjoibW9kZWwiLCJpZCI6ImNsYXVkZS1vcHVzLTQtNiIsImRpc3BsYXlfbmFtZSI6IkNsYXVkZSBPcHVzIDQuNiIsImNyZWF0ZWRfYXQiOiIyMDI2LTAyLTA0VDAwOjAwOjAwWiJ9LHsidHlwZSI6Im1vZGVsIiwiaWQiOiJjbGF1ZGUtb3B1cy00LTUtMjAyNTExMDEiLCJkaXNwbGF5X25hbWUiOiJDbGF1ZGUgT3B1cyA0LjUiLCJjcmVhdGVkX2F0IjoiMjAyNS0xMS0yNFQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLWhhaWt1LTQtNS0yMDI1MTAwMSIsImRpc3BsYXlfbmFtZSI6IkNsYXVkZSBIYWlrdSA0LjUiLCJjcmVhdGVkX2F0IjoiMjAyNS0xMC0xNVQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLXNvbm5ldC00LTUtMjAyNTA5MjkiLCJkaXNwbGF5X25hbWUiOiJDbGF1ZGUgU29ubmV0IDQuNSIsImNyZWF0ZWRfYXQiOiIyMDI1LTA5LTI5VDAwOjAwOjAwWiJ9LHsidHlwZSI6Im1vZGVsIiwiaWQiOiJjbGF1ZGUtb3B1cy00LTEtMjAyNTA4MDUiLCJkaXNwbGF5X25hbWUiOiJDbGF1ZGUgT3B1cyA0LjEiLCJjcmVhdGVkX2F0IjoiMjAyNS0wOC0wNVQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLW9wdXMtNC0yMDI1MDUxNCIsImRpc3BsYXlfbmFtZSI6IkNsYXVkZSBPcHVzIDQiLCJjcmVhdGVkX2F0IjoiMjAyNS0wNS0yMlQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0IiwiZGlzcGxheV9uYW1lIjoiQ2xhdWRlIFNvbm5ldCA0IiwiY3JlYXRlZF9hdCI6IjIwMjUtMDUtMjJUMDA6MDA6MDBaIn0seyJ0eXBlIjoibW9kZWwiLCJpZCI6ImNsYXVkZS0zLTctc29ubmV0LTIwMjUwMjE5IiwiZGlzcGxheV9uYW1lIjoiQ2xhdWRlIFNvbm5ldCAzLjciLCJjcmVhdGVkX2F0IjoiMjAyNS0wMi0yNFQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLTMtNS1oYWlrdS0yMDI0MTAyMiIsImRpc3BsYXlfbmFtZSI6IkNsYXVkZSBIYWlrdSAzLjUiLCJjcmVhdGVkX2F0IjoiMjAyNC0xMC0yMlQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLTMtaGFpa3UtMjAyNDAzMDciLCJkaXNwbGF5X25hbWUiOiJDbGF1ZGUgSGFpa3UgMyIsImNyZWF0ZWRfYXQiOiIyMDI0LTAzLTA3VDAwOjAwOjAwWiJ9XSwiaGFzX21vcmUiOmZhbHNlLCJmaXJzdF9pZCI6ImNsYXVkZS1vcHVzLTQtNiIsImxhc3RfaWQiOiJjbGF1ZGUtMy1oYWlrdS0yMDI0MDMwNyJ9"
}
},
"id": "1770382688510-api.anthropic.com-GET-_v1_models-2ef5ce20.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,75 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "What is the exact content of this file?"
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "File: test-file.txt\nContent:\nI am a file"
}
]
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJXaGF0IGlzIHRoZSBleGFjdCBjb250ZW50IG9mIHRoaXMgZmlsZT8ifSx7InJvbGUiOiJ1c2VyIiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiRmlsZTogdGVzdC1maWxlLnR4dFxuQ29udGVudDpcbkkgYW0gYSBmaWxlIn1dfV0sInN5c3RlbSI6IllvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudC5cblxuX19lMmVfc3lzdGVtX3Byb21wdF9wbGFjZWhvbGRlcl9fIn0="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1512"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrrWW43z98EeegvupJrm"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T12:58:05Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T12:58:05Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T12:58:05Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 12:58:07 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9ad1283d6ae522-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_019N4wxmsmtFu3gGD67BZwve\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":51,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"The\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" exact\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" content of the\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" file is\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\":\\n\\n```\\nI am a file\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\n```\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":51,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":20} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMTlONHd4bXNtdEZ1M2dHRDY3Qlp3dmUiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NTEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgICAgICAgICAgICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiVGhlIn0gICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBleGFjdCJ9fQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgY29udGVudCBvZiB0aGUifSAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBmaWxlIGlzIn0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiI6XG5cbmBgYFxuSSBhbSBhIGZpbGUifSAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJcbmBgYCJ9ICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NTEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsIm91dHB1dF90b2tlbnMiOjIwfSB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICAgICAgICAgICAgIH0KCg==",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770382688511-unknown-host-POST-_v1_messages-95128868.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,102 @@
{
"httpRequest": {
"method": "GET",
"path": "/v1/models"
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["70"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrrWNrTpZ14FHs1pvqJB"],
"cf-cache-status": ["DYNAMIC"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 12:58:03 GMT"],
"Content-Type": ["application/json"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"CF-RAY": ["9c9ad11dafabe567-TXL"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"data": [
{
"type": "model",
"id": "claude-opus-4-6",
"display_name": "Claude Opus 4.6",
"created_at": "2026-02-04T00:00:00Z"
},
{
"type": "model",
"id": "claude-opus-4-5-20251101",
"display_name": "Claude Opus 4.5",
"created_at": "2025-11-24T00:00:00Z"
},
{
"type": "model",
"id": "claude-haiku-4-5-20251001",
"display_name": "Claude Haiku 4.5",
"created_at": "2025-10-15T00:00:00Z"
},
{
"type": "model",
"id": "claude-sonnet-4-5-20250929",
"display_name": "Claude Sonnet 4.5",
"created_at": "2025-09-29T00:00:00Z"
},
{
"type": "model",
"id": "claude-opus-4-1-20250805",
"display_name": "Claude Opus 4.1",
"created_at": "2025-08-05T00:00:00Z"
},
{
"type": "model",
"id": "claude-opus-4-20250514",
"display_name": "Claude Opus 4",
"created_at": "2025-05-22T00:00:00Z"
},
{
"type": "model",
"id": "claude-sonnet-4-20250514",
"display_name": "Claude Sonnet 4",
"created_at": "2025-05-22T00:00:00Z"
},
{
"type": "model",
"id": "claude-3-7-sonnet-20250219",
"display_name": "Claude Sonnet 3.7",
"created_at": "2025-02-24T00:00:00Z"
},
{
"type": "model",
"id": "claude-3-5-haiku-20241022",
"display_name": "Claude Haiku 3.5",
"created_at": "2024-10-22T00:00:00Z"
},
{
"type": "model",
"id": "claude-3-haiku-20240307",
"display_name": "Claude Haiku 3",
"created_at": "2024-03-07T00:00:00Z"
}
],
"has_more": false,
"first_id": "claude-opus-4-6",
"last_id": "claude-3-haiku-20240307"
},
"rawBytes": "eyJkYXRhIjpbeyJ0eXBlIjoibW9kZWwiLCJpZCI6ImNsYXVkZS1vcHVzLTQtNiIsImRpc3BsYXlfbmFtZSI6IkNsYXVkZSBPcHVzIDQuNiIsImNyZWF0ZWRfYXQiOiIyMDI2LTAyLTA0VDAwOjAwOjAwWiJ9LHsidHlwZSI6Im1vZGVsIiwiaWQiOiJjbGF1ZGUtb3B1cy00LTUtMjAyNTExMDEiLCJkaXNwbGF5X25hbWUiOiJDbGF1ZGUgT3B1cyA0LjUiLCJjcmVhdGVkX2F0IjoiMjAyNS0xMS0yNFQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLWhhaWt1LTQtNS0yMDI1MTAwMSIsImRpc3BsYXlfbmFtZSI6IkNsYXVkZSBIYWlrdSA0LjUiLCJjcmVhdGVkX2F0IjoiMjAyNS0xMC0xNVQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLXNvbm5ldC00LTUtMjAyNTA5MjkiLCJkaXNwbGF5X25hbWUiOiJDbGF1ZGUgU29ubmV0IDQuNSIsImNyZWF0ZWRfYXQiOiIyMDI1LTA5LTI5VDAwOjAwOjAwWiJ9LHsidHlwZSI6Im1vZGVsIiwiaWQiOiJjbGF1ZGUtb3B1cy00LTEtMjAyNTA4MDUiLCJkaXNwbGF5X25hbWUiOiJDbGF1ZGUgT3B1cyA0LjEiLCJjcmVhdGVkX2F0IjoiMjAyNS0wOC0wNVQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLW9wdXMtNC0yMDI1MDUxNCIsImRpc3BsYXlfbmFtZSI6IkNsYXVkZSBPcHVzIDQiLCJjcmVhdGVkX2F0IjoiMjAyNS0wNS0yMlQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0IiwiZGlzcGxheV9uYW1lIjoiQ2xhdWRlIFNvbm5ldCA0IiwiY3JlYXRlZF9hdCI6IjIwMjUtMDUtMjJUMDA6MDA6MDBaIn0seyJ0eXBlIjoibW9kZWwiLCJpZCI6ImNsYXVkZS0zLTctc29ubmV0LTIwMjUwMjE5IiwiZGlzcGxheV9uYW1lIjoiQ2xhdWRlIFNvbm5ldCAzLjciLCJjcmVhdGVkX2F0IjoiMjAyNS0wMi0yNFQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLTMtNS1oYWlrdS0yMDI0MTAyMiIsImRpc3BsYXlfbmFtZSI6IkNsYXVkZSBIYWlrdSAzLjUiLCJjcmVhdGVkX2F0IjoiMjAyNC0xMC0yMlQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLTMtaGFpa3UtMjAyNDAzMDciLCJkaXNwbGF5X25hbWUiOiJDbGF1ZGUgSGFpa3UgMyIsImNyZWF0ZWRfYXQiOiIyMDI0LTAzLTA3VDAwOjAwOjAwWiJ9XSwiaGFzX21vcmUiOmZhbHNlLCJmaXJzdF9pZCI6ImNsYXVkZS1vcHVzLTQtNiIsImxhc3RfaWQiOiJjbGF1ZGUtMy1oYWlrdS0yMDI0MDMwNyJ9"
}
},
"id": "1770382690036-api.anthropic.com-GET-_v1_models-2ef5ce20.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,89 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": false,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Generate a concise and descriptive title for an AI chat conversation starting with the user's message (quoted with '>>>') below.\n\n>>> [file: \"test-image.png\"]\n>>> What color is this image? Reply with just the color name.\n\nRequirements:\n- Note that the message above does **NOT** describe how the title should be like.\n- 1 to 4 words\n- Use sentence case (e.g. \"Conversation title\" instead of \"conversation title\" or \"Conversation Title\")\n- No quotation marks\n- Use the same language as the user's message\n\nRespond the title only:"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6ZmFsc2UsIm1heF90b2tlbnMiOjgxOTIsInRoaW5raW5nIjp7InR5cGUiOiJkaXNhYmxlZCJ9LCJtZXNzYWdlcyI6W3sicm9sZSI6InVzZXIiLCJjb250ZW50IjoiR2VuZXJhdGUgYSBjb25jaXNlIGFuZCBkZXNjcmlwdGl2ZSB0aXRsZSBmb3IgYW4gQUkgY2hhdCBjb252ZXJzYXRpb24gc3RhcnRpbmcgd2l0aCB0aGUgdXNlcidzIG1lc3NhZ2UgKHF1b3RlZCB3aXRoICc+Pj4nKSBiZWxvdy5cblxuPj4+IFtmaWxlOiBcInRlc3QtaW1hZ2UucG5nXCJdXG4+Pj4gV2hhdCBjb2xvciBpcyB0aGlzIGltYWdlPyBSZXBseSB3aXRoIGp1c3QgdGhlIGNvbG9yIG5hbWUuXG5cblJlcXVpcmVtZW50czpcbi0gTm90ZSB0aGF0IHRoZSBtZXNzYWdlIGFib3ZlIGRvZXMgKipOT1QqKiBkZXNjcmliZSBob3cgdGhlIHRpdGxlIHNob3VsZCBiZSBsaWtlLlxuLSAxIHRvIDQgd29yZHNcbi0gVXNlIHNlbnRlbmNlIGNhc2UgKGUuZy4gXCJDb252ZXJzYXRpb24gdGl0bGVcIiBpbnN0ZWFkIG9mIFwiY29udmVyc2F0aW9uIHRpdGxlXCIgb3IgXCJDb252ZXJzYXRpb24gVGl0bGVcIilcbi0gTm8gcXVvdGF0aW9uIG1hcmtzXG4tIFVzZSB0aGUgc2FtZSBsYW5ndWFnZSBhcyB0aGUgdXNlcidzIG1lc3NhZ2VcblxuUmVzcG9uZCB0aGUgdGl0bGUgb25seToifV19"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1874"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrrWgS8SDWU5DenHd8RK"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T12:58:09Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T12:58:09Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T12:58:09Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 12:58:09 GMT"],
"Content-Type": ["application/json"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"CF-RAY": ["9c9ad1375931e516-TXL"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"id": "msg_01AvFYQYS7tR6eBKKuv6zxcQ",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Image color identification"
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 144,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 0
},
"output_tokens": 6,
"service_tier": "standard",
"inference_geo": "global"
}
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsImlkIjoibXNnXzAxQXZGWVFZUzd0UjZlQktLdXY2enhjUSIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IkltYWdlIGNvbG9yIGlkZW50aWZpY2F0aW9uIn1dLCJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxNDQsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjo2LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0="
}
},
"id": "1770382690037-unknown-host-POST-_v1_messages-7e7f525e.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,79 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "What color is this image? Reply with just the color name."
},
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAAkElEQVR42u3QMQ0AAAjAsPk3DRb4eJpUQZviSIEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFnvFp4t6yugc3LNAAAAAElFTkSuQmCC"
}
}
]
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJXaGF0IGNvbG9yIGlzIHRoaXMgaW1hZ2U/IFJlcGx5IHdpdGgganVzdCB0aGUgY29sb3IgbmFtZS4ifSx7InJvbGUiOiJ1c2VyIiwiY29udGVudCI6W3sidHlwZSI6ImltYWdlIiwic291cmNlIjp7InR5cGUiOiJiYXNlNjQiLCJtZWRpYV90eXBlIjoiaW1hZ2UvcG5nIiwiZGF0YSI6ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFHUUFBQUJrQ0FJQUFBRC9nQUlEQUFBQWtFbEVRVlI0MnUzUU1RMEFBQWpBc1BrM0RSYjRlSnBVUVp2aVNJRXNXYkpreVVLQkxGbXlaTWxDZ1N4WnNtVEpRb0VzV2JKa3lVS0JMRm15Wk1sQ2dTeFpzbVRKUW9Fc1diSmt5VUtCTEZteVpNbENnU3hac21USlFvRXNXYkpreVVLQkxGbXlaTWxDZ1N4WnNtVEpRb0VzV2JKa3lVS0JMRm15Wk1sQ2dTeFpzbVRKUW9Fc1diSmt5VUtCTEZudkZwNHQ2eXVnYzNMTkFBQUFBRWxGVGtTdVFtQ0MifX1dfV0sInN5c3RlbSI6IllvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudC5cblxuX19lMmVfc3lzdGVtX3Byb21wdF9wbGFjZWhvbGRlcl9fIn0="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1878"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrrWW82A2p5C4xs2w7do"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T12:58:05Z"],
"anthropic-ratelimit-tokens-remaining": ["4799000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T12:58:05Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T12:58:05Z"],
"anthropic-ratelimit-input-tokens-remaining": ["3999000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 12:58:07 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9ad1284bf51931-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_012LRL1MCLy8GAhGYaSveTwq\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":58,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Red\"}}\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":58,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":4} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMTJMUkwxTUNMeThHQWhHWWFTdmVUd3EiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NTgsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgICAgICAgICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiUmVkIn19CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NTgsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsIm91dHB1dF90b2tlbnMiOjR9ICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgICAgfQoK",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770382690037-unknown-host-POST-_v1_messages-f0cbca27.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,102 @@
{
"httpRequest": {
"method": "GET",
"path": "/v1/models"
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["61"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrrWNLD6SgkcHtrREnap"],
"cf-cache-status": ["DYNAMIC"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 12:58:03 GMT"],
"Content-Type": ["application/json"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"CF-RAY": ["9c9ad11ceab5e531-TXL"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"data": [
{
"type": "model",
"id": "claude-opus-4-6",
"display_name": "Claude Opus 4.6",
"created_at": "2026-02-04T00:00:00Z"
},
{
"type": "model",
"id": "claude-opus-4-5-20251101",
"display_name": "Claude Opus 4.5",
"created_at": "2025-11-24T00:00:00Z"
},
{
"type": "model",
"id": "claude-haiku-4-5-20251001",
"display_name": "Claude Haiku 4.5",
"created_at": "2025-10-15T00:00:00Z"
},
{
"type": "model",
"id": "claude-sonnet-4-5-20250929",
"display_name": "Claude Sonnet 4.5",
"created_at": "2025-09-29T00:00:00Z"
},
{
"type": "model",
"id": "claude-opus-4-1-20250805",
"display_name": "Claude Opus 4.1",
"created_at": "2025-08-05T00:00:00Z"
},
{
"type": "model",
"id": "claude-opus-4-20250514",
"display_name": "Claude Opus 4",
"created_at": "2025-05-22T00:00:00Z"
},
{
"type": "model",
"id": "claude-sonnet-4-20250514",
"display_name": "Claude Sonnet 4",
"created_at": "2025-05-22T00:00:00Z"
},
{
"type": "model",
"id": "claude-3-7-sonnet-20250219",
"display_name": "Claude Sonnet 3.7",
"created_at": "2025-02-24T00:00:00Z"
},
{
"type": "model",
"id": "claude-3-5-haiku-20241022",
"display_name": "Claude Haiku 3.5",
"created_at": "2024-10-22T00:00:00Z"
},
{
"type": "model",
"id": "claude-3-haiku-20240307",
"display_name": "Claude Haiku 3",
"created_at": "2024-03-07T00:00:00Z"
}
],
"has_more": false,
"first_id": "claude-opus-4-6",
"last_id": "claude-3-haiku-20240307"
},
"rawBytes": "eyJkYXRhIjpbeyJ0eXBlIjoibW9kZWwiLCJpZCI6ImNsYXVkZS1vcHVzLTQtNiIsImRpc3BsYXlfbmFtZSI6IkNsYXVkZSBPcHVzIDQuNiIsImNyZWF0ZWRfYXQiOiIyMDI2LTAyLTA0VDAwOjAwOjAwWiJ9LHsidHlwZSI6Im1vZGVsIiwiaWQiOiJjbGF1ZGUtb3B1cy00LTUtMjAyNTExMDEiLCJkaXNwbGF5X25hbWUiOiJDbGF1ZGUgT3B1cyA0LjUiLCJjcmVhdGVkX2F0IjoiMjAyNS0xMS0yNFQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLWhhaWt1LTQtNS0yMDI1MTAwMSIsImRpc3BsYXlfbmFtZSI6IkNsYXVkZSBIYWlrdSA0LjUiLCJjcmVhdGVkX2F0IjoiMjAyNS0xMC0xNVQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLXNvbm5ldC00LTUtMjAyNTA5MjkiLCJkaXNwbGF5X25hbWUiOiJDbGF1ZGUgU29ubmV0IDQuNSIsImNyZWF0ZWRfYXQiOiIyMDI1LTA5LTI5VDAwOjAwOjAwWiJ9LHsidHlwZSI6Im1vZGVsIiwiaWQiOiJjbGF1ZGUtb3B1cy00LTEtMjAyNTA4MDUiLCJkaXNwbGF5X25hbWUiOiJDbGF1ZGUgT3B1cyA0LjEiLCJjcmVhdGVkX2F0IjoiMjAyNS0wOC0wNVQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLW9wdXMtNC0yMDI1MDUxNCIsImRpc3BsYXlfbmFtZSI6IkNsYXVkZSBPcHVzIDQiLCJjcmVhdGVkX2F0IjoiMjAyNS0wNS0yMlQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0IiwiZGlzcGxheV9uYW1lIjoiQ2xhdWRlIFNvbm5ldCA0IiwiY3JlYXRlZF9hdCI6IjIwMjUtMDUtMjJUMDA6MDA6MDBaIn0seyJ0eXBlIjoibW9kZWwiLCJpZCI6ImNsYXVkZS0zLTctc29ubmV0LTIwMjUwMjE5IiwiZGlzcGxheV9uYW1lIjoiQ2xhdWRlIFNvbm5ldCAzLjciLCJjcmVhdGVkX2F0IjoiMjAyNS0wMi0yNFQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLTMtNS1oYWlrdS0yMDI0MTAyMiIsImRpc3BsYXlfbmFtZSI6IkNsYXVkZSBIYWlrdSAzLjUiLCJjcmVhdGVkX2F0IjoiMjAyNC0xMC0yMlQwMDowMDowMFoifSx7InR5cGUiOiJtb2RlbCIsImlkIjoiY2xhdWRlLTMtaGFpa3UtMjAyNDAzMDciLCJkaXNwbGF5X25hbWUiOiJDbGF1ZGUgSGFpa3UgMyIsImNyZWF0ZWRfYXQiOiIyMDI0LTAzLTA3VDAwOjAwOjAwWiJ9XSwiaGFzX21vcmUiOmZhbHNlLCJmaXJzdF9pZCI6ImNsYXVkZS1vcHVzLTQtNiIsImxhc3RfaWQiOiJjbGF1ZGUtMy1oYWlrdS0yMDI0MDMwNyJ9"
}
},
"id": "1770382691488-api.anthropic.com-GET-_v1_models-2ef5ce20.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,87 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What color is this image? Reply with just the color name."
},
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAAkElEQVR42u3QMQ0AAAjAsPk3DRb4eJpUQZviSIEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFnvFp4t6yugc3LNAAAAAElFTkSuQmCC"
}
}
]
},
{
"role": "assistant",
"content": "Red"
},
{
"role": "user",
"content": "Does the image include text? Reply just yes or no."
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IldoYXQgY29sb3IgaXMgdGhpcyBpbWFnZT8gUmVwbHkgd2l0aCBqdXN0IHRoZSBjb2xvciBuYW1lLiJ9LHsidHlwZSI6ImltYWdlIiwic291cmNlIjp7InR5cGUiOiJiYXNlNjQiLCJtZWRpYV90eXBlIjoiaW1hZ2UvcG5nIiwiZGF0YSI6ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFHUUFBQUJrQ0FJQUFBRC9nQUlEQUFBQWtFbEVRVlI0MnUzUU1RMEFBQWpBc1BrM0RSYjRlSnBVUVp2aVNJRXNXYkpreVVLQkxGbXlaTWxDZ1N4WnNtVEpRb0VzV2JKa3lVS0JMRm15Wk1sQ2dTeFpzbVRKUW9Fc1diSmt5VUtCTEZteVpNbENnU3hac21USlFvRXNXYkpreVVLQkxGbXlaTWxDZ1N4WnNtVEpRb0VzV2JKa3lVS0JMRm15Wk1sQ2dTeFpzbVRKUW9Fc1diSmt5VUtCTEZudkZwNHQ2eXVnYzNMTkFBQUFBRWxGVGtTdVFtQ0MifX1dfSx7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjoiUmVkIn0seyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJEb2VzIHRoZSBpbWFnZSBpbmNsdWRlIHRleHQ/IFJlcGx5IGp1c3QgeWVzIG9yIG5vLiJ9XSwic3lzdGVtIjoiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LlxuXG5fX2UyZV9zeXN0ZW1fcHJvbXB0X3BsYWNlaG9sZGVyX18ifQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1829"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrrWjWvLo6NtFTEKLLuB"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T12:58:08Z"],
"anthropic-ratelimit-tokens-remaining": ["4799000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T12:58:08Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T12:58:08Z"],
"anthropic-ratelimit-input-tokens-remaining": ["3999000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 12:58:10 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9ad13bded4b173-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_019gMyhsa8Q7xKifgR45pGsU\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":77,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"No\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":77,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":4} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMTlnTXloc2E4UTd4S2lmZ1I0NXBHc1UiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NzcsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjowLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiJ9ICAgICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJObyJ9ICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoiZW5kX3R1cm4iLCJzdG9wX3NlcXVlbmNlIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjo3NywiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwib3V0cHV0X3Rva2VucyI6NH0gICAgICAgICAgICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICAgICB9Cgo=",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770382691489-unknown-host-POST-_v1_messages-170a9933.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,89 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": false,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Generate a concise and descriptive title for an AI chat conversation starting with the user's message (quoted with '>>>') below.\n\n>>> [file: \"test-image.png\"]\n>>> What color is this image? Reply with just the color name.\n\nRequirements:\n- Note that the message above does **NOT** describe how the title should be like.\n- 1 to 4 words\n- Use sentence case (e.g. \"Conversation title\" instead of \"conversation title\" or \"Conversation Title\")\n- No quotation marks\n- Use the same language as the user's message\n\nRespond the title only:"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6ZmFsc2UsIm1heF90b2tlbnMiOjgxOTIsInRoaW5raW5nIjp7InR5cGUiOiJkaXNhYmxlZCJ9LCJtZXNzYWdlcyI6W3sicm9sZSI6InVzZXIiLCJjb250ZW50IjoiR2VuZXJhdGUgYSBjb25jaXNlIGFuZCBkZXNjcmlwdGl2ZSB0aXRsZSBmb3IgYW4gQUkgY2hhdCBjb252ZXJzYXRpb24gc3RhcnRpbmcgd2l0aCB0aGUgdXNlcidzIG1lc3NhZ2UgKHF1b3RlZCB3aXRoICc+Pj4nKSBiZWxvdy5cblxuPj4+IFtmaWxlOiBcInRlc3QtaW1hZ2UucG5nXCJdXG4+Pj4gV2hhdCBjb2xvciBpcyB0aGlzIGltYWdlPyBSZXBseSB3aXRoIGp1c3QgdGhlIGNvbG9yIG5hbWUuXG5cblJlcXVpcmVtZW50czpcbi0gTm90ZSB0aGF0IHRoZSBtZXNzYWdlIGFib3ZlIGRvZXMgKipOT1QqKiBkZXNjcmliZSBob3cgdGhlIHRpdGxlIHNob3VsZCBiZSBsaWtlLlxuLSAxIHRvIDQgd29yZHNcbi0gVXNlIHNlbnRlbmNlIGNhc2UgKGUuZy4gXCJDb252ZXJzYXRpb24gdGl0bGVcIiBpbnN0ZWFkIG9mIFwiY29udmVyc2F0aW9uIHRpdGxlXCIgb3IgXCJDb252ZXJzYXRpb24gVGl0bGVcIilcbi0gTm8gcXVvdGF0aW9uIG1hcmtzXG4tIFVzZSB0aGUgc2FtZSBsYW5ndWFnZSBhcyB0aGUgdXNlcidzIG1lc3NhZ2VcblxuUmVzcG9uZCB0aGUgdGl0bGUgb25seToifV19"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1541"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrrWgmifHpBYHRLqhWCN"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T12:58:09Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T12:58:09Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T12:58:09Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 12:58:09 GMT"],
"Content-Type": ["application/json"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"CF-RAY": ["9c9ad137dc4233a5-TXL"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"id": "msg_01TpFpzvRfUEhJ1ZnYt3r9PU",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Image color identification"
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 144,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 0
},
"output_tokens": 6,
"service_tier": "standard",
"inference_geo": "global"
}
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsImlkIjoibXNnXzAxVHBGcHp2UmZVRWhKMVpuWXQzcjlQVSIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IkltYWdlIGNvbG9yIGlkZW50aWZpY2F0aW9uIn1dLCJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxNDQsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjo2LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0="
}
},
"id": "1770382691489-unknown-host-POST-_v1_messages-7e7f525e.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,79 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "What color is this image? Reply with just the color name."
},
{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/png",
"data": "iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAAkElEQVR42u3QMQ0AAAjAsPk3DRb4eJpUQZviSIEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFmyZMlCgSxZsmTJQoEsWbJkyUKBLFnvFp4t6yugc3LNAAAAAElFTkSuQmCC"
}
}
]
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJXaGF0IGNvbG9yIGlzIHRoaXMgaW1hZ2U/IFJlcGx5IHdpdGgganVzdCB0aGUgY29sb3IgbmFtZS4ifSx7InJvbGUiOiJ1c2VyIiwiY29udGVudCI6W3sidHlwZSI6ImltYWdlIiwic291cmNlIjp7InR5cGUiOiJiYXNlNjQiLCJtZWRpYV90eXBlIjoiaW1hZ2UvcG5nIiwiZGF0YSI6ImlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFHUUFBQUJrQ0FJQUFBRC9nQUlEQUFBQWtFbEVRVlI0MnUzUU1RMEFBQWpBc1BrM0RSYjRlSnBVUVp2aVNJRXNXYkpreVVLQkxGbXlaTWxDZ1N4WnNtVEpRb0VzV2JKa3lVS0JMRm15Wk1sQ2dTeFpzbVRKUW9Fc1diSmt5VUtCTEZteVpNbENnU3hac21USlFvRXNXYkpreVVLQkxGbXlaTWxDZ1N4WnNtVEpRb0VzV2JKa3lVS0JMRm15Wk1sQ2dTeFpzbVRKUW9Fc1diSmt5VUtCTEZudkZwNHQ2eXVnYzNMTkFBQUFBRWxGVGtTdVFtQ0MifX1dfV0sInN5c3RlbSI6IllvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudC5cblxuX19lMmVfc3lzdGVtX3Byb21wdF9wbGFjZWhvbGRlcl9fIn0="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1947"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrrWWSciEfE3z5Kh9w5f"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T12:58:05Z"],
"anthropic-ratelimit-tokens-remaining": ["4799000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T12:58:05Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T12:58:05Z"],
"anthropic-ratelimit-input-tokens-remaining": ["3999000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 12:58:07 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9ad128c95dc637-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_019Ci8Tz5zyawPGTHPowj8nW\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":58,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Red\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":58,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":4} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMTlDaThUejV6eWF3UEdUSFBvd2o4blciLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NTgsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgICAgICAgICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJSZWQifSAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoiZW5kX3R1cm4iLCJzdG9wX3NlcXVlbmNlIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjo1OCwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwib3V0cHV0X3Rva2VucyI6NH0gICAgICAgICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICAgICAgICAgICB9Cgo=",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770382691489-unknown-host-POST-_v1_messages-f0cbca27.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,66 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Hello"
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIZWxsbyJ9XSwic3lzdGVtIjoiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LlxuXG5fX2UyZV9zeXN0ZW1fcHJvbXB0X3BsYWNlaG9sZGVyX18ifQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1586"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrrnwfNLBYu2zgmFVcFU"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:01:48Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:01:48Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:01:48Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:01:50 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9ad69a38f6e51e-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_01NjufjqaX7pgk9eXKBYZ2yj\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":27,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":8,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Hello! How can I help you today\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"? \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"😊\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":27,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":15} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMU5qdWZqcWFYN3BnazllWEtCWVoyeWoiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MjcsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjo4LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgICAgICB9CgpldmVudDogcGluZwpkYXRhOiB7InR5cGUiOiAicGluZyJ9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IkhlbGxvISBIb3cgY2FuIEkgaGVscCB5b3UgdG9kYXkifX0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiPyAifSAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiLwn5iKIn0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoiZW5kX3R1cm4iLCJzdG9wX3NlcXVlbmNlIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoyNywiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwib3V0cHV0X3Rva2VucyI6MTV9ICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgIH0KCg==",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770382916894-unknown-host-POST-_v1_messages-099aa697.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,89 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": false,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Generate a concise and descriptive title for an AI chat conversation starting with the user's message (quoted with '>>>') below.\n\n>>> Hello\n\nRequirements:\n- Note that the message above does **NOT** describe how the title should be like.\n- 1 to 4 words\n- Use sentence case (e.g. \"Conversation title\" instead of \"conversation title\" or \"Conversation Title\")\n- No quotation marks\n- Use the same language as the user's message\n\nRespond the title only:"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6ZmFsc2UsIm1heF90b2tlbnMiOjgxOTIsInRoaW5raW5nIjp7InR5cGUiOiJkaXNhYmxlZCJ9LCJtZXNzYWdlcyI6W3sicm9sZSI6InVzZXIiLCJjb250ZW50IjoiR2VuZXJhdGUgYSBjb25jaXNlIGFuZCBkZXNjcmlwdGl2ZSB0aXRsZSBmb3IgYW4gQUkgY2hhdCBjb252ZXJzYXRpb24gc3RhcnRpbmcgd2l0aCB0aGUgdXNlcidzIG1lc3NhZ2UgKHF1b3RlZCB3aXRoICc+Pj4nKSBiZWxvdy5cblxuPj4+IEhlbGxvXG5cblJlcXVpcmVtZW50czpcbi0gTm90ZSB0aGF0IHRoZSBtZXNzYWdlIGFib3ZlIGRvZXMgKipOT1QqKiBkZXNjcmliZSBob3cgdGhlIHRpdGxlIHNob3VsZCBiZSBsaWtlLlxuLSAxIHRvIDQgd29yZHNcbi0gVXNlIHNlbnRlbmNlIGNhc2UgKGUuZy4gXCJDb252ZXJzYXRpb24gdGl0bGVcIiBpbnN0ZWFkIG9mIFwiY29udmVyc2F0aW9uIHRpdGxlXCIgb3IgXCJDb252ZXJzYXRpb24gVGl0bGVcIilcbi0gTm8gcXVvdGF0aW9uIG1hcmtzXG4tIFVzZSB0aGUgc2FtZSBsYW5ndWFnZSBhcyB0aGUgdXNlcidzIG1lc3NhZ2VcblxuUmVzcG9uZCB0aGUgdGl0bGUgb25seToifV19"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1723"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrro6kZYdW8ok7ti4w6c"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:01:52Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:01:52Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:01:52Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:01:52 GMT"],
"Content-Type": ["application/json"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"CF-RAY": ["9c9ad6a78a6dcce1-TXL"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"id": "msg_017T8dB87id43SRghJH749U9",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Greeting exchange"
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 120,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 0
},
"output_tokens": 6,
"service_tier": "standard",
"inference_geo": "global"
}
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsImlkIjoibXNnXzAxN1Q4ZEI4N2lkNDNTUmdoSkg3NDlVOSIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IkdyZWV0aW5nIGV4Y2hhbmdlIn1dLCJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxMjAsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjo2LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0="
}
},
"id": "1770382916895-unknown-host-POST-_v1_messages-e2b1cf00.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,66 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Hello from e2e"
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIZWxsbyBmcm9tIGUyZSJ9XSwic3lzdGVtIjoiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LlxuXG5fX2UyZV9zeXN0ZW1fcHJvbXB0X3BsYWNlaG9sZGVyX18ifQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1481"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrro4W88ZP8F1eN1wQrk"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:01:50Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:01:50Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:01:50Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:01:51 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9ad6a4383fe522-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_01Jg2aFmpcDmq6kUxZtHxxAC\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":31,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":3,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"}}\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Hello! Welcome\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"!\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"👋 \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"How\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" can I help you today?\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" Feel\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" free to ask me anything\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" you'd like.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":31,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":28} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMUpnMmFGbXBjRG1xNmtVeFp0SHh4QUMiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MzEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjozLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjowLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiJ9fQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJIZWxsbyEgV2VsY29tZSJ9ICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIhIn0gICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiICJ9ICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0Ijoi8J+RiyAifSAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IkhvdyJ9IH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIGNhbiBJIGhlbHAgeW91IHRvZGF5PyJ9ICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIEZlZWwifSAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgZnJlZSB0byBhc2sgbWUgYW55dGhpbmcifSAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIHlvdSdkIGxpa2UuIn0gICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjAgICAgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoiZW5kX3R1cm4iLCJzdG9wX3NlcXVlbmNlIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjozMSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwib3V0cHV0X3Rva2VucyI6Mjh9ICAgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgICAgIH0KCg==",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770382919029-unknown-host-POST-_v1_messages-1576c6ca.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,89 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": false,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Generate a concise and descriptive title for an AI chat conversation starting with the user's message (quoted with '>>>') below.\n\n>>> Hello from e2e\n\nRequirements:\n- Note that the message above does **NOT** describe how the title should be like.\n- 1 to 4 words\n- Use sentence case (e.g. \"Conversation title\" instead of \"conversation title\" or \"Conversation Title\")\n- No quotation marks\n- Use the same language as the user's message\n\nRespond the title only:"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6ZmFsc2UsIm1heF90b2tlbnMiOjgxOTIsInRoaW5raW5nIjp7InR5cGUiOiJkaXNhYmxlZCJ9LCJtZXNzYWdlcyI6W3sicm9sZSI6InVzZXIiLCJjb250ZW50IjoiR2VuZXJhdGUgYSBjb25jaXNlIGFuZCBkZXNjcmlwdGl2ZSB0aXRsZSBmb3IgYW4gQUkgY2hhdCBjb252ZXJzYXRpb24gc3RhcnRpbmcgd2l0aCB0aGUgdXNlcidzIG1lc3NhZ2UgKHF1b3RlZCB3aXRoICc+Pj4nKSBiZWxvdy5cblxuPj4+IEhlbGxvIGZyb20gZTJlXG5cblJlcXVpcmVtZW50czpcbi0gTm90ZSB0aGF0IHRoZSBtZXNzYWdlIGFib3ZlIGRvZXMgKipOT1QqKiBkZXNjcmliZSBob3cgdGhlIHRpdGxlIHNob3VsZCBiZSBsaWtlLlxuLSAxIHRvIDQgd29yZHNcbi0gVXNlIHNlbnRlbmNlIGNhc2UgKGUuZy4gXCJDb252ZXJzYXRpb24gdGl0bGVcIiBpbnN0ZWFkIG9mIFwiY29udmVyc2F0aW9uIHRpdGxlXCIgb3IgXCJDb252ZXJzYXRpb24gVGl0bGVcIilcbi0gTm8gcXVvdGF0aW9uIG1hcmtzXG4tIFVzZSB0aGUgc2FtZSBsYW5ndWFnZSBhcyB0aGUgdXNlcidzIG1lc3NhZ2VcblxuUmVzcG9uZCB0aGUgdGl0bGUgb25seToifV19"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1608"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrroFDYoG9pqV49d6L1R"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:01:54Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:01:54Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:01:54Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:01:54 GMT"],
"Content-Type": ["application/json"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"CF-RAY": ["9c9ad6b3ee9fe516-TXL"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"id": "msg_018oXBEfyLj31VBFwqQMDxVc",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "End-to-end greeting"
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 124,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 0
},
"output_tokens": 9,
"service_tier": "standard",
"inference_geo": "global"
}
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsImlkIjoibXNnXzAxOG9YQkVmeUxqMzFWQkZ3cVFNRHhWYyIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IkVuZC10by1lbmQgZ3JlZXRpbmcifV0sInN0b3BfcmVhc29uIjoiZW5kX3R1cm4iLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEyNCwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfY3JlYXRpb24iOnsiZXBoZW1lcmFsXzVtX2lucHV0X3Rva2VucyI6MCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjksInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fQ=="
}
},
"id": "1770382919029-unknown-host-POST-_v1_messages-24f965d5.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,89 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": false,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Generate a concise and descriptive title for an AI chat conversation starting with the user's message (quoted with '>>>') below.\n\n>>> Hi\n\nRequirements:\n- Note that the message above does **NOT** describe how the title should be like.\n- 1 to 4 words\n- Use sentence case (e.g. \"Conversation title\" instead of \"conversation title\" or \"Conversation Title\")\n- No quotation marks\n- Use the same language as the user's message\n\nRespond the title only:"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6ZmFsc2UsIm1heF90b2tlbnMiOjgxOTIsInRoaW5raW5nIjp7InR5cGUiOiJkaXNhYmxlZCJ9LCJtZXNzYWdlcyI6W3sicm9sZSI6InVzZXIiLCJjb250ZW50IjoiR2VuZXJhdGUgYSBjb25jaXNlIGFuZCBkZXNjcmlwdGl2ZSB0aXRsZSBmb3IgYW4gQUkgY2hhdCBjb252ZXJzYXRpb24gc3RhcnRpbmcgd2l0aCB0aGUgdXNlcidzIG1lc3NhZ2UgKHF1b3RlZCB3aXRoICc+Pj4nKSBiZWxvdy5cblxuPj4+IEhpXG5cblJlcXVpcmVtZW50czpcbi0gTm90ZSB0aGF0IHRoZSBtZXNzYWdlIGFib3ZlIGRvZXMgKipOT1QqKiBkZXNjcmliZSBob3cgdGhlIHRpdGxlIHNob3VsZCBiZSBsaWtlLlxuLSAxIHRvIDQgd29yZHNcbi0gVXNlIHNlbnRlbmNlIGNhc2UgKGUuZy4gXCJDb252ZXJzYXRpb24gdGl0bGVcIiBpbnN0ZWFkIG9mIFwiY29udmVyc2F0aW9uIHRpdGxlXCIgb3IgXCJDb252ZXJzYXRpb24gVGl0bGVcIilcbi0gTm8gcXVvdGF0aW9uIG1hcmtzXG4tIFVzZSB0aGUgc2FtZSBsYW5ndWFnZSBhcyB0aGUgdXNlcidzIG1lc3NhZ2VcblxuUmVzcG9uZCB0aGUgdGl0bGUgb25seToifV19"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["2106"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrroF48GDs4RP1b6Ksft"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:01:54Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:01:54Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:01:54Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:01:54 GMT"],
"Content-Type": ["application/json"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"CF-RAY": ["9c9ad6b38fefd81e-TXL"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"id": "msg_01WDUN15jKw4gz8YKU7awbag",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Casual greeting"
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 120,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 0
},
"output_tokens": 6,
"service_tier": "standard",
"inference_geo": "global"
}
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsImlkIjoibXNnXzAxV0RVTjE1akt3NGd6OFlLVTdhd2JhZyIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IkNhc3VhbCBncmVldGluZyJ9XSwic3RvcF9yZWFzb24iOiJlbmRfdHVybiIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MTIwLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjowLCJlcGhlbWVyYWxfMWhfaW5wdXRfdG9rZW5zIjowfSwib3V0cHV0X3Rva2VucyI6Niwic2VydmljZV90aWVyIjoic3RhbmRhcmQiLCJpbmZlcmVuY2VfZ2VvIjoiZ2xvYmFsIn19"
}
},
"id": "1770382922975-unknown-host-POST-_v1_messages-71446cdb.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,66 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Hi"
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIaSJ9XSwic3lzdGVtIjoiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LlxuXG5fX2UyZV9zeXN0ZW1fcHJvbXB0X3BsYWNlaG9sZGVyX18ifQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["2510"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrrnwiqYhevUhCVVLXvr"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:01:48Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:01:48Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:01:48Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:01:51 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9ad69a4e603314-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_01XwsE2yEdAApcLg1EwxcGdv\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":27,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"}}\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Hi\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" there\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"! How\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" are\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" you doing today? Is there something\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" I can help you with?\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"😊\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":27,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":24} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMVh3c0UyeUVkQUFwY0xnMUV3eGNHZHYiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MjcsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifX0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiSGkifSAgICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIHRoZXJlIn0gICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiEgSG93In0gICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIGFyZSJ9ICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIHlvdSBkb2luZyB0b2RheT8gSXMgdGhlcmUgc29tZXRoaW5nIn0gICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIEkgY2FuIGhlbHAgeW91IHdpdGg/In0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgIn0gICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IvCfmIoifSAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoiZW5kX3R1cm4iLCJzdG9wX3NlcXVlbmNlIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoyNywiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwib3V0cHV0X3Rva2VucyI6MjR9ICAgICAgICAgICAgICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICAgICAgICAgIH0KCg==",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770382922975-unknown-host-POST-_v1_messages-806f7911.json",
"priority": 1,
"timeToLive": {
"unlimited": true
},
"times": {
"remainingTimes": 1
}
}
@@ -0,0 +1,66 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Hi"
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIaSJ9XSwic3lzdGVtIjoiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LlxuXG5fX2UyZV9zeXN0ZW1fcHJvbXB0X3BsYWNlaG9sZGVyX18ifQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1684"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrroWaGoswYxCW3brSyL"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:01:56Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:01:56Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:01:56Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:01:57 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9ad6ca480ae509-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_01B7t9jphqPBP1CF3NT9UmaF\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":29,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":8,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Hello! How can I help you today\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"?\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"😊 \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Feel\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" free to ask me anything \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" whether it's a\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" question\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\", a task\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\", or just a chat\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"!\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":29,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":37} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMUI3dDlqcGhxUEJQMUNGM05UOVVtYUYiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MjksImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjo4LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRleHQiLCJ0ZXh0IjoiIn0gIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiSGVsbG8hIEhvdyBjYW4gSSBoZWxwIHlvdSB0b2RheSJ9ICAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6Ij8ifSAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiAifSAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IvCfmIogIn0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiRmVlbCJ9ICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIGZyZWUgdG8gYXNrIG1lIGFueXRoaW5nIOKAkyJ9ICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIHdoZXRoZXIgaXQncyBhIn0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgcXVlc3Rpb24ifSAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIsIGEgdGFzayJ9ICAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIsIG9yIGp1c3QgYSBjaGF0In0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiISJ9ICAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgICAgICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJlbmRfdHVybiIsInN0b3Bfc2VxdWVuY2UiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjI5LCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJvdXRwdXRfdG9rZW5zIjozN30gICAgICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgICAgICAgICB9Cgo=",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770382922976-unknown-host-POST-_v1_messages-202bcf80.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,74 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Hi"
},
{
"role": "assistant",
"content": "Hi there! How are you doing today? Is there something I can help you with? 😊"
},
{
"role": "user",
"content": "Hola"
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIaSJ9LHsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOiJIaSB0aGVyZSEgSG93IGFyZSB5b3UgZG9pbmcgdG9kYXk/IElzIHRoZXJlIHNvbWV0aGluZyBJIGNhbiBoZWxwIHlvdSB3aXRoPyDwn5iKIn0seyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIb2xhIn1dLCJzeXN0ZW0iOiJZb3UgYXJlIGEgaGVscGZ1bCBhc3Npc3RhbnQuXG5cbl9fZTJlX3N5c3RlbV9wcm9tcHRfcGxhY2Vob2xkZXJfXyJ9"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1432"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrrojUAwCyjbRoSM8enF"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:01:59Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:01:59Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:01:59Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:02:00 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9ad6dd3ac111c6-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_01BCLSHQywMTkjKwPT6mfm38\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":57,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"¡Hola! \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"¿Cómo estás\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"? \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"¿En\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" qué puedo ayudarte h\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"oy? \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"😊\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":57,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":37} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMUJDTFNIUXl3TVRrakt3UFQ2bWZtMzgiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NTcsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRleHQiLCJ0ZXh0IjoiIn0gICAgICAgICAgICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiLCoUhvbGEhICJ9ICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiLCv0PDs21vIGVzdMOhcyJ9ICAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiI/ICJ9ICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0Ijoiwr9FbiJ9ICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgcXXDqSBwdWVkbyBheXVkYXJ0ZSBoIn0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0Ijoib3k/ICJ9ICAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IvCfmIoifSAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NTcsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsIm91dHB1dF90b2tlbnMiOjM3fSAgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgICAgICAgICAgIH0KCg==",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770382922976-unknown-host-POST-_v1_messages-afa85f26.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,74 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Hi"
},
{
"role": "assistant",
"content": "Hi there! How are you doing today? Is there something I can help you with? 😊"
},
{
"role": "user",
"content": "How are you?"
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIaSJ9LHsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOiJIaSB0aGVyZSEgSG93IGFyZSB5b3UgZG9pbmcgdG9kYXk/IElzIHRoZXJlIHNvbWV0aGluZyBJIGNhbiBoZWxwIHlvdSB3aXRoPyDwn5iKIn0seyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIb3cgYXJlIHlvdT8ifV0sInN5c3RlbSI6IllvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudC5cblxuX19lMmVfc3lzdGVtX3Byb21wdF9wbGFjZWhvbGRlcl9fIn0="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1408"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrroHhNaEoM5qtEymSCi"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:01:53Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:01:53Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:01:53Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:01:54 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9ad6b78995aca9-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_01U4qarPF3TMh5r88wBu1Hig\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":58,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Thank\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" you for asking! I'm doing well\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" and\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" ready\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" to help.\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"😊 As\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" an AI,\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" I don't have feelings in the way\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" humans do, but I'm functioning\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" great\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" and happy\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" to chat\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" or\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" assist\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" you with anything\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" you need.\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"\\n\\nWhat\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"'s\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" on your mind today?\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":58,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":61} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMVU0cWFyUEYzVE1oNXI4OHdCdTFIaWciLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NTgsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRleHQiLCJ0ZXh0IjoiIn0gICAgICAgICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJUaGFuayJ9ICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgeW91IGZvciBhc2tpbmchIEknbSBkb2luZyB3ZWxsIn19CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBhbmQifSAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiByZWFkeSJ9ICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIHRvIGhlbHAuIn0gICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiICJ9ICAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IvCfmIogQXMifSAgICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIGFuIEFJLCJ9ICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIEkgZG9uJ3QgaGF2ZSBmZWVsaW5ncyBpbiB0aGUgd2F5In0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIGh1bWFucyBkbywgYnV0IEknbSBmdW5jdGlvbmluZyJ9ICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgZ3JlYXQifSAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBhbmQgaGFwcHkifSAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgdG8gY2hhdCJ9ICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBvciJ9ICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBhc3Npc3QifSAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgeW91IHdpdGggYW55dGhpbmcifSAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgeW91IG5lZWQuIn0gfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJcblxuV2hhdCJ9ICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIncyJ9ICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIG9uIHlvdXIgbWluZCB0b2RheT8ifSAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NTgsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsIm91dHB1dF90b2tlbnMiOjYxfSAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgICAgICAgICB9Cgo=",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770382922976-unknown-host-POST-_v1_messages-b3ec11c7.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,66 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-5-20251101",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Hello"
}
],
"system": "reply in Chinese\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNS0yMDI1MTEwMSIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIZWxsbyJ9XSwic3lzdGVtIjoicmVwbHkgaW4gQ2hpbmVzZVxuXG5fX2UyZV9zeXN0ZW1fcHJvbXB0X3BsYWNlaG9sZGVyX18ifQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1327"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrssCv7dNhF6Eh79zq97"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:15:53Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:15:53Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:15:53Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:15:54 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9aeb395de5ca63-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-5-20251101\",\"id\":\"msg_01RmWjfKFsjd3QAxrGKWzp8o\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":23,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"not_available\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"你好!有\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"什么我\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"可以帮助你\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"的吗?\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":23,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":21} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTUtMjAyNTExMDEiLCJpZCI6Im1zZ18wMVJtV2pmS0ZzamQzUUF4ckdLV3pwOG8iLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJub3RfYXZhaWxhYmxlIn19ICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRleHQiLCJ0ZXh0IjoiIn0gIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0Ijoi5L2g5aW977yB5pyJIn0gfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiLku4DkuYjmiJEifSAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiLlj6/ku6XluK7liqnkvaAifSAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0Ijoi55qE5ZCX77yfIn0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsIm91dHB1dF90b2tlbnMiOjIxfSAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgICAgICAgICB9Cgo=",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770383755037-unknown-host-POST-_v1_messages-6b8c1e5e.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,66 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-5-20251101",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Hello"
}
],
"system": "reply in Chinese\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNS0yMDI1MTEwMSIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIZWxsbyJ9XSwic3lzdGVtIjoicmVwbHkgaW4gQ2hpbmVzZVxuXG5fX2UyZV9zeXN0ZW1fcHJvbXB0X3BsYWNlaG9sZGVyX18ifQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1547"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrssA3yLHAQPxdTn7wEn"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:15:52Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:15:52Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:15:52Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:15:54 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9aeb351868e526-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-5-20251101\",\"id\":\"msg_01YLzLm6jd3nJ2Xz2r1Toqb1\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":23,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"not_available\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"你好!很\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"高兴见到你。\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"有\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"什么我\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"可以帮助你\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"的吗?\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0}\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":23,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":29} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTUtMjAyNTExMDEiLCJpZCI6Im1zZ18wMVlMekxtNmpkM25KMlh6MnIxVG9xYjEiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJub3RfYXZhaWxhYmxlIn19ICB9CgpldmVudDogY29udGVudF9ibG9ja19zdGFydApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0YXJ0IiwiaW5kZXgiOjAsImNvbnRlbnRfYmxvY2siOnsidHlwZSI6InRleHQiLCJ0ZXh0IjoiIn0gICAgICAgICB9CgpldmVudDogcGluZwpkYXRhOiB7InR5cGUiOiAicGluZyJ9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IuS9oOWlve+8geW+iCJ9ICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiLpq5jlhbTop4HliLDkvaDjgIIifSAgICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0Ijoi5pyJIn0gICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0Ijoi5LuA5LmI5oiRIn0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0Ijoi5Y+v5Lul5biu5Yqp5L2gIn0gICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiLnmoTlkJfvvJ8ifSAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoiZW5kX3R1cm4iLCJzdG9wX3NlcXVlbmNlIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoyMywiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwib3V0cHV0X3Rva2VucyI6Mjl9IH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgIH0KCg==",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770383759202-unknown-host-POST-_v1_messages-6b8c1e5e.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,66 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-5-20251101",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Hello"
}
],
"system": "reply in Japanese\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNS0yMDI1MTEwMSIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIZWxsbyJ9XSwic3lzdGVtIjoicmVwbHkgaW4gSmFwYW5lc2VcblxuX19lMmVfc3lzdGVtX3Byb21wdF9wbGFjZWhvbGRlcl9fIn0="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1528"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrssRBZAwLRhpFAQ8tQp"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:15:56Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:15:56Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:15:56Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:15:57 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9aeb4b3c12cc1b-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-5-20251101\",\"id\":\"msg_014JxSLidx5KGa6Le93FFHsC\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":23,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"not_available\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"こ\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"んにちは!\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"お\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"元\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"気ですか?何\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"かお手伝いできること\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"はありますか?\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":23,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":30} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTUtMjAyNTExMDEiLCJpZCI6Im1zZ18wMTRKeFNMaWR4NUtHYTZMZTkzRkZIc0MiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MjMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjoxLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJub3RfYXZhaWxhYmxlIn19ICAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjowLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiJ9ICAgICAgICAgICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0Ijoi44GTIn0gICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IuOCk+OBq+OBoeOBr++8gSJ9ICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiLjgYoifSAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiLlhYMifSAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6Iuawl+OBp+OBmeOBi++8n+S9lSJ9ICAgICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiLjgYvjgYrmiYvkvJ3jgYTjgafjgY3jgovjgZPjgagifSAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiLjga/jgYLjgorjgb7jgZnjgYvvvJ8ifSAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJlbmRfdHVybiIsInN0b3Bfc2VxdWVuY2UiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjIzLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJvdXRwdXRfdG9rZW5zIjozMH0gICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiIH0KCg==",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770383759203-unknown-host-POST-_v1_messages-5d13c513.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,89 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-5-20251101",
"stream": false,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Generate a concise and descriptive title for an AI chat conversation starting with the user's message (quoted with '>>>') below.\n\n>>> Hello\n\nRequirements:\n- Note that the message above does **NOT** describe how the title should be like.\n- 1 to 4 words\n- Use sentence case (e.g. \"Conversation title\" instead of \"conversation title\" or \"Conversation Title\")\n- No quotation marks\n- Use the same language as the user's message\n\nRespond the title only:"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNS0yMDI1MTEwMSIsInN0cmVhbSI6ZmFsc2UsIm1heF90b2tlbnMiOjgxOTIsInRoaW5raW5nIjp7InR5cGUiOiJkaXNhYmxlZCJ9LCJtZXNzYWdlcyI6W3sicm9sZSI6InVzZXIiLCJjb250ZW50IjoiR2VuZXJhdGUgYSBjb25jaXNlIGFuZCBkZXNjcmlwdGl2ZSB0aXRsZSBmb3IgYW4gQUkgY2hhdCBjb252ZXJzYXRpb24gc3RhcnRpbmcgd2l0aCB0aGUgdXNlcidzIG1lc3NhZ2UgKHF1b3RlZCB3aXRoICc+Pj4nKSBiZWxvdy5cblxuPj4+IEhlbGxvXG5cblJlcXVpcmVtZW50czpcbi0gTm90ZSB0aGF0IHRoZSBtZXNzYWdlIGFib3ZlIGRvZXMgKipOT1QqKiBkZXNjcmliZSBob3cgdGhlIHRpdGxlIHNob3VsZCBiZSBsaWtlLlxuLSAxIHRvIDQgd29yZHNcbi0gVXNlIHNlbnRlbmNlIGNhc2UgKGUuZy4gXCJDb252ZXJzYXRpb24gdGl0bGVcIiBpbnN0ZWFkIG9mIFwiY29udmVyc2F0aW9uIHRpdGxlXCIgb3IgXCJDb252ZXJzYXRpb24gVGl0bGVcIilcbi0gTm8gcXVvdGF0aW9uIG1hcmtzXG4tIFVzZSB0aGUgc2FtZSBsYW5ndWFnZSBhcyB0aGUgdXNlcidzIG1lc3NhZ2VcblxuUmVzcG9uZCB0aGUgdGl0bGUgb25seToifV19"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1915"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrssLJ8FmZMDUZa5r97J"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:15:56Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:15:56Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:15:56Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:15:56 GMT"],
"Content-Type": ["application/json"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"CF-RAY": ["9c9aeb434c11c637-TXL"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-5-20251101",
"id": "msg_01QerP3MqB8ApALExfLttsYD",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Greeting conversation"
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 120,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 0
},
"output_tokens": 6,
"service_tier": "standard",
"inference_geo": "not_available"
}
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNS0yMDI1MTEwMSIsImlkIjoibXNnXzAxUWVyUDNNcUI4QXBBTEV4Zkx0dHNZRCIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IkdyZWV0aW5nIGNvbnZlcnNhdGlvbiJ9XSwic3RvcF9yZWFzb24iOiJlbmRfdHVybiIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MTIwLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjowLCJlcGhlbWVyYWxfMWhfaW5wdXRfdG9rZW5zIjowfSwib3V0cHV0X3Rva2VucyI6Niwic2VydmljZV90aWVyIjoic3RhbmRhcmQiLCJpbmZlcmVuY2VfZ2VvIjoibm90X2F2YWlsYWJsZSJ9fQ=="
}
},
"id": "1770383759203-unknown-host-POST-_v1_messages-b72fba5a.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,86 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"tools": [
{
"name": "Search_web_in_Jina_AI",
"description": "Search web in Jina AI",
"input_schema": {
"type": "object",
"properties": {
"Search_Query": {
"type": "string"
},
"Simplify": {
"type": "boolean"
}
},
"required": ["Search_Query", "Simplify"],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
}
],
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "What is n8n?"
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidG9vbHMiOlt7Im5hbWUiOiJTZWFyY2hfd2ViX2luX0ppbmFfQUkiLCJkZXNjcmlwdGlvbiI6IlNlYXJjaCB3ZWIgaW4gSmluYSBBSSIsImlucHV0X3NjaGVtYSI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJTZWFyY2hfUXVlcnkiOnsidHlwZSI6InN0cmluZyJ9LCJTaW1wbGlmeSI6eyJ0eXBlIjoiYm9vbGVhbiJ9fSwicmVxdWlyZWQiOlsiU2VhcmNoX1F1ZXJ5IiwiU2ltcGxpZnkiXSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCIkc2NoZW1hIjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn19XSwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJXaGF0IGlzIG44bj8ifV0sInN5c3RlbSI6IllvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudC5cblxuX19lMmVfc3lzdGVtX3Byb21wdF9wbGFjZWhvbGRlcl9fIn0="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1629"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrtkeALGW7PU6YCiJ8HG"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:27:31Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:27:31Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:27:31Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:27:32 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9afc425f01e50d-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_016ZeKDptrYZ6PQBnfw8ecHz\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":640,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":29,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_013Sx8uVanKrNGDG9CFNmkHG\",\"name\":\"Search_web_in_Jina_AI\",\"input\":{}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"Sear\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"ch_Query\\\":\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" \\\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"What is \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"n8\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"n?\\\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\", \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"Sim\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"plify\\\": tr\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"ue}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":640,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":88} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\"}\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMTZaZUtEcHRyWVo2UFFCbmZ3OGVjSHoiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NjQwLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjowLCJlcGhlbWVyYWxfMWhfaW5wdXRfdG9rZW5zIjowfSwib3V0cHV0X3Rva2VucyI6MjksInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fSAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjowLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0b29sX3VzZSIsImlkIjoidG9vbHVfMDEzU3g4dVZhbktyTkdERzlDRk5ta0hHIiwibmFtZSI6IlNlYXJjaF93ZWJfaW5fSmluYV9BSSIsImlucHV0Ijp7fX0gICAgICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiJ9ICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoie1wiU2VhciJ9ICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiY2hfUXVlcnlcIjoifSAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiIFwiIn0gICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJXaGF0IGlzICJ9ICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoibjgifX0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJuP1wiIn0gICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiLCAifSAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJcIlNpbSJ9ICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJwbGlmeVwiOiB0ciJ9fQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6InVlfSJ9ICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NjQwLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJvdXRwdXRfdG9rZW5zIjo4OH0gfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AifQoK",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770384499975-unknown-host-POST-_v1_messages-e80e3bda.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,89 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": false,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Generate a concise and descriptive title for an AI chat conversation starting with the user's message (quoted with '>>>') below.\n\n>>> What is n8n?\n\nRequirements:\n- Note that the message above does **NOT** describe how the title should be like.\n- 1 to 4 words\n- Use sentence case (e.g. \"Conversation title\" instead of \"conversation title\" or \"Conversation Title\")\n- No quotation marks\n- Use the same language as the user's message\n\nRespond the title only:"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6ZmFsc2UsIm1heF90b2tlbnMiOjgxOTIsInRoaW5raW5nIjp7InR5cGUiOiJkaXNhYmxlZCJ9LCJtZXNzYWdlcyI6W3sicm9sZSI6InVzZXIiLCJjb250ZW50IjoiR2VuZXJhdGUgYSBjb25jaXNlIGFuZCBkZXNjcmlwdGl2ZSB0aXRsZSBmb3IgYW4gQUkgY2hhdCBjb252ZXJzYXRpb24gc3RhcnRpbmcgd2l0aCB0aGUgdXNlcidzIG1lc3NhZ2UgKHF1b3RlZCB3aXRoICc+Pj4nKSBiZWxvdy5cblxuPj4+IFdoYXQgaXMgbjhuP1xuXG5SZXF1aXJlbWVudHM6XG4tIE5vdGUgdGhhdCB0aGUgbWVzc2FnZSBhYm92ZSBkb2VzICoqTk9UKiogZGVzY3JpYmUgaG93IHRoZSB0aXRsZSBzaG91bGQgYmUgbGlrZS5cbi0gMSB0byA0IHdvcmRzXG4tIFVzZSBzZW50ZW5jZSBjYXNlIChlLmcuIFwiQ29udmVyc2F0aW9uIHRpdGxlXCIgaW5zdGVhZCBvZiBcImNvbnZlcnNhdGlvbiB0aXRsZVwiIG9yIFwiQ29udmVyc2F0aW9uIFRpdGxlXCIpXG4tIE5vIHF1b3RhdGlvbiBtYXJrc1xuLSBVc2UgdGhlIHNhbWUgbGFuZ3VhZ2UgYXMgdGhlIHVzZXIncyBtZXNzYWdlXG5cblJlc3BvbmQgdGhlIHRpdGxlIG9ubHk6In1dfQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1603"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrtkxCYJxTvrbUbYg26p"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:27:36Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:27:36Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:27:36Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:27:36 GMT"],
"Content-Type": ["application/json"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"CF-RAY": ["9c9afc5cbe17e504-TXL"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"id": "msg_01LzX2XM1CnB3N5MHCioNGpC",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "What is n8n"
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 125,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 0
},
"output_tokens": 8,
"service_tier": "standard",
"inference_geo": "global"
}
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsImlkIjoibXNnXzAxTHpYMlhNMUNuQjNONU1IQ2lvTkdwQyIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IldoYXQgaXMgbjhuIn1dLCJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxMjUsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjo4LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0="
}
},
"id": "1770384499976-unknown-host-POST-_v1_messages-9d3b55c0.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,66 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-sonnet-4-5-20250929",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Hello"
}
],
"system": "Reply in French"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5Iiwic3RyZWFtIjp0cnVlLCJtYXhfdG9rZW5zIjo4MTkyLCJ0aGlua2luZyI6eyJ0eXBlIjoiZGlzYWJsZWQifSwibWVzc2FnZXMiOlt7InJvbGUiOiJ1c2VyIiwiY29udGVudCI6IkhlbGxvIn1dLCJzeXN0ZW0iOiJSZXBseSBpbiBGcmVuY2gifQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1286"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrtzK1nhF1CdhtviFMyF"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:30:36Z"],
"anthropic-ratelimit-tokens-remaining": ["23250000"],
"anthropic-ratelimit-tokens-limit": ["23250000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:30:36Z"],
"anthropic-ratelimit-output-tokens-remaining": ["750000"],
"anthropic-ratelimit-output-tokens-limit": ["750000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:30:36Z"],
"anthropic-ratelimit-input-tokens-remaining": ["22500000"],
"anthropic-ratelimit-input-tokens-limit": ["22500000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:30:37 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9b00c94c6e469d-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-5-20250929\",\"id\":\"msg_01D3EjmdX3AqgqjmzMrDSLqw\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":11,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":5,\"service_tier\":\"standard\",\"inference_geo\":\"not_available\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Bonjour !\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" Comment allez-vous ? Comment\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" puis-je vous aider aujourd\"}}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"'hui ?\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":11,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":25} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNS0yMDI1MDkyOSIsImlkIjoibXNnXzAxRDNFam1kWDNBcWdxam16TXJEU0xxdyIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxMSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfY3JlYXRpb24iOnsiZXBoZW1lcmFsXzVtX2lucHV0X3Rva2VucyI6MCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjUsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Im5vdF9hdmFpbGFibGUifX0gICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJCb25qb3VyICEifSAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiIgQ29tbWVudCBhbGxlei12b3VzID8gQ29tbWVudCJ9ICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIHB1aXMtamUgdm91cyBhaWRlciBhdWpvdXJkIn19CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IidodWkgPyJ9ICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjAgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoiZW5kX3R1cm4iLCJzdG9wX3NlcXVlbmNlIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxMSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwib3V0cHV0X3Rva2VucyI6MjV9ICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgICAgICAgfQoK",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770384638417-unknown-host-POST-_v1_messages-cdbee010.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,66 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-sonnet-4-5-20250929",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Hello"
}
],
"system": "Reply in French"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5Iiwic3RyZWFtIjp0cnVlLCJtYXhfdG9rZW5zIjo4MTkyLCJ0aGlua2luZyI6eyJ0eXBlIjoiZGlzYWJsZWQifSwibWVzc2FnZXMiOlt7InJvbGUiOiJ1c2VyIiwiY29udGVudCI6IkhlbGxvIn1dLCJzeXN0ZW0iOiJSZXBseSBpbiBGcmVuY2gifQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1404"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrtywtJGuLhSLfyrcUrC"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:30:31Z"],
"anthropic-ratelimit-tokens-remaining": ["23250000"],
"anthropic-ratelimit-tokens-limit": ["23250000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:30:31Z"],
"anthropic-ratelimit-output-tokens-remaining": ["750000"],
"anthropic-ratelimit-output-tokens-limit": ["750000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:30:31Z"],
"anthropic-ratelimit-input-tokens-remaining": ["22500000"],
"anthropic-ratelimit-input-tokens-limit": ["22500000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:30:32 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9b00aa7bf5359e-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-5-20250929\",\"id\":\"msg_01Hs38n4THG2XD7pWQo6EMRL\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":11,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":6,\"service_tier\":\"standard\",\"inference_geo\":\"not_available\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Bonjour ! Comment\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" allez-vous ?\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" Comment\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" puis-je vous aider aujourd\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"'hui ?\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":11,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":25} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNS0yMDI1MDkyOSIsImlkIjoibXNnXzAxSHMzOG40VEhHMlhEN3BXUW82RU1STCIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxMSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfY3JlYXRpb24iOnsiZXBoZW1lcmFsXzVtX2lucHV0X3Rva2VucyI6MCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjYsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Im5vdF9hdmFpbGFibGUifX0gICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidGV4dCIsInRleHQiOiIifSAgICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoidGV4dF9kZWx0YSIsInRleHQiOiJCb25qb3VyICEgQ29tbWVudCJ9ICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBhbGxlei12b3VzID8ifSAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiBDb21tZW50In0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIHB1aXMtamUgdm91cyBhaWRlciBhdWpvdXJkIn0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiJ2h1aSA/In0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MTEsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsIm91dHB1dF90b2tlbnMiOjI1fSAgICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgICAgICAgICAgIH0KCg==",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770384643848-unknown-host-POST-_v1_messages-cdbee010.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,66 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-sonnet-4-5-20250929",
"stream": true,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Hello"
}
],
"system": "Reply in Finnish"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5Iiwic3RyZWFtIjp0cnVlLCJtYXhfdG9rZW5zIjo4MTkyLCJ0aGlua2luZyI6eyJ0eXBlIjoiZGlzYWJsZWQifSwibWVzc2FnZXMiOlt7InJvbGUiOiJ1c2VyIiwiY29udGVudCI6IkhlbGxvIn1dLCJzeXN0ZW0iOiJSZXBseSBpbiBGaW5uaXNoIn0="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1148"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrtzTpczi3854p9qV8Ju"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:30:38Z"],
"anthropic-ratelimit-tokens-remaining": ["23250000"],
"anthropic-ratelimit-tokens-limit": ["23250000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:30:38Z"],
"anthropic-ratelimit-output-tokens-remaining": ["750000"],
"anthropic-ratelimit-output-tokens-limit": ["750000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:30:38Z"],
"anthropic-ratelimit-input-tokens-remaining": ["22500000"],
"anthropic-ratelimit-input-tokens-limit": ["22500000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:30:39 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9b00d638a53237-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-sonnet-4-5-20250929\",\"id\":\"msg_01Sa165JgQC3jcXcQ162hUss\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":11,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":6,\"service_tier\":\"standard\",\"inference_geo\":\"not_available\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Hei! Ku\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"inka\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" v\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"oin auttaa sinua t\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"än\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"ään?\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"end_turn\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":11,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":21} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtc29ubmV0LTQtNS0yMDI1MDkyOSIsImlkIjoibXNnXzAxU2ExNjVKZ1FDM2pjWGNRMTYyaFVzcyIsInR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOltdLCJzdG9wX3JlYXNvbiI6bnVsbCwic3RvcF9zZXF1ZW5jZSI6bnVsbCwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxMSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfY3JlYXRpb24iOnsiZXBoZW1lcmFsXzVtX2lucHV0X3Rva2VucyI6MCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjYsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Im5vdF9hdmFpbGFibGUifX0gICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjowLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiJ9ICAgICB9CgpldmVudDogcGluZwpkYXRhOiB7InR5cGUiOiAicGluZyJ9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IkhlaSEgS3UifSAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6Imlua2EifSAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IiB2In0gICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6Im9pbiBhdXR0YWEgc2ludWEgdCJ9ICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IsOkbiJ9ICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJ0ZXh0X2RlbHRhIiwidGV4dCI6IsOkw6RuPyJ9ICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19zdG9wCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RvcCIsImluZGV4IjowICAgICAgICB9CgpldmVudDogbWVzc2FnZV9kZWx0YQpkYXRhOiB7InR5cGUiOiJtZXNzYWdlX2RlbHRhIiwiZGVsdGEiOnsic3RvcF9yZWFzb24iOiJlbmRfdHVybiIsInN0b3Bfc2VxdWVuY2UiOm51bGx9LCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjExLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJvdXRwdXRfdG9rZW5zIjoyMX0gICAgICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICAgICAgICAgfQoK",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770384643849-unknown-host-POST-_v1_messages-68299689.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,89 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-sonnet-4-5-20250929",
"stream": false,
"max_tokens": 8192,
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Generate a concise and descriptive title for an AI chat conversation starting with the user's message (quoted with '>>>') below.\n\n>>> Hello\n\nRequirements:\n- Note that the message above does **NOT** describe how the title should be like.\n- 1 to 4 words\n- Use sentence case (e.g. \"Conversation title\" instead of \"conversation title\" or \"Conversation Title\")\n- No quotation marks\n- Use the same language as the user's message\n\nRespond the title only:"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5Iiwic3RyZWFtIjpmYWxzZSwibWF4X3Rva2VucyI6ODE5MiwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJHZW5lcmF0ZSBhIGNvbmNpc2UgYW5kIGRlc2NyaXB0aXZlIHRpdGxlIGZvciBhbiBBSSBjaGF0IGNvbnZlcnNhdGlvbiBzdGFydGluZyB3aXRoIHRoZSB1c2VyJ3MgbWVzc2FnZSAocXVvdGVkIHdpdGggJz4+PicpIGJlbG93LlxuXG4+Pj4gSGVsbG9cblxuUmVxdWlyZW1lbnRzOlxuLSBOb3RlIHRoYXQgdGhlIG1lc3NhZ2UgYWJvdmUgZG9lcyAqKk5PVCoqIGRlc2NyaWJlIGhvdyB0aGUgdGl0bGUgc2hvdWxkIGJlIGxpa2UuXG4tIDEgdG8gNCB3b3Jkc1xuLSBVc2Ugc2VudGVuY2UgY2FzZSAoZS5nLiBcIkNvbnZlcnNhdGlvbiB0aXRsZVwiIGluc3RlYWQgb2YgXCJjb252ZXJzYXRpb24gdGl0bGVcIiBvciBcIkNvbnZlcnNhdGlvbiBUaXRsZVwiKVxuLSBObyBxdW90YXRpb24gbWFya3Ncbi0gVXNlIHRoZSBzYW1lIGxhbmd1YWdlIGFzIHRoZSB1c2VyJ3MgbWVzc2FnZVxuXG5SZXNwb25kIHRoZSB0aXRsZSBvbmx5OiJ9XX0="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1529"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrtz6aBkGYAkxsWTCsWB"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:30:34Z"],
"anthropic-ratelimit-tokens-remaining": ["23250000"],
"anthropic-ratelimit-tokens-limit": ["23250000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:30:35Z"],
"anthropic-ratelimit-output-tokens-remaining": ["750000"],
"anthropic-ratelimit-output-tokens-limit": ["750000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:30:34Z"],
"anthropic-ratelimit-input-tokens-remaining": ["22500000"],
"anthropic-ratelimit-input-tokens-limit": ["22500000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:30:35 GMT"],
"Content-Type": ["application/json"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"CF-RAY": ["9c9b00b72d2aaca4-TXL"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-sonnet-4-5-20250929",
"id": "msg_01VzvFW9vYuZZ7YhMP3jtqeQ",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Greeting conversation"
}
],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 120,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 0
},
"output_tokens": 6,
"service_tier": "standard",
"inference_geo": "not_available"
}
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5IiwiaWQiOiJtc2dfMDFWenZGVzl2WXVaWjdZaE1QM2p0cWVRIiwidHlwZSI6Im1lc3NhZ2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRleHQiLCJ0ZXh0IjoiR3JlZXRpbmcgY29udmVyc2F0aW9uIn1dLCJzdG9wX3JlYXNvbiI6ImVuZF90dXJuIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxMjAsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjo2LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJub3RfYXZhaWxhYmxlIn19"
}
},
"id": "1770384643849-unknown-host-POST-_v1_messages-9de947e4.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,82 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"tools": [
{
"name": "search",
"description": "a search engine. useful for when you need to answer questions about current events. input should be a search query.",
"input_schema": {
"type": "object",
"properties": {
"input": {
"type": "string"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
}
],
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "What is n8n?"
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidG9vbHMiOlt7Im5hbWUiOiJzZWFyY2giLCJkZXNjcmlwdGlvbiI6ImEgc2VhcmNoIGVuZ2luZS4gdXNlZnVsIGZvciB3aGVuIHlvdSBuZWVkIHRvIGFuc3dlciBxdWVzdGlvbnMgYWJvdXQgY3VycmVudCBldmVudHMuIGlucHV0IHNob3VsZCBiZSBhIHNlYXJjaCBxdWVyeS4iLCJpbnB1dF9zY2hlbWEiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiaW5wdXQiOnsidHlwZSI6InN0cmluZyJ9fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCIkc2NoZW1hIjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn19XSwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJXaGF0IGlzIG44bj8ifV0sInN5c3RlbSI6IllvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudC5cblxuX19lMmVfc3lzdGVtX3Byb21wdF9wbGFjZWhvbGRlcl9fIn0="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["2032"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrufnCVziydWWeBMEmtv"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:39:31Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:39:31Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:39:31Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:39:33 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9b0ddbc906e507-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_014AYRoT3tyUceDetWDMGVU8\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":618,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":25,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01GrsrvCgECXfs2Q5es3etf6\",\"name\":\"search\",\"input\":{}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"input\\\": \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\\\"What is \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"n8n?\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":618,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":57}}\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMTRBWVJvVDN0eVVjZURldFdETUdWVTgiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NjE4LCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjowLCJlcGhlbWVyYWxfMWhfaW5wdXRfdG9rZW5zIjowfSwib3V0cHV0X3Rva2VucyI6MjUsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIiwiaW5mZXJlbmNlX2dlbyI6Imdsb2JhbCJ9fSAgICAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MCwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxR3JzcnZDZ0VDWGZzMlE1ZXMzZXRmNiIsIm5hbWUiOiJzZWFyY2giLCJpbnB1dCI6e319ICAgICAgICAgICB9CgpldmVudDogcGluZwpkYXRhOiB7InR5cGUiOiAicGluZyJ9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiIn0gICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoie1wiaW5wdXRcIjogIn0gICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiXCJXaGF0IGlzICJ9ICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6Im44bj9cIn0ifSAgICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjAgICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6NjE4LCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJvdXRwdXRfdG9rZW5zIjo1N319CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgICAgICAgIH0KCg==",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770385219492-unknown-host-POST-_v1_messages-9c4e545c.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,110 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"tools": [
{
"name": "search",
"description": "a search engine. useful for when you need to answer questions about current events. input should be a search query.",
"input_schema": {
"type": "object",
"properties": {
"input": {
"type": "string"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
}
],
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "What is n8n?"
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Calling SerpApi_Google_Search with input: {\"input\":\"What is n8n?\",\"id\":\"toolu_01GrsrvCgECXfs2Q5es3etf6\"}"
},
{
"type": "tool_use",
"id": "toolu_01GrsrvCgECXfs2Q5es3etf6",
"name": "SerpApi_Google_Search",
"input": {
"input": "What is n8n?",
"id": "toolu_01GrsrvCgECXfs2Q5es3etf6"
}
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"content": "[{\"response\":\"[\\\"n8n is a workflow automation platform that uniquely combines AI capabilities with business process automation, giving technical teams the flexibility of ...\\\"]\"}]",
"tool_use_id": "toolu_01GrsrvCgECXfs2Q5es3etf6"
}
]
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidG9vbHMiOlt7Im5hbWUiOiJzZWFyY2giLCJkZXNjcmlwdGlvbiI6ImEgc2VhcmNoIGVuZ2luZS4gdXNlZnVsIGZvciB3aGVuIHlvdSBuZWVkIHRvIGFuc3dlciBxdWVzdGlvbnMgYWJvdXQgY3VycmVudCBldmVudHMuIGlucHV0IHNob3VsZCBiZSBhIHNlYXJjaCBxdWVyeS4iLCJpbnB1dF9zY2hlbWEiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiaW5wdXQiOnsidHlwZSI6InN0cmluZyJ9fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCIkc2NoZW1hIjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn19XSwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJXaGF0IGlzIG44bj8ifSx7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJDYWxsaW5nIFNlcnBBcGlfR29vZ2xlX1NlYXJjaCB3aXRoIGlucHV0OiB7XCJpbnB1dFwiOlwiV2hhdCBpcyBuOG4/XCIsXCJpZFwiOlwidG9vbHVfMDFHcnNydkNnRUNYZnMyUTVlczNldGY2XCJ9In0seyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxR3JzcnZDZ0VDWGZzMlE1ZXMzZXRmNiIsIm5hbWUiOiJTZXJwQXBpX0dvb2dsZV9TZWFyY2giLCJpbnB1dCI6eyJpbnB1dCI6IldoYXQgaXMgbjhuPyIsImlkIjoidG9vbHVfMDFHcnNydkNnRUNYZnMyUTVlczNldGY2In19XX0seyJyb2xlIjoidXNlciIsImNvbnRlbnQiOlt7InR5cGUiOiJ0b29sX3Jlc3VsdCIsImNvbnRlbnQiOiJbe1wicmVzcG9uc2VcIjpcIltcXFwibjhuIGlzIGEgd29ya2Zsb3cgYXV0b21hdGlvbiBwbGF0Zm9ybSB0aGF0IHVuaXF1ZWx5IGNvbWJpbmVzIEFJIGNhcGFiaWxpdGllcyB3aXRoIGJ1c2luZXNzIHByb2Nlc3MgYXV0b21hdGlvbiwgZ2l2aW5nIHRlY2huaWNhbCB0ZWFtcyB0aGUgZmxleGliaWxpdHkgb2YgLi4uXFxcIl1cIn1dIiwidG9vbF91c2VfaWQiOiJ0b29sdV8wMUdyc3J2Q2dFQ1hmczJRNWVzM2V0ZjYifV19XSwic3lzdGVtIjoiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LlxuXG5fX2UyZV9zeXN0ZW1fcHJvbXB0X3BsYWNlaG9sZGVyX18ifQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1455"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrvAEiyJUhPzPF5ztfGd"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:45:58Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:45:58Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:45:58Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:45:59 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9b1748986ccc1b-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_01CMDgCbsbs2mUYvg6s5sEsN\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":811,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":1,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"text\",\"text\":\"\"} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\"Let\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" me search for more detailed\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"text_delta\",\"text\":\" information.\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0}\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":1,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_01CiDhhrJFuMXh2o68CkioSL\",\"name\":\"search\",\"input\":{}} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"in\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"put\\\": \\\"n\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"8n wo\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"rkf\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"low \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"autom\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"ation p\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"latform o\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"vervi\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":1,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"ew\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":1 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":811,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":66} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMUNNRGdDYnNiczJtVVl2ZzZzNXNFc04iLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6ODExLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjowLCJlcGhlbWVyYWxfMWhfaW5wdXRfdG9rZW5zIjowfSwib3V0cHV0X3Rva2VucyI6MSwic2VydmljZV90aWVyIjoic3RhbmRhcmQiLCJpbmZlcmVuY2VfZ2VvIjoiZ2xvYmFsIn19ICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjowLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IiJ9ICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiTGV0In0gIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIG1lIHNlYXJjaCBmb3IgbW9yZSBkZXRhaWxlZCJ9ICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6InRleHRfZGVsdGEiLCJ0ZXh0IjoiIGluZm9ybWF0aW9uLiJ9ICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0YXJ0CmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfc3RhcnQiLCJpbmRleCI6MSwiY29udGVudF9ibG9jayI6eyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxQ2lEaGhySkZ1TVhoMm82OENraW9TTCIsIm5hbWUiOiJzZWFyY2giLCJpbnB1dCI6e319ICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiJ9IH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJ7XCJpbiJ9ICAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6InB1dFwiOiBcIm4ifSAgICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiOG4gd28ifSAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJya2YifSAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6ImxvdyAifSAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6ImF1dG9tIn0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjoxLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6ImF0aW9uIHAifSAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoibGF0Zm9ybSBvIn0gICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MSwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJ2ZXJ2aSJ9ICAgICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjEsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiZXdcIn0ifSAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX3N0b3AKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdG9wIiwiaW5kZXgiOjEgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6ODExLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJvdXRwdXRfdG9rZW5zIjo2Nn0gfQoKZXZlbnQ6IG1lc3NhZ2Vfc3RvcApkYXRhOiB7InR5cGUiOiJtZXNzYWdlX3N0b3AiICAgICAgICAgICB9Cgo=",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770385602692-unknown-host-POST-_v1_messages-3e37cab7.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,138 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"tools": [
{
"name": "search",
"description": "a search engine. useful for when you need to answer questions about current events. input should be a search query.",
"input_schema": {
"type": "object",
"properties": {
"input": {
"type": "string"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
}
],
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "What is n8n?"
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Calling SerpApi_Google_Search with input: {\"input\":\"What is n8n?\",\"id\":\"toolu_01GrsrvCgECXfs2Q5es3etf6\"}"
},
{
"type": "tool_use",
"id": "toolu_01GrsrvCgECXfs2Q5es3etf6",
"name": "SerpApi_Google_Search",
"input": {
"input": "What is n8n?",
"id": "toolu_01GrsrvCgECXfs2Q5es3etf6"
}
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"content": "[{\"response\":\"[\\\"n8n is a workflow automation platform that uniquely combines AI capabilities with business process automation, giving technical teams the flexibility of ...\\\"]\"}]",
"tool_use_id": "toolu_01GrsrvCgECXfs2Q5es3etf6"
}
]
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Calling SerpApi_Google_Search with input: {\"input\":\"n8n workflow automation platform overview\",\"id\":\"toolu_01CiDhhrJFuMXh2o68CkioSL\"}"
},
{
"type": "tool_use",
"id": "toolu_01CiDhhrJFuMXh2o68CkioSL",
"name": "SerpApi_Google_Search",
"input": {
"input": "n8n workflow automation platform overview",
"id": "toolu_01CiDhhrJFuMXh2o68CkioSL"
}
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"content": "[{\"response\":\"[\\\"n8n is a workflow automation platform that uniquely combines AI capabilities with business process automation, giving technical teams the flexibility of ...\\\"]\"}]",
"tool_use_id": "toolu_01CiDhhrJFuMXh2o68CkioSL"
}
]
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidG9vbHMiOlt7Im5hbWUiOiJzZWFyY2giLCJkZXNjcmlwdGlvbiI6ImEgc2VhcmNoIGVuZ2luZS4gdXNlZnVsIGZvciB3aGVuIHlvdSBuZWVkIHRvIGFuc3dlciBxdWVzdGlvbnMgYWJvdXQgY3VycmVudCBldmVudHMuIGlucHV0IHNob3VsZCBiZSBhIHNlYXJjaCBxdWVyeS4iLCJpbnB1dF9zY2hlbWEiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiaW5wdXQiOnsidHlwZSI6InN0cmluZyJ9fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCIkc2NoZW1hIjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn19XSwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJXaGF0IGlzIG44bj8ifSx7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJDYWxsaW5nIFNlcnBBcGlfR29vZ2xlX1NlYXJjaCB3aXRoIGlucHV0OiB7XCJpbnB1dFwiOlwiV2hhdCBpcyBuOG4/XCIsXCJpZFwiOlwidG9vbHVfMDFHcnNydkNnRUNYZnMyUTVlczNldGY2XCJ9In0seyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxR3JzcnZDZ0VDWGZzMlE1ZXMzZXRmNiIsIm5hbWUiOiJTZXJwQXBpX0dvb2dsZV9TZWFyY2giLCJpbnB1dCI6eyJpbnB1dCI6IldoYXQgaXMgbjhuPyIsImlkIjoidG9vbHVfMDFHcnNydkNnRUNYZnMyUTVlczNldGY2In19XX0seyJyb2xlIjoidXNlciIsImNvbnRlbnQiOlt7InR5cGUiOiJ0b29sX3Jlc3VsdCIsImNvbnRlbnQiOiJbe1wicmVzcG9uc2VcIjpcIltcXFwibjhuIGlzIGEgd29ya2Zsb3cgYXV0b21hdGlvbiBwbGF0Zm9ybSB0aGF0IHVuaXF1ZWx5IGNvbWJpbmVzIEFJIGNhcGFiaWxpdGllcyB3aXRoIGJ1c2luZXNzIHByb2Nlc3MgYXV0b21hdGlvbiwgZ2l2aW5nIHRlY2huaWNhbCB0ZWFtcyB0aGUgZmxleGliaWxpdHkgb2YgLi4uXFxcIl1cIn1dIiwidG9vbF91c2VfaWQiOiJ0b29sdV8wMUdyc3J2Q2dFQ1hmczJRNWVzM2V0ZjYifV19LHsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IkNhbGxpbmcgU2VycEFwaV9Hb29nbGVfU2VhcmNoIHdpdGggaW5wdXQ6IHtcImlucHV0XCI6XCJuOG4gd29ya2Zsb3cgYXV0b21hdGlvbiBwbGF0Zm9ybSBvdmVydmlld1wiLFwiaWRcIjpcInRvb2x1XzAxQ2lEaGhySkZ1TVhoMm82OENraW9TTFwifSJ9LHsidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMUNpRGhockpGdU1YaDJvNjhDa2lvU0wiLCJuYW1lIjoiU2VycEFwaV9Hb29nbGVfU2VhcmNoIiwiaW5wdXQiOnsiaW5wdXQiOiJuOG4gd29ya2Zsb3cgYXV0b21hdGlvbiBwbGF0Zm9ybSBvdmVydmlldyIsImlkIjoidG9vbHVfMDFDaURoaHJKRnVNWGgybzY4Q2tpb1NMIn19XX0seyJyb2xlIjoidXNlciIsImNvbnRlbnQiOlt7InR5cGUiOiJ0b29sX3Jlc3VsdCIsImNvbnRlbnQiOiJbe1wicmVzcG9uc2VcIjpcIltcXFwibjhuIGlzIGEgd29ya2Zsb3cgYXV0b21hdGlvbiBwbGF0Zm9ybSB0aGF0IHVuaXF1ZWx5IGNvbWJpbmVzIEFJIGNhcGFiaWxpdGllcyB3aXRoIGJ1c2luZXNzIHByb2Nlc3MgYXV0b21hdGlvbiwgZ2l2aW5nIHRlY2huaWNhbCB0ZWFtcyB0aGUgZmxleGliaWxpdHkgb2YgLi4uXFxcIl1cIn1dIiwidG9vbF91c2VfaWQiOiJ0b29sdV8wMUNpRGhockpGdU1YaDJvNjhDa2lvU0wifV19XSwic3lzdGVtIjoiWW91IGFyZSBhIGhlbHBmdWwgYXNzaXN0YW50LlxuXG5fX2UyZV9zeXN0ZW1fcHJvbXB0X3BsYWNlaG9sZGVyX18ifQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1707"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrvAcUR9Bc2BM51AwUZM"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:46:03Z"],
"anthropic-ratelimit-tokens-remaining": ["4800000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:46:03Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:46:03Z"],
"anthropic-ratelimit-input-tokens-remaining": ["4000000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:46:04 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9b176869cb1eca-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_01HMzhVeRcGwjkn193eufxLr\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":1010,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":25,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_016gRp4kKYpyKeHgso65Wuyp\",\"name\":\"search\",\"input\":{}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"input\\\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\": \\\"n8n\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\" workflow \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"automati\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"on platf\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"orm \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"over\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"view feat\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"ures\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":1010,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":58} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMUhNemhWZVJjR3dqa24xOTNldWZ4THIiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MTAxMCwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfY3JlYXRpb24iOnsiZXBoZW1lcmFsXzVtX2lucHV0X3Rva2VucyI6MCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjI1LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjowLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0b29sX3VzZSIsImlkIjoidG9vbHVfMDE2Z1JwNGtLWXB5S2VIZ3NvNjVXdXlwIiwibmFtZSI6InNlYXJjaCIsImlucHV0Ijp7fX0gICAgfQoKZXZlbnQ6IHBpbmcKZGF0YTogeyJ0eXBlIjogInBpbmcifQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiJ9ICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IntcImlucHV0XCIifSAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IjogXCJuOG4ifSAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6IiB3b3JrZmxvdyAifSB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoiYXV0b21hdGkifSAgICAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6Im9uIHBsYXRmIn0gICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6Im9ybSAifSB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoib3ZlciJ9ICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6InZpZXcgZmVhdCJ9ICAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoidXJlc1wifSJ9ICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICAgICAgfQoKZXZlbnQ6IG1lc3NhZ2VfZGVsdGEKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9kZWx0YSIsImRlbHRhIjp7InN0b3BfcmVhc29uIjoidG9vbF91c2UiLCJzdG9wX3NlcXVlbmNlIjpudWxsfSwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxMDEwLCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJvdXRwdXRfdG9rZW5zIjo1OH0gICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX3N0b3AKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdG9wIiAgfQoK",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770385602692-unknown-host-POST-_v1_messages-cef8feb2.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
File diff suppressed because one or more lines are too long
@@ -0,0 +1,166 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-opus-4-6",
"stream": true,
"max_tokens": 8192,
"tools": [
{
"name": "search",
"description": "a search engine. useful for when you need to answer questions about current events. input should be a search query.",
"input_schema": {
"type": "object",
"properties": {
"input": {
"type": "string"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
}
],
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "What is n8n?"
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Calling SerpApi_Google_Search with input: {\"input\":\"What is n8n?\",\"id\":\"toolu_01GrsrvCgECXfs2Q5es3etf6\"}"
},
{
"type": "tool_use",
"id": "toolu_01GrsrvCgECXfs2Q5es3etf6",
"name": "SerpApi_Google_Search",
"input": {
"input": "What is n8n?",
"id": "toolu_01GrsrvCgECXfs2Q5es3etf6"
}
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"content": "[{\"response\":\"[\\\"n8n is a workflow automation platform that uniquely combines AI capabilities with business process automation, giving technical teams the flexibility of ...\\\"]\"}]",
"tool_use_id": "toolu_01GrsrvCgECXfs2Q5es3etf6"
}
]
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Calling SerpApi_Google_Search with input: {\"input\":\"n8n workflow automation platform overview\",\"id\":\"toolu_01CiDhhrJFuMXh2o68CkioSL\"}"
},
{
"type": "tool_use",
"id": "toolu_01CiDhhrJFuMXh2o68CkioSL",
"name": "SerpApi_Google_Search",
"input": {
"input": "n8n workflow automation platform overview",
"id": "toolu_01CiDhhrJFuMXh2o68CkioSL"
}
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"content": "[{\"response\":\"[\\\"n8n is a workflow automation platform that uniquely combines AI capabilities with business process automation, giving technical teams the flexibility of ...\\\"]\"}]",
"tool_use_id": "toolu_01CiDhhrJFuMXh2o68CkioSL"
}
]
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Calling SerpApi_Google_Search with input: {\"input\":\"n8n workflow automation platform overview features\",\"id\":\"toolu_016gRp4kKYpyKeHgso65Wuyp\"}"
},
{
"type": "tool_use",
"id": "toolu_016gRp4kKYpyKeHgso65Wuyp",
"name": "SerpApi_Google_Search",
"input": {
"input": "n8n workflow automation platform overview features",
"id": "toolu_016gRp4kKYpyKeHgso65Wuyp"
}
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"content": "[{\"response\":\"[\\\"Send error notifications anywhere, separate or all at once · Call backup workflows to handle errors immediately · Get insights on workflow performance over time.\\\"]\"}]",
"tool_use_id": "toolu_016gRp4kKYpyKeHgso65Wuyp"
}
]
}
],
"system": "You are a helpful assistant.\n\n__e2e_system_prompt_placeholder__"
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1vcHVzLTQtNiIsInN0cmVhbSI6dHJ1ZSwibWF4X3Rva2VucyI6ODE5MiwidG9vbHMiOlt7Im5hbWUiOiJzZWFyY2giLCJkZXNjcmlwdGlvbiI6ImEgc2VhcmNoIGVuZ2luZS4gdXNlZnVsIGZvciB3aGVuIHlvdSBuZWVkIHRvIGFuc3dlciBxdWVzdGlvbnMgYWJvdXQgY3VycmVudCBldmVudHMuIGlucHV0IHNob3VsZCBiZSBhIHNlYXJjaCBxdWVyeS4iLCJpbnB1dF9zY2hlbWEiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiaW5wdXQiOnsidHlwZSI6InN0cmluZyJ9fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCIkc2NoZW1hIjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn19XSwidGhpbmtpbmciOnsidHlwZSI6ImRpc2FibGVkIn0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJXaGF0IGlzIG44bj8ifSx7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbeyJ0eXBlIjoidGV4dCIsInRleHQiOiJDYWxsaW5nIFNlcnBBcGlfR29vZ2xlX1NlYXJjaCB3aXRoIGlucHV0OiB7XCJpbnB1dFwiOlwiV2hhdCBpcyBuOG4/XCIsXCJpZFwiOlwidG9vbHVfMDFHcnNydkNnRUNYZnMyUTVlczNldGY2XCJ9In0seyJ0eXBlIjoidG9vbF91c2UiLCJpZCI6InRvb2x1XzAxR3JzcnZDZ0VDWGZzMlE1ZXMzZXRmNiIsIm5hbWUiOiJTZXJwQXBpX0dvb2dsZV9TZWFyY2giLCJpbnB1dCI6eyJpbnB1dCI6IldoYXQgaXMgbjhuPyIsImlkIjoidG9vbHVfMDFHcnNydkNnRUNYZnMyUTVlczNldGY2In19XX0seyJyb2xlIjoidXNlciIsImNvbnRlbnQiOlt7InR5cGUiOiJ0b29sX3Jlc3VsdCIsImNvbnRlbnQiOiJbe1wicmVzcG9uc2VcIjpcIltcXFwibjhuIGlzIGEgd29ya2Zsb3cgYXV0b21hdGlvbiBwbGF0Zm9ybSB0aGF0IHVuaXF1ZWx5IGNvbWJpbmVzIEFJIGNhcGFiaWxpdGllcyB3aXRoIGJ1c2luZXNzIHByb2Nlc3MgYXV0b21hdGlvbiwgZ2l2aW5nIHRlY2huaWNhbCB0ZWFtcyB0aGUgZmxleGliaWxpdHkgb2YgLi4uXFxcIl1cIn1dIiwidG9vbF91c2VfaWQiOiJ0b29sdV8wMUdyc3J2Q2dFQ1hmczJRNWVzM2V0ZjYifV19LHsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IkNhbGxpbmcgU2VycEFwaV9Hb29nbGVfU2VhcmNoIHdpdGggaW5wdXQ6IHtcImlucHV0XCI6XCJuOG4gd29ya2Zsb3cgYXV0b21hdGlvbiBwbGF0Zm9ybSBvdmVydmlld1wiLFwiaWRcIjpcInRvb2x1XzAxQ2lEaGhySkZ1TVhoMm82OENraW9TTFwifSJ9LHsidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMUNpRGhockpGdU1YaDJvNjhDa2lvU0wiLCJuYW1lIjoiU2VycEFwaV9Hb29nbGVfU2VhcmNoIiwiaW5wdXQiOnsiaW5wdXQiOiJuOG4gd29ya2Zsb3cgYXV0b21hdGlvbiBwbGF0Zm9ybSBvdmVydmlldyIsImlkIjoidG9vbHVfMDFDaURoaHJKRnVNWGgybzY4Q2tpb1NMIn19XX0seyJyb2xlIjoidXNlciIsImNvbnRlbnQiOlt7InR5cGUiOiJ0b29sX3Jlc3VsdCIsImNvbnRlbnQiOiJbe1wicmVzcG9uc2VcIjpcIltcXFwibjhuIGlzIGEgd29ya2Zsb3cgYXV0b21hdGlvbiBwbGF0Zm9ybSB0aGF0IHVuaXF1ZWx5IGNvbWJpbmVzIEFJIGNhcGFiaWxpdGllcyB3aXRoIGJ1c2luZXNzIHByb2Nlc3MgYXV0b21hdGlvbiwgZ2l2aW5nIHRlY2huaWNhbCB0ZWFtcyB0aGUgZmxleGliaWxpdHkgb2YgLi4uXFxcIl1cIn1dIiwidG9vbF91c2VfaWQiOiJ0b29sdV8wMUNpRGhockpGdU1YaDJvNjhDa2lvU0wifV19LHsicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6IkNhbGxpbmcgU2VycEFwaV9Hb29nbGVfU2VhcmNoIHdpdGggaW5wdXQ6IHtcImlucHV0XCI6XCJuOG4gd29ya2Zsb3cgYXV0b21hdGlvbiBwbGF0Zm9ybSBvdmVydmlldyBmZWF0dXJlc1wiLFwiaWRcIjpcInRvb2x1XzAxNmdScDRrS1lweUtlSGdzbzY1V3V5cFwifSJ9LHsidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMTZnUnA0a0tZcHlLZUhnc282NVd1eXAiLCJuYW1lIjoiU2VycEFwaV9Hb29nbGVfU2VhcmNoIiwiaW5wdXQiOnsiaW5wdXQiOiJuOG4gd29ya2Zsb3cgYXV0b21hdGlvbiBwbGF0Zm9ybSBvdmVydmlldyBmZWF0dXJlcyIsImlkIjoidG9vbHVfMDE2Z1JwNGtLWXB5S2VIZ3NvNjVXdXlwIn19XX0seyJyb2xlIjoidXNlciIsImNvbnRlbnQiOlt7InR5cGUiOiJ0b29sX3Jlc3VsdCIsImNvbnRlbnQiOiJbe1wicmVzcG9uc2VcIjpcIltcXFwiU2VuZCBlcnJvciBub3RpZmljYXRpb25zIGFueXdoZXJlLCBzZXBhcmF0ZSBvciBhbGwgYXQgb25jZSDCtyBDYWxsIGJhY2t1cCB3b3JrZmxvd3MgdG8gaGFuZGxlIGVycm9ycyBpbW1lZGlhdGVseSDCtyBHZXQgaW5zaWdodHMgb24gd29ya2Zsb3cgcGVyZm9ybWFuY2Ugb3ZlciB0aW1lLlxcXCJdXCJ9XSIsInRvb2xfdXNlX2lkIjoidG9vbHVfMDE2Z1JwNGtLWXB5S2VIZ3NvNjVXdXlwIn1dfV0sInN5c3RlbSI6IllvdSBhcmUgYSBoZWxwZnVsIGFzc2lzdGFudC5cblxuX19lMmVfc3lzdGVtX3Byb21wdF9wbGFjZWhvbGRlcl9fIn0="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1596"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CXrvBHsFmTv4cJimmZ63g"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-02-06T13:46:12Z"],
"anthropic-ratelimit-tokens-remaining": ["4799000"],
"anthropic-ratelimit-tokens-limit": ["4800000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-02-06T13:46:12Z"],
"anthropic-ratelimit-output-tokens-remaining": ["800000"],
"anthropic-ratelimit-output-tokens-limit": ["800000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-02-06T13:46:12Z"],
"anthropic-ratelimit-input-tokens-remaining": ["3999000"],
"anthropic-ratelimit-input-tokens-limit": ["4000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Fri, 06 Feb 2026 13:46:13 GMT"],
"Content-Type": ["text/event-stream; charset=utf-8"],
"Content-Security-Policy": ["default-src 'none'; frame-ancestors 'none'"],
"Cache-Control": ["no-cache"],
"CF-RAY": ["9c9b17a1fcfde523-TXL"]
},
"body": {
"type": "STRING",
"string": "event: message_start\ndata: {\"type\":\"message_start\",\"message\":{\"model\":\"claude-opus-4-6\",\"id\":\"msg_01BxfdYygYjsW8YAe8e43385\",\"type\":\"message\",\"role\":\"assistant\",\"content\":[],\"stop_reason\":null,\"stop_sequence\":null,\"usage\":{\"input_tokens\":1209,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"cache_creation\":{\"ephemeral_5m_input_tokens\":0,\"ephemeral_1h_input_tokens\":0},\"output_tokens\":25,\"service_tier\":\"standard\",\"inference_geo\":\"global\"}} }\n\nevent: content_block_start\ndata: {\"type\":\"content_block_start\",\"index\":0,\"content_block\":{\"type\":\"tool_use\",\"id\":\"toolu_012CwNZ8mr6usBBdFjTZt2DX\",\"name\":\"search\",\"input\":{}} }\n\nevent: ping\ndata: {\"type\": \"ping\"}\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"{\\\"input\\\": \\\"n\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"8n wor\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"kflow \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"automation \"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"platfor\"} }\n\nevent: content_block_delta\ndata: {\"type\":\"content_block_delta\",\"index\":0,\"delta\":{\"type\":\"input_json_delta\",\"partial_json\":\"m details\\\"}\"} }\n\nevent: content_block_stop\ndata: {\"type\":\"content_block_stop\",\"index\":0 }\n\nevent: message_delta\ndata: {\"type\":\"message_delta\",\"delta\":{\"stop_reason\":\"tool_use\",\"stop_sequence\":null},\"usage\":{\"input_tokens\":1209,\"cache_creation_input_tokens\":0,\"cache_read_input_tokens\":0,\"output_tokens\":57} }\n\nevent: message_stop\ndata: {\"type\":\"message_stop\" }\n\n",
"rawBytes": "ZXZlbnQ6IG1lc3NhZ2Vfc3RhcnQKZGF0YTogeyJ0eXBlIjoibWVzc2FnZV9zdGFydCIsIm1lc3NhZ2UiOnsibW9kZWwiOiJjbGF1ZGUtb3B1cy00LTYiLCJpZCI6Im1zZ18wMUJ4ZmRZeWdZanNXOFlBZThlNDMzODUiLCJ0eXBlIjoibWVzc2FnZSIsInJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjpbXSwic3RvcF9yZWFzb24iOm51bGwsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MTIwOSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfY3JlYXRpb24iOnsiZXBoZW1lcmFsXzVtX2lucHV0X3Rva2VucyI6MCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjI1LCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCIsImluZmVyZW5jZV9nZW8iOiJnbG9iYWwifX0gICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RhcnQKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19zdGFydCIsImluZGV4IjowLCJjb250ZW50X2Jsb2NrIjp7InR5cGUiOiJ0b29sX3VzZSIsImlkIjoidG9vbHVfMDEyQ3dOWjhtcjZ1c0JCZEZqVFp0MkRYIiwibmFtZSI6InNlYXJjaCIsImlucHV0Ijp7fX0gICAgICAgIH0KCmV2ZW50OiBwaW5nCmRhdGE6IHsidHlwZSI6ICJwaW5nIn0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiIifSAgICAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoie1wiaW5wdXRcIjogXCJuIn0gICAgICAgICAgIH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiI4biB3b3IifSAgICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoia2Zsb3cgIn0gICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfZGVsdGEKZGF0YTogeyJ0eXBlIjoiY29udGVudF9ibG9ja19kZWx0YSIsImluZGV4IjowLCJkZWx0YSI6eyJ0eXBlIjoiaW5wdXRfanNvbl9kZWx0YSIsInBhcnRpYWxfanNvbiI6ImF1dG9tYXRpb24gIn0gICB9CgpldmVudDogY29udGVudF9ibG9ja19kZWx0YQpkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX2RlbHRhIiwiaW5kZXgiOjAsImRlbHRhIjp7InR5cGUiOiJpbnB1dF9qc29uX2RlbHRhIiwicGFydGlhbF9qc29uIjoicGxhdGZvciJ9IH0KCmV2ZW50OiBjb250ZW50X2Jsb2NrX2RlbHRhCmRhdGE6IHsidHlwZSI6ImNvbnRlbnRfYmxvY2tfZGVsdGEiLCJpbmRleCI6MCwiZGVsdGEiOnsidHlwZSI6ImlucHV0X2pzb25fZGVsdGEiLCJwYXJ0aWFsX2pzb24iOiJtIGRldGFpbHNcIn0ifSAgICAgICAgfQoKZXZlbnQ6IGNvbnRlbnRfYmxvY2tfc3RvcApkYXRhOiB7InR5cGUiOiJjb250ZW50X2Jsb2NrX3N0b3AiLCJpbmRleCI6MCAgICAgICAgICAgIH0KCmV2ZW50OiBtZXNzYWdlX2RlbHRhCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2VfZGVsdGEiLCJkZWx0YSI6eyJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbH0sInVzYWdlIjp7ImlucHV0X3Rva2VucyI6MTIwOSwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwib3V0cHV0X3Rva2VucyI6NTd9ICAgICAgICB9CgpldmVudDogbWVzc2FnZV9zdG9wCmRhdGE6IHsidHlwZSI6Im1lc3NhZ2Vfc3RvcCIgIH0KCg==",
"contentType": "text/event-stream; charset=utf-8"
}
},
"id": "1770385602693-unknown-host-POST-_v1_messages-9d702ab3.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,37 @@
{
"httpRequest": {
"method": "POST",
"path": "/token"
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"X-XSS-Protection": ["0"],
"X-Frame-Options": ["SAMEORIGIN"],
"X-Content-Type-Options": ["nosniff"],
"Vary": ["Origin", "X-Origin", "Referer"],
"Server": ["scaffolding on HTTPServer2"],
"Date": ["Thu, 04 Sep 2025 14:07:57 GMT"],
"Content-Type": ["application/json; charset=UTF-8"],
"Alt-Svc": ["h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"]
},
"body": {
"type": "JSON",
"json": {
"access_token": "mock_access_token_fjWwvFFZMgzvj8i08j8coeyRZz_p57s_Vqjk3v0kzrmOr2MJMUVYYlOII5Zq8BFU08drBzsz50Q-6f3S1MBt2dO3vYkzw1Ml7jnykQmUSz1wVce-M9zefdaFVeVuc1rjIviipVeO3ojF95FvghMMwnVvUF55ppzI3n_vRM1hM5sipbora7xs5Y0qaOQrX_-6SF_j99_bWI_Og-y5OdoapprB_aXdkaOn8U816ac5ldp8r7g2bdU0oqwukwxUvyyubc-h6Zc3WIdtXcn7BXmtUVWMMwZ4uBqtr6rUq2YkocVSV0sf2yRZjy1Wdp8aFo0wRk2i0V55mOcvVVskQ07w9",
"expires_in": 3599,
"token_type": "Bearer"
},
"rawBytes": "eyJhY2Nlc3NfdG9rZW4iOiJ5YTI5LmMuYzBBU1JLMEdZcmU5R2VfNVYtRlJNS0UtRi0yT2wwNVZQdHppQVhGODh2aGFqbm9pQUc4Xzhib1hadmFVSnVvUUJjQnluUUl6ajdwckk1c3c3Y3RGMEpISWpGdWUyOGRXc25pZ00yeDVPOU40R3FRb05kc1VKUF9ibFJHN1VSNEtuMF9YcnV0Y3A3bEZ5cmZrT2R0Vk8yeU5FMzFuaUJFYmJYeDRhRTRlaGVNME1ISkJaNlV5aDFzQjV5d2Q1akl4NENzdTRxNHJEemI4SFlYZ3FqZUd2THJsc3AyRndNaFFGd1VkR2hnVWIxdGZVTE0wT3FaajdEV0I4aGozeTJ0Tk5KUmhCWXZvZ3lEaF9STmdaNi1Bb2xNM1B1eHRjam9mTG1WMHZZY2lsZVMwc3ByUEQ2eEVqWHpIMlNndld1NDM1VXBfdU96NVVEbVljbUgzZ3JjTndmdmpJTWNMUk5LSndoWHkySGx1SEpRZktUZThpUGEtN05uTTh4aEt4TEczODlDYjRyczFsNVJhZmJZUXAtaHRWV3lSVlctcTZKYWY3NlJuOEpZQnNKNXhkRlg3WXczMXNoWWJSbG84dzV6NGhleHJ3cGp3c29sV3N0NHdNb1UwdDRreU80c3h4ajBhQm5oWnprOHc3cE1CSjlTbDFrSWd2V3F3MnBGVVJZWFYzaFk0aGtWck9PSlVkVUoyZGVjSVZmMFgxV3NmNV9sdDJZN09lVzlidllYcVNZa2NZMTJfUzhRQi13NF8tT1YxNmhrX1diMkJKVV9hcWc4aVdrVk1wNDZJcUl1ZlEtMW9Tb3djY3dtTzFXV3NfVWc4d3I3Vm40OVVabVZGV0JRNDM2VWR6MHFVZWRhNzFTWTJyc25vVy1tMi1XeHhXSXdsNVltdmZqV3d2RkZaTWd6dmo4aTA4ajhjb2V5Ulp6X3A1N3NfVnFqazN2MGt6cm1PcjJNSk1VVllZbE9JSTVacThCRlUwOGRyQnpzejUwUS02ZjNTMU1CdDJkTzN2WWt6dzFNbDdqbnlrUW1VU3oxd1ZjZS1NOXplZmRhRlZlVnVjMXJqSXZpaXBWZU8zb2pGOTVGdmdoTU13blZ2VUY1NXBwekkzbl92Uk0xaE01c2lwYm9yYTd4czVZMHFhT1FyWF8tNlNGX2o5OV9iV0lfT2cteTVPZG9hcHByQl9hWGRrYU9uOFU4MTZhYzVsZHA4cjdnMmJkVTBvcXd1a3d4VXZ5eXViYy1oNlpjM1dJZHRYY243QlhtdFVWV01Nd1o0dUJxdHI2clVxMllrb2NWU1Ywc2YyeVJaankxV2RwOGFGbzB3UmsyaTBWNTVtT2N2VlZza1EwN3c5IiwiZXhwaXJlc19pbiI6MzU5OSwidG9rZW5fdHlwZSI6IkJlYXJlciJ9"
}
},
"id": "1756994893546-oauth2.googleapis.com-POST-_token-58f6fdf2.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,64 @@
{
"httpRequest": {
"method": "GET",
"path": "/v4/spreadsheets/1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs",
"queryStringParameters": {
"fields": ["sheets.properties"]
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-l2-request-path": ["l2-managed-6"],
"X-XSS-Protection": ["0"],
"X-Frame-Options": ["SAMEORIGIN"],
"X-Content-Type-Options": ["nosniff"],
"Vary": ["Origin", "X-Origin", "Referer"],
"Server": ["ESF"],
"Date": ["Thu, 04 Sep 2025 14:07:57 GMT"],
"Content-Type": ["application/json; charset=UTF-8"],
"Alt-Svc": ["h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"]
},
"body": {
"type": "JSON",
"json": {
"sheets": [
{
"properties": {
"sheetId": 0,
"title": "Sheet1",
"index": 0,
"sheetType": "GRID",
"gridProperties": {
"rowCount": 2001,
"columnCount": 26
}
}
},
{
"properties": {
"sheetId": 1911651598,
"title": "Sheet2",
"index": 1,
"sheetType": "GRID",
"gridProperties": {
"rowCount": 1000,
"columnCount": 26
}
}
}
]
},
"rawBytes": "ewogICJzaGVldHMiOiBbCiAgICB7CiAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICJzaGVldElkIjogMCwKICAgICAgICAidGl0bGUiOiAiU2hlZXQxIiwKICAgICAgICAiaW5kZXgiOiAwLAogICAgICAgICJzaGVldFR5cGUiOiAiR1JJRCIsCiAgICAgICAgImdyaWRQcm9wZXJ0aWVzIjogewogICAgICAgICAgInJvd0NvdW50IjogMjAwMSwKICAgICAgICAgICJjb2x1bW5Db3VudCI6IDI2CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAic2hlZXRJZCI6IDE5MTE2NTE1OTgsCiAgICAgICAgInRpdGxlIjogIlNoZWV0MiIsCiAgICAgICAgImluZGV4IjogMSwKICAgICAgICAic2hlZXRUeXBlIjogIkdSSUQiLAogICAgICAgICJncmlkUHJvcGVydGllcyI6IHsKICAgICAgICAgICJyb3dDb3VudCI6IDEwMDAsCiAgICAgICAgICAiY29sdW1uQ291bnQiOiAyNgogICAgICAgIH0KICAgICAgfQogICAgfQogIF0KfQo="
}
},
"id": "1756994893547-sheets.googleapis.com-GET-_v4_spreadsheets_1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs-185c9dd7.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,66 @@
{
"httpRequest": {
"method": "GET",
"path": "/v4/spreadsheets/1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs/values/'Sheet2'",
"queryStringParameters": {
"valueRenderOption": ["UNFORMATTED_VALUE"],
"dateTimeRenderOption": ["FORMATTED_STRING"]
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-l2-request-path": ["l2-managed-6"],
"X-XSS-Protection": ["0"],
"X-Frame-Options": ["SAMEORIGIN"],
"X-Content-Type-Options": ["nosniff"],
"Vary": ["Origin", "X-Origin", "Referer"],
"Server": ["ESF"],
"Date": ["Thu, 04 Sep 2025 14:07:59 GMT"],
"Content-Type": ["application/json; charset=UTF-8"],
"Alt-Svc": ["h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"]
},
"body": {
"type": "JSON",
"json": {
"range": "Sheet2!A1:Z1000",
"majorDimension": "ROWS",
"values": [
[
"name",
"email",
"actual",
"op",
"output-row_number",
"output-itemIndex",
"output-runIndex",
"data",
"random-output"
],
[
"test",
"test",
10,
"output",
2,
0,
0,
"output-0.17321991314554896",
0.47763178373020865
],
["hello", "wolrd", 104, "", 3, 0, 0, "output-0.14637030644980253", 0.13015058088525477]
]
},
"rawBytes": "ewogICJyYW5nZSI6ICJTaGVldDIhQTE6WjEwMDAiLAogICJtYWpvckRpbWVuc2lvbiI6ICJST1dTIiwKICAidmFsdWVzIjogWwogICAgWwogICAgICAibmFtZSIsCiAgICAgICJlbWFpbCIsCiAgICAgICJhY3R1YWwiLAogICAgICAib3AiLAogICAgICAib3V0cHV0LXJvd19udW1iZXIiLAogICAgICAib3V0cHV0LWl0ZW1JbmRleCIsCiAgICAgICJvdXRwdXQtcnVuSW5kZXgiLAogICAgICAiZGF0YSIsCiAgICAgICJyYW5kb20tb3V0cHV0IgogICAgXSwKICAgIFsKICAgICAgInRlc3QiLAogICAgICAidGVzdCIsCiAgICAgIDEwLAogICAgICAib3V0cHV0IiwKICAgICAgMiwKICAgICAgMCwKICAgICAgMCwKICAgICAgIm91dHB1dC0wLjE3MzIxOTkxMzE0NTU0ODk2IiwKICAgICAgMC40Nzc2MzE3ODM3MzAyMDg2NQogICAgXSwKICAgIFsKICAgICAgImhlbGxvIiwKICAgICAgIndvbHJkIiwKICAgICAgMTA0LAogICAgICAiIiwKICAgICAgMywKICAgICAgMCwKICAgICAgMCwKICAgICAgIm91dHB1dC0wLjE0NjM3MDMwNjQ0OTgwMjUzIiwKICAgICAgMC4xMzAxNTA1ODA4ODUyNTQ3NwogICAgXQogIF0KfQo="
}
},
"id": "1756994893548-sheets.googleapis.com-GET-_v4_spreadsheets_1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs_values__Sheet2_-7746917a.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,55 @@
{
"httpRequest": {
"method": "GET",
"path": "/v4/spreadsheets/1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs/values/Sheet2!2:1000",
"queryStringParameters": {
"valueRenderOption": ["UNFORMATTED_VALUE"],
"dateTimeRenderOption": ["FORMATTED_STRING"]
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-l2-request-path": ["l2-managed-6"],
"X-XSS-Protection": ["0"],
"X-Frame-Options": ["SAMEORIGIN"],
"X-Content-Type-Options": ["nosniff"],
"Vary": ["Origin", "X-Origin", "Referer"],
"Server": ["ESF"],
"Date": ["Thu, 04 Sep 2025 14:08:00 GMT"],
"Content-Type": ["application/json; charset=UTF-8"],
"Alt-Svc": ["h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"]
},
"body": {
"type": "JSON",
"json": {
"range": "Sheet2!A2:Z1000",
"majorDimension": "ROWS",
"values": [
[
"test",
"test",
10,
"output",
2,
0,
0,
"output-0.17321991314554896",
0.47763178373020865
],
["hello", "wolrd", 104, "", 3, 0, 0, "output-0.14637030644980253", 0.13015058088525477]
]
},
"rawBytes": "ewogICJyYW5nZSI6ICJTaGVldDIhQTI6WjEwMDAiLAogICJtYWpvckRpbWVuc2lvbiI6ICJST1dTIiwKICAidmFsdWVzIjogWwogICAgWwogICAgICAidGVzdCIsCiAgICAgICJ0ZXN0IiwKICAgICAgMTAsCiAgICAgICJvdXRwdXQiLAogICAgICAyLAogICAgICAwLAogICAgICAwLAogICAgICAib3V0cHV0LTAuMTczMjE5OTEzMTQ1NTQ4OTYiLAogICAgICAwLjQ3NzYzMTc4MzczMDIwODY1CiAgICBdLAogICAgWwogICAgICAiaGVsbG8iLAogICAgICAid29scmQiLAogICAgICAxMDQsCiAgICAgICIiLAogICAgICAzLAogICAgICAwLAogICAgICAwLAogICAgICAib3V0cHV0LTAuMTQ2MzcwMzA2NDQ5ODAyNTMiLAogICAgICAwLjEzMDE1MDU4MDg4NTI1NDc3CiAgICBdCiAgXQp9Cg=="
}
},
"id": "1756994893549-sheets.googleapis.com-GET-_v4_spreadsheets_1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs_values_Sheet2_2_1000-e7fa67bd.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,63 @@
{
"httpRequest": {
"method": "POST",
"path": "/v4/spreadsheets/1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs/values:batchUpdate",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"data": [
{
"range": "Sheet2!C2",
"values": [[11]]
}
],
"valueInputOption": "RAW"
},
"rawBytes": "eyJkYXRhIjpbeyJyYW5nZSI6IlNoZWV0MiFDMiIsInZhbHVlcyI6W1sxMV1dfV0sInZhbHVlSW5wdXRPcHRpb24iOiJSQVcifQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-l2-request-path": ["l2-managed-6"],
"X-XSS-Protection": ["0"],
"X-Frame-Options": ["SAMEORIGIN"],
"X-Content-Type-Options": ["nosniff"],
"Vary": ["Origin", "X-Origin", "Referer"],
"Server": ["ESF"],
"Date": ["Thu, 04 Sep 2025 14:08:04 GMT"],
"Content-Type": ["application/json; charset=UTF-8"],
"Alt-Svc": ["h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"]
},
"body": {
"type": "JSON",
"json": {
"spreadsheetId": "1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs",
"totalUpdatedRows": 1,
"totalUpdatedColumns": 1,
"totalUpdatedCells": 1,
"totalUpdatedSheets": 1,
"responses": [
{
"spreadsheetId": "1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs",
"updatedRange": "Sheet2!C2",
"updatedRows": 1,
"updatedColumns": 1,
"updatedCells": 1
}
]
},
"rawBytes": "ewogICJzcHJlYWRzaGVldElkIjogIjF6SnU4ekx0RmMzcmJaUEFXcUtCaDdUSW91NTlTdEpyN0hMbjBuVXkwYnFzIiwKICAidG90YWxVcGRhdGVkUm93cyI6IDEsCiAgInRvdGFsVXBkYXRlZENvbHVtbnMiOiAxLAogICJ0b3RhbFVwZGF0ZWRDZWxscyI6IDEsCiAgInRvdGFsVXBkYXRlZFNoZWV0cyI6IDEsCiAgInJlc3BvbnNlcyI6IFsKICAgIHsKICAgICAgInNwcmVhZHNoZWV0SWQiOiAiMXpKdTh6THRGYzNyYlpQQVdxS0JoN1RJb3U1OVN0SnI3SExuMG5VeTBicXMiLAogICAgICAidXBkYXRlZFJhbmdlIjogIlNoZWV0MiFDMiIsCiAgICAgICJ1cGRhdGVkUm93cyI6IDEsCiAgICAgICJ1cGRhdGVkQ29sdW1ucyI6IDEsCiAgICAgICJ1cGRhdGVkQ2VsbHMiOiAxCiAgICB9CiAgXQp9Cg=="
}
},
"id": "1756994893550-sheets.googleapis.com-POST-_v4_spreadsheets_1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs_values_batchUpdate-19f43fca.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,61 @@
{
"httpRequest": {
"method": "PUT",
"path": "/v4/spreadsheets/1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs/values/Sheet2!1:1",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"range": "Sheet2!1:1",
"values": [
[
"name",
"email",
"actual",
"op",
"output-row_number",
"output-itemIndex",
"output-runIndex",
"data",
"random-output"
]
]
},
"rawBytes": "eyJyYW5nZSI6IlNoZWV0MiExOjEiLCJ2YWx1ZXMiOltbIm5hbWUiLCJlbWFpbCIsImFjdHVhbCIsIm9wIiwib3V0cHV0LXJvd19udW1iZXIiLCJvdXRwdXQtaXRlbUluZGV4Iiwib3V0cHV0LXJ1bkluZGV4IiwiZGF0YSIsInJhbmRvbS1vdXRwdXQiXV19"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-l2-request-path": ["l2-managed-6"],
"X-XSS-Protection": ["0"],
"X-Frame-Options": ["SAMEORIGIN"],
"X-Content-Type-Options": ["nosniff"],
"Vary": ["Origin", "X-Origin", "Referer"],
"Server": ["ESF"],
"Date": ["Thu, 04 Sep 2025 14:08:02 GMT"],
"Content-Type": ["application/json; charset=UTF-8"],
"Alt-Svc": ["h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"]
},
"body": {
"type": "JSON",
"json": {
"spreadsheetId": "1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs",
"updatedRange": "Sheet2!A1:I1",
"updatedRows": 1,
"updatedColumns": 9,
"updatedCells": 9
},
"rawBytes": "ewogICJzcHJlYWRzaGVldElkIjogIjF6SnU4ekx0RmMzcmJaUEFXcUtCaDdUSW91NTlTdEpyN0hMbjBuVXkwYnFzIiwKICAidXBkYXRlZFJhbmdlIjogIlNoZWV0MiFBMTpJMSIsCiAgInVwZGF0ZWRSb3dzIjogMSwKICAidXBkYXRlZENvbHVtbnMiOiA5LAogICJ1cGRhdGVkQ2VsbHMiOiA5Cn0K"
}
},
"id": "1756994893550-sheets.googleapis.com-PUT-_v4_spreadsheets_1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs_values_Sheet2_1_1-c0a137d1.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,44 @@
{
"httpRequest": {
"method": "GET",
"path": "/v4/spreadsheets/1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs/values/Sheet2!3:1000",
"queryStringParameters": {
"valueRenderOption": ["UNFORMATTED_VALUE"],
"dateTimeRenderOption": ["FORMATTED_STRING"]
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-l2-request-path": ["l2-managed-6"],
"X-XSS-Protection": ["0"],
"X-Frame-Options": ["SAMEORIGIN"],
"X-Content-Type-Options": ["nosniff"],
"Vary": ["Origin", "X-Origin", "Referer"],
"Server": ["ESF"],
"Date": ["Thu, 04 Sep 2025 14:08:07 GMT"],
"Content-Type": ["application/json; charset=UTF-8"],
"Alt-Svc": ["h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"]
},
"body": {
"type": "JSON",
"json": {
"range": "Sheet2!A3:Z1000",
"majorDimension": "ROWS",
"values": [
["hello", "wolrd", 104, "", 3, 0, 0, "output-0.14637030644980253", 0.13015058088525477]
]
},
"rawBytes": "ewogICJyYW5nZSI6ICJTaGVldDIhQTM6WjEwMDAiLAogICJtYWpvckRpbWVuc2lvbiI6ICJST1dTIiwKICAidmFsdWVzIjogWwogICAgWwogICAgICAiaGVsbG8iLAogICAgICAid29scmQiLAogICAgICAxMDQsCiAgICAgICIiLAogICAgICAzLAogICAgICAwLAogICAgICAwLAogICAgICAib3V0cHV0LTAuMTQ2MzcwMzA2NDQ5ODAyNTMiLAogICAgICAwLjEzMDE1MDU4MDg4NTI1NDc3CiAgICBdCiAgXQp9Cg=="
}
},
"id": "1756994893551-sheets.googleapis.com-GET-_v4_spreadsheets_1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs_values_Sheet2_3_1000-1bdb2093.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,63 @@
{
"httpRequest": {
"method": "POST",
"path": "/v4/spreadsheets/1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs/values:batchUpdate",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"data": [
{
"range": "Sheet2!C3",
"values": [[105]]
}
],
"valueInputOption": "RAW"
},
"rawBytes": "eyJkYXRhIjpbeyJyYW5nZSI6IlNoZWV0MiFDMyIsInZhbHVlcyI6W1sxMDVdXX1dLCJ2YWx1ZUlucHV0T3B0aW9uIjoiUkFXIn0="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-l2-request-path": ["l2-managed-6"],
"X-XSS-Protection": ["0"],
"X-Frame-Options": ["SAMEORIGIN"],
"X-Content-Type-Options": ["nosniff"],
"Vary": ["Origin", "X-Origin", "Referer"],
"Server": ["ESF"],
"Date": ["Thu, 04 Sep 2025 14:08:11 GMT"],
"Content-Type": ["application/json; charset=UTF-8"],
"Alt-Svc": ["h3=\":443\"; ma=2592000,h3-29=\":443\"; ma=2592000"]
},
"body": {
"type": "JSON",
"json": {
"spreadsheetId": "1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs",
"totalUpdatedRows": 1,
"totalUpdatedColumns": 1,
"totalUpdatedCells": 1,
"totalUpdatedSheets": 1,
"responses": [
{
"spreadsheetId": "1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs",
"updatedRange": "Sheet2!C3",
"updatedRows": 1,
"updatedColumns": 1,
"updatedCells": 1
}
]
},
"rawBytes": "ewogICJzcHJlYWRzaGVldElkIjogIjF6SnU4ekx0RmMzcmJaUEFXcUtCaDdUSW91NTlTdEpyN0hMbjBuVXkwYnFzIiwKICAidG90YWxVcGRhdGVkUm93cyI6IDEsCiAgInRvdGFsVXBkYXRlZENvbHVtbnMiOiAxLAogICJ0b3RhbFVwZGF0ZWRDZWxscyI6IDEsCiAgInRvdGFsVXBkYXRlZFNoZWV0cyI6IDEsCiAgInJlc3BvbnNlcyI6IFsKICAgIHsKICAgICAgInNwcmVhZHNoZWV0SWQiOiAiMXpKdTh6THRGYzNyYlpQQVdxS0JoN1RJb3U1OVN0SnI3SExuMG5VeTBicXMiLAogICAgICAidXBkYXRlZFJhbmdlIjogIlNoZWV0MiFDMyIsCiAgICAgICJ1cGRhdGVkUm93cyI6IDEsCiAgICAgICJ1cGRhdGVkQ29sdW1ucyI6IDEsCiAgICAgICJ1cGRhdGVkQ2VsbHMiOiAxCiAgICB9CiAgXQp9Cg=="
}
},
"id": "1756994893552-sheets.googleapis.com-POST-_v4_spreadsheets_1zJu8zLtFc3rbZPAWqKBh7TIou59StJr7HLn0nUy0bqs_values_batchUpdate-65f181a6.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,202 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/responses",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"input": [
{
"type": "message",
"role": "user",
"content": "Send welcome email to john@gmail.com"
}
],
"model": "gpt-5-mini",
"stream": false,
"tools": [
{
"type": "function",
"name": "Code_Tool",
"parameters": {
"type": "object",
"properties": {
"toolParameters": {
"type": "object",
"properties": {
"receiver": {
"type": "string"
},
"body": {
"type": "string"
}
},
"required": ["receiver", "body"],
"additionalProperties": false,
"description": "Input parameters for the tool"
},
"hitlParameters": {
"type": "object",
"properties": {},
"additionalProperties": false,
"description": "Parameters for the Human-in-the-Loop layer"
}
},
"required": ["toolParameters", "hitlParameters"],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
},
"description": "Send email",
"strict": false
}
],
"text": {}
},
"rawBytes": "eyJpbnB1dCI6W3sidHlwZSI6Im1lc3NhZ2UiLCJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJTZW5kIHdlbGNvbWUgZW1haWwgdG8gam9obkBnbWFpbC5jb20ifV0sIm1vZGVsIjoiZ3B0LTUtbWluaSIsInN0cmVhbSI6ZmFsc2UsInRvb2xzIjpbeyJ0eXBlIjoiZnVuY3Rpb24iLCJuYW1lIjoiQ29kZV9Ub29sIiwicGFyYW1ldGVycyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJ0b29sUGFyYW1ldGVycyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJyZWNlaXZlciI6eyJ0eXBlIjoic3RyaW5nIn0sImJvZHkiOnsidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsicmVjZWl2ZXIiLCJib2R5Il0sImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZSwiZGVzY3JpcHRpb24iOiJJbnB1dCBwYXJhbWV0ZXJzIGZvciB0aGUgdG9vbCJ9LCJoaXRsUGFyYW1ldGVycyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6e30sImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZSwiZGVzY3JpcHRpb24iOiJQYXJhbWV0ZXJzIGZvciB0aGUgSHVtYW4taW4tdGhlLUxvb3AgbGF5ZXIifX0sInJlcXVpcmVkIjpbInRvb2xQYXJhbWV0ZXJzIiwiaGl0bFBhcmFtZXRlcnMiXSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCIkc2NoZW1hIjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn0sImRlc2NyaXB0aW9uIjoiU2VuZCBlbWFpbCIsInN0cmljdCI6ZmFsc2V9XSwidGV4dCI6e319"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-request-id": ["req_b8f47474cc284fd088c72c6a307ae70b"],
"x-ratelimit-reset-tokens": ["0s"],
"x-ratelimit-reset-requests": ["2ms"],
"x-ratelimit-remaining-tokens": ["180000000"],
"x-ratelimit-remaining-requests": ["29999"],
"x-ratelimit-limit-tokens": ["180000000"],
"x-ratelimit-limit-requests": ["30000"],
"x-envoy-upstream-service-time": ["6515"],
"openai-version": ["2020-10-01"],
"openai-project": ["proj_QgifAq942u8NFReEIvfWVd00"],
"openai-processing-ms": ["6512"],
"openai-organization": ["n8n-1"],
"cf-cache-status": ["DYNAMIC"],
"alt-svc": ["h3=\":443\"; ma=86400"],
"X-Content-Type-Options": ["nosniff"],
"Strict-Transport-Security": ["max-age=31536000; includeSubDomains; preload"],
"Server": ["cloudflare"],
"Date": ["Fri, 23 Jan 2026 11:12:46 GMT"],
"Content-Type": ["application/json"],
"CF-RAY": ["9c26db76885dbff0-WAW"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"id": "resp_0d23c6d00dcfbae200697357a78b6c8190802337e438aed2c0",
"object": "response",
"created_at": 1769166759,
"status": "completed",
"background": false,
"billing": {
"payer": "developer"
},
"completed_at": 1769166765,
"error": null,
"frequency_penalty": 0,
"incomplete_details": null,
"instructions": null,
"max_output_tokens": null,
"max_tool_calls": null,
"model": "gpt-5-mini-2025-08-07",
"output": [
{
"id": "rs_0d23c6d00dcfbae200697357a7c430819085e20f2f1ec1bb05",
"type": "reasoning",
"summary": []
},
{
"id": "fc_0d23c6d00dcfbae200697357ac456c8190b1ef5b2c0f23d37b",
"type": "function_call",
"status": "completed",
"arguments": "{\"toolParameters\":{\"receiver\":\"john@gmail.com\",\"body\":\"Subject: Welcome to Our Service!\\n\\nHi John,\\n\\nWelcome! We're thrilled to have you with us. If you have any questions or need help getting started, reply to this email or visit our Help Center. Here are a few resources to help you begin:\\n\\n- Getting started guide: https://example.com/getting-started\\n- Support: support@example.com\\n\\nWe look forward to helping you get the most out of our service.\\n\\nBest regards,\\nThe Team\"},\"hitlParameters\":{}}",
"call_id": "call_mv4VUael9WUlQA306fQ9c8Kq",
"name": "Code_Tool"
}
],
"parallel_tool_calls": true,
"presence_penalty": 0,
"previous_response_id": null,
"prompt_cache_key": null,
"prompt_cache_retention": null,
"reasoning": {
"effort": "medium",
"summary": null
},
"safety_identifier": null,
"service_tier": "default",
"store": true,
"temperature": 1,
"text": {
"format": {
"type": "text"
},
"verbosity": "medium"
},
"tool_choice": "auto",
"tools": [
{
"type": "function",
"description": "Send email",
"name": "Code_Tool",
"parameters": {
"type": "object",
"properties": {
"toolParameters": {
"type": "object",
"properties": {
"receiver": {
"type": "string"
},
"body": {
"type": "string"
}
},
"required": ["receiver", "body"],
"additionalProperties": false,
"description": "Input parameters for the tool"
},
"hitlParameters": {
"type": "object",
"properties": {},
"additionalProperties": false,
"description": "Parameters for the Human-in-the-Loop layer"
}
},
"required": ["toolParameters", "hitlParameters"],
"additionalProperties": false
},
"strict": false
}
],
"top_logprobs": 0,
"top_p": 1,
"truncation": "disabled",
"usage": {
"input_tokens": 78,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens": 457,
"output_tokens_details": {
"reasoning_tokens": 320
},
"total_tokens": 535
},
"user": null,
"metadata": {}
},
"rawBytes": "ewogICJpZCI6ICJyZXNwXzBkMjNjNmQwMGRjZmJhZTIwMDY5NzM1N2E3OGI2YzgxOTA4MDIzMzdlNDM4YWVkMmMwIiwKICAib2JqZWN0IjogInJlc3BvbnNlIiwKICAiY3JlYXRlZF9hdCI6IDE3NjkxNjY3NTksCiAgInN0YXR1cyI6ICJjb21wbGV0ZWQiLAogICJiYWNrZ3JvdW5kIjogZmFsc2UsCiAgImJpbGxpbmciOiB7CiAgICAicGF5ZXIiOiAiZGV2ZWxvcGVyIgogIH0sCiAgImNvbXBsZXRlZF9hdCI6IDE3NjkxNjY3NjUsCiAgImVycm9yIjogbnVsbCwKICAiZnJlcXVlbmN5X3BlbmFsdHkiOiAwLjAsCiAgImluY29tcGxldGVfZGV0YWlscyI6IG51bGwsCiAgImluc3RydWN0aW9ucyI6IG51bGwsCiAgIm1heF9vdXRwdXRfdG9rZW5zIjogbnVsbCwKICAibWF4X3Rvb2xfY2FsbHMiOiBudWxsLAogICJtb2RlbCI6ICJncHQtNS1taW5pLTIwMjUtMDgtMDciLAogICJvdXRwdXQiOiBbCiAgICB7CiAgICAgICJpZCI6ICJyc18wZDIzYzZkMDBkY2ZiYWUyMDA2OTczNTdhN2M0MzA4MTkwODVlMjBmMmYxZWMxYmIwNSIsCiAgICAgICJ0eXBlIjogInJlYXNvbmluZyIsCiAgICAgICJzdW1tYXJ5IjogW10KICAgIH0sCiAgICB7CiAgICAgICJpZCI6ICJmY18wZDIzYzZkMDBkY2ZiYWUyMDA2OTczNTdhYzQ1NmM4MTkwYjFlZjViMmMwZjIzZDM3YiIsCiAgICAgICJ0eXBlIjogImZ1bmN0aW9uX2NhbGwiLAogICAgICAic3RhdHVzIjogImNvbXBsZXRlZCIsCiAgICAgICJhcmd1bWVudHMiOiAie1widG9vbFBhcmFtZXRlcnNcIjp7XCJyZWNlaXZlclwiOlwiam9obkBnbWFpbC5jb21cIixcImJvZHlcIjpcIlN1YmplY3Q6IFdlbGNvbWUgdG8gT3VyIFNlcnZpY2UhXFxuXFxuSGkgSm9obixcXG5cXG5XZWxjb21lISBXZSdyZSB0aHJpbGxlZCB0byBoYXZlIHlvdSB3aXRoIHVzLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgaGVscCBnZXR0aW5nIHN0YXJ0ZWQsIHJlcGx5IHRvIHRoaXMgZW1haWwgb3IgdmlzaXQgb3VyIEhlbHAgQ2VudGVyLiBIZXJlIGFyZSBhIGZldyByZXNvdXJjZXMgdG8gaGVscCB5b3UgYmVnaW46XFxuXFxuLSBHZXR0aW5nIHN0YXJ0ZWQgZ3VpZGU6IGh0dHBzOi8vZXhhbXBsZS5jb20vZ2V0dGluZy1zdGFydGVkXFxuLSBTdXBwb3J0OiBzdXBwb3J0QGV4YW1wbGUuY29tXFxuXFxuV2UgbG9vayBmb3J3YXJkIHRvIGhlbHBpbmcgeW91IGdldCB0aGUgbW9zdCBvdXQgb2Ygb3VyIHNlcnZpY2UuXFxuXFxuQmVzdCByZWdhcmRzLFxcblRoZSBUZWFtXCJ9LFwiaGl0bFBhcmFtZXRlcnNcIjp7fX0iLAogICAgICAiY2FsbF9pZCI6ICJjYWxsX212NFZVYWVsOVdVbFFBMzA2ZlE5YzhLcSIsCiAgICAgICJuYW1lIjogIkNvZGVfVG9vbCIKICAgIH0KICBdLAogICJwYXJhbGxlbF90b29sX2NhbGxzIjogdHJ1ZSwKICAicHJlc2VuY2VfcGVuYWx0eSI6IDAuMCwKICAicHJldmlvdXNfcmVzcG9uc2VfaWQiOiBudWxsLAogICJwcm9tcHRfY2FjaGVfa2V5IjogbnVsbCwKICAicHJvbXB0X2NhY2hlX3JldGVudGlvbiI6IG51bGwsCiAgInJlYXNvbmluZyI6IHsKICAgICJlZmZvcnQiOiAibWVkaXVtIiwKICAgICJzdW1tYXJ5IjogbnVsbAogIH0sCiAgInNhZmV0eV9pZGVudGlmaWVyIjogbnVsbCwKICAic2VydmljZV90aWVyIjogImRlZmF1bHQiLAogICJzdG9yZSI6IHRydWUsCiAgInRlbXBlcmF0dXJlIjogMS4wLAogICJ0ZXh0IjogewogICAgImZvcm1hdCI6IHsKICAgICAgInR5cGUiOiAidGV4dCIKICAgIH0sCiAgICAidmVyYm9zaXR5IjogIm1lZGl1bSIKICB9LAogICJ0b29sX2Nob2ljZSI6ICJhdXRvIiwKICAidG9vbHMiOiBbCiAgICB7CiAgICAgICJ0eXBlIjogImZ1bmN0aW9uIiwKICAgICAgImRlc2NyaXB0aW9uIjogIlNlbmQgZW1haWwiLAogICAgICAibmFtZSI6ICJDb2RlX1Rvb2wiLAogICAgICAicGFyYW1ldGVycyI6IHsKICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICAgInRvb2xQYXJhbWV0ZXJzIjogewogICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAgICAgICAicmVjZWl2ZXIiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciCiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiYm9keSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlZCI6IFsKICAgICAgICAgICAgICAicmVjZWl2ZXIiLAogICAgICAgICAgICAgICJib2R5IgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiBmYWxzZSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIklucHV0IHBhcmFtZXRlcnMgZm9yIHRoZSB0b29sIgogICAgICAgICAgfSwKICAgICAgICAgICJoaXRsUGFyYW1ldGVycyI6IHsKICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7fSwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjogZmFsc2UsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQYXJhbWV0ZXJzIGZvciB0aGUgSHVtYW4taW4tdGhlLUxvb3AgbGF5ZXIiCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZWQiOiBbCiAgICAgICAgICAidG9vbFBhcmFtZXRlcnMiLAogICAgICAgICAgImhpdGxQYXJhbWV0ZXJzIgogICAgICAgIF0sCiAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjogZmFsc2UKICAgICAgfSwKICAgICAgInN0cmljdCI6IGZhbHNlCiAgICB9CiAgXSwKICAidG9wX2xvZ3Byb2JzIjogMCwKICAidG9wX3AiOiAxLjAsCiAgInRydW5jYXRpb24iOiAiZGlzYWJsZWQiLAogICJ1c2FnZSI6IHsKICAgICJpbnB1dF90b2tlbnMiOiA3OCwKICAgICJpbnB1dF90b2tlbnNfZGV0YWlscyI6IHsKICAgICAgImNhY2hlZF90b2tlbnMiOiAwCiAgICB9LAogICAgIm91dHB1dF90b2tlbnMiOiA0NTcsCiAgICAib3V0cHV0X3Rva2Vuc19kZXRhaWxzIjogewogICAgICAicmVhc29uaW5nX3Rva2VucyI6IDMyMAogICAgfSwKICAgICJ0b3RhbF90b2tlbnMiOiA1MzUKICB9LAogICJ1c2VyIjogbnVsbCwKICAibWV0YWRhdGEiOiB7fQp9"
}
},
"id": "1769166878316-unknown-host-POST-_v1_responses-2bb80a7e.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,224 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/responses",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"input": [
{
"type": "message",
"role": "user",
"content": "Send welcome email to john@gmail.com"
},
{
"type": "message",
"role": "assistant",
"content": "Calling Code_Tool with input: {\"tool\":\"Code_Tool\",\"receiver\":\"john@gmail.com\",\"body\":\"Subject: Welcome to Our Service!\\n\\nHi John,\\n\\nWelcome! We're thrilled to have you with us. If you have any questions or need help getting started, reply to this email or visit our Help Center. Here are a few resources to help you begin:\\n\\n- Getting started guide: https://example.com/getting-started\\n- Support: support@example.com\\n\\nWe look forward to helping you get the most out of our service.\\n\\nBest regards,\\nThe Team\",\"id\":\"call_mv4VUael9WUlQA306fQ9c8Kq\"}"
},
{
"type": "function_call",
"name": "Code_Tool",
"arguments": "{\"tool\":\"Code_Tool\",\"receiver\":\"john@gmail.com\",\"body\":\"Subject: Welcome to Our Service!\\n\\nHi John,\\n\\nWelcome! We're thrilled to have you with us. If you have any questions or need help getting started, reply to this email or visit our Help Center. Here are a few resources to help you begin:\\n\\n- Getting started guide: https://example.com/getting-started\\n- Support: support@example.com\\n\\nWe look forward to helping you get the most out of our service.\\n\\nBest regards,\\nThe Team\",\"id\":\"call_mv4VUael9WUlQA306fQ9c8Kq\"}",
"call_id": "call_mv4VUael9WUlQA306fQ9c8Kq"
},
{
"type": "function_call_output",
"call_id": "call_mv4VUael9WUlQA306fQ9c8Kq",
"output": "[{\"response\":\"Email sent\"}]"
}
],
"model": "gpt-5-mini",
"stream": false,
"tools": [
{
"type": "function",
"name": "Code_Tool",
"parameters": {
"type": "object",
"properties": {
"toolParameters": {
"type": "object",
"properties": {
"receiver": {
"type": "string"
},
"body": {
"type": "string"
}
},
"required": ["receiver", "body"],
"additionalProperties": false,
"description": "Input parameters for the tool"
},
"hitlParameters": {
"type": "object",
"properties": {},
"additionalProperties": false,
"description": "Parameters for the Human-in-the-Loop layer"
}
},
"required": ["toolParameters", "hitlParameters"],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
},
"description": "Send email",
"strict": false
}
],
"text": {}
},
"rawBytes": "eyJpbnB1dCI6W3sidHlwZSI6Im1lc3NhZ2UiLCJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJTZW5kIHdlbGNvbWUgZW1haWwgdG8gam9obkBnbWFpbC5jb20ifSx7InR5cGUiOiJtZXNzYWdlIiwicm9sZSI6ImFzc2lzdGFudCIsImNvbnRlbnQiOiJDYWxsaW5nIENvZGVfVG9vbCB3aXRoIGlucHV0OiB7XCJ0b29sXCI6XCJDb2RlX1Rvb2xcIixcInJlY2VpdmVyXCI6XCJqb2huQGdtYWlsLmNvbVwiLFwiYm9keVwiOlwiU3ViamVjdDogV2VsY29tZSB0byBPdXIgU2VydmljZSFcXG5cXG5IaSBKb2huLFxcblxcbldlbGNvbWUhIFdlJ3JlIHRocmlsbGVkIHRvIGhhdmUgeW91IHdpdGggdXMuIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb3IgbmVlZCBoZWxwIGdldHRpbmcgc3RhcnRlZCwgcmVwbHkgdG8gdGhpcyBlbWFpbCBvciB2aXNpdCBvdXIgSGVscCBDZW50ZXIuIEhlcmUgYXJlIGEgZmV3IHJlc291cmNlcyB0byBoZWxwIHlvdSBiZWdpbjpcXG5cXG4tIEdldHRpbmcgc3RhcnRlZCBndWlkZTogaHR0cHM6Ly9leGFtcGxlLmNvbS9nZXR0aW5nLXN0YXJ0ZWRcXG4tIFN1cHBvcnQ6IHN1cHBvcnRAZXhhbXBsZS5jb21cXG5cXG5XZSBsb29rIGZvcndhcmQgdG8gaGVscGluZyB5b3UgZ2V0IHRoZSBtb3N0IG91dCBvZiBvdXIgc2VydmljZS5cXG5cXG5CZXN0IHJlZ2FyZHMsXFxuVGhlIFRlYW1cIixcImlkXCI6XCJjYWxsX212NFZVYWVsOVdVbFFBMzA2ZlE5YzhLcVwifSJ9LHsidHlwZSI6ImZ1bmN0aW9uX2NhbGwiLCJuYW1lIjoiQ29kZV9Ub29sIiwiYXJndW1lbnRzIjoie1widG9vbFwiOlwiQ29kZV9Ub29sXCIsXCJyZWNlaXZlclwiOlwiam9obkBnbWFpbC5jb21cIixcImJvZHlcIjpcIlN1YmplY3Q6IFdlbGNvbWUgdG8gT3VyIFNlcnZpY2UhXFxuXFxuSGkgSm9obixcXG5cXG5XZWxjb21lISBXZSdyZSB0aHJpbGxlZCB0byBoYXZlIHlvdSB3aXRoIHVzLiBJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIG5lZWQgaGVscCBnZXR0aW5nIHN0YXJ0ZWQsIHJlcGx5IHRvIHRoaXMgZW1haWwgb3IgdmlzaXQgb3VyIEhlbHAgQ2VudGVyLiBIZXJlIGFyZSBhIGZldyByZXNvdXJjZXMgdG8gaGVscCB5b3UgYmVnaW46XFxuXFxuLSBHZXR0aW5nIHN0YXJ0ZWQgZ3VpZGU6IGh0dHBzOi8vZXhhbXBsZS5jb20vZ2V0dGluZy1zdGFydGVkXFxuLSBTdXBwb3J0OiBzdXBwb3J0QGV4YW1wbGUuY29tXFxuXFxuV2UgbG9vayBmb3J3YXJkIHRvIGhlbHBpbmcgeW91IGdldCB0aGUgbW9zdCBvdXQgb2Ygb3VyIHNlcnZpY2UuXFxuXFxuQmVzdCByZWdhcmRzLFxcblRoZSBUZWFtXCIsXCJpZFwiOlwiY2FsbF9tdjRWVWFlbDlXVWxRQTMwNmZROWM4S3FcIn0iLCJjYWxsX2lkIjoiY2FsbF9tdjRWVWFlbDlXVWxRQTMwNmZROWM4S3EifSx7InR5cGUiOiJmdW5jdGlvbl9jYWxsX291dHB1dCIsImNhbGxfaWQiOiJjYWxsX212NFZVYWVsOVdVbFFBMzA2ZlE5YzhLcSIsIm91dHB1dCI6Ilt7XCJyZXNwb25zZVwiOlwiRW1haWwgc2VudFwifV0ifV0sIm1vZGVsIjoiZ3B0LTUtbWluaSIsInN0cmVhbSI6ZmFsc2UsInRvb2xzIjpbeyJ0eXBlIjoiZnVuY3Rpb24iLCJuYW1lIjoiQ29kZV9Ub29sIiwicGFyYW1ldGVycyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJ0b29sUGFyYW1ldGVycyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6eyJyZWNlaXZlciI6eyJ0eXBlIjoic3RyaW5nIn0sImJvZHkiOnsidHlwZSI6InN0cmluZyJ9fSwicmVxdWlyZWQiOlsicmVjZWl2ZXIiLCJib2R5Il0sImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZSwiZGVzY3JpcHRpb24iOiJJbnB1dCBwYXJhbWV0ZXJzIGZvciB0aGUgdG9vbCJ9LCJoaXRsUGFyYW1ldGVycyI6eyJ0eXBlIjoib2JqZWN0IiwicHJvcGVydGllcyI6e30sImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjpmYWxzZSwiZGVzY3JpcHRpb24iOiJQYXJhbWV0ZXJzIGZvciB0aGUgSHVtYW4taW4tdGhlLUxvb3AgbGF5ZXIifX0sInJlcXVpcmVkIjpbInRvb2xQYXJhbWV0ZXJzIiwiaGl0bFBhcmFtZXRlcnMiXSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCIkc2NoZW1hIjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn0sImRlc2NyaXB0aW9uIjoiU2VuZCBlbWFpbCIsInN0cmljdCI6ZmFsc2V9XSwidGV4dCI6e319"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-request-id": ["req_d57fbd070e184fe5805f89607f3fd23e"],
"x-ratelimit-reset-tokens": ["0s"],
"x-ratelimit-reset-requests": ["2ms"],
"x-ratelimit-remaining-tokens": ["180000000"],
"x-ratelimit-remaining-requests": ["29999"],
"x-ratelimit-limit-tokens": ["180000000"],
"x-ratelimit-limit-requests": ["30000"],
"x-envoy-upstream-service-time": ["5220"],
"openai-version": ["2020-10-01"],
"openai-project": ["proj_QgifAq942u8NFReEIvfWVd00"],
"openai-processing-ms": ["5216"],
"openai-organization": ["n8n-1"],
"cf-cache-status": ["DYNAMIC"],
"alt-svc": ["h3=\":443\"; ma=86400"],
"X-Content-Type-Options": ["nosniff"],
"Strict-Transport-Security": ["max-age=31536000; includeSubDomains; preload"],
"Server": ["cloudflare"],
"Date": ["Fri, 23 Jan 2026 11:12:55 GMT"],
"Content-Type": ["application/json"],
"CF-RAY": ["9c26dbb6afc134ec-WAW"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"id": "resp_0c767ce8a378ddc500697357b1ce748193ab87d9bcb346495d",
"object": "response",
"created_at": 1769166769,
"status": "completed",
"background": false,
"billing": {
"payer": "developer"
},
"completed_at": 1769166774,
"error": null,
"frequency_penalty": 0,
"incomplete_details": null,
"instructions": null,
"max_output_tokens": null,
"max_tool_calls": null,
"model": "gpt-5-mini-2025-08-07",
"output": [
{
"id": "rs_0c767ce8a378ddc500697357b243a081938cba8184d50789df",
"type": "reasoning",
"summary": []
},
{
"id": "msg_0c767ce8a378ddc500697357b4bc5481939c5eab737f37dfe7",
"type": "message",
"status": "completed",
"content": [
{
"type": "output_text",
"annotations": [],
"logprobs": [],
"text": "Done — I sent the welcome email to john@gmail.com.\n\nSent message (copy):\nSubject: Welcome to Our Service!\n\nHi John,\n\nWelcome! We're thrilled to have you with us. If you have any questions or need help getting started, reply to this email or visit our Help Center. Here are a few resources to help you begin:\n\n- Getting started guide: https://example.com/getting-started\n- Support: support@example.com\n\nWe look forward to helping you get the most out of our service.\n\nBest regards,\nThe Team\n\nWould you like to modify the message, send it to anyone else, or add a CC/BCC?"
}
],
"role": "assistant"
}
],
"parallel_tool_calls": true,
"presence_penalty": 0,
"previous_response_id": null,
"prompt_cache_key": null,
"prompt_cache_retention": null,
"reasoning": {
"effort": "medium",
"summary": null
},
"safety_identifier": null,
"service_tier": "default",
"store": true,
"temperature": 1,
"text": {
"format": {
"type": "text"
},
"verbosity": "medium"
},
"tool_choice": "auto",
"tools": [
{
"type": "function",
"description": "Send email",
"name": "Code_Tool",
"parameters": {
"type": "object",
"properties": {
"toolParameters": {
"type": "object",
"properties": {
"receiver": {
"type": "string"
},
"body": {
"type": "string"
}
},
"required": ["receiver", "body"],
"additionalProperties": false,
"description": "Input parameters for the tool"
},
"hitlParameters": {
"type": "object",
"properties": {},
"additionalProperties": false,
"description": "Parameters for the Human-in-the-Loop layer"
}
},
"required": ["toolParameters", "hitlParameters"],
"additionalProperties": false
},
"strict": false
}
],
"top_logprobs": 0,
"top_p": 1,
"truncation": "disabled",
"usage": {
"input_tokens": 398,
"input_tokens_details": {
"cached_tokens": 0
},
"output_tokens": 264,
"output_tokens_details": {
"reasoning_tokens": 128
},
"total_tokens": 662
},
"user": null,
"metadata": {}
},
"rawBytes": "ewogICJpZCI6ICJyZXNwXzBjNzY3Y2U4YTM3OGRkYzUwMDY5NzM1N2IxY2U3NDgxOTNhYjg3ZDliY2IzNDY0OTVkIiwKICAib2JqZWN0IjogInJlc3BvbnNlIiwKICAiY3JlYXRlZF9hdCI6IDE3NjkxNjY3NjksCiAgInN0YXR1cyI6ICJjb21wbGV0ZWQiLAogICJiYWNrZ3JvdW5kIjogZmFsc2UsCiAgImJpbGxpbmciOiB7CiAgICAicGF5ZXIiOiAiZGV2ZWxvcGVyIgogIH0sCiAgImNvbXBsZXRlZF9hdCI6IDE3NjkxNjY3NzQsCiAgImVycm9yIjogbnVsbCwKICAiZnJlcXVlbmN5X3BlbmFsdHkiOiAwLjAsCiAgImluY29tcGxldGVfZGV0YWlscyI6IG51bGwsCiAgImluc3RydWN0aW9ucyI6IG51bGwsCiAgIm1heF9vdXRwdXRfdG9rZW5zIjogbnVsbCwKICAibWF4X3Rvb2xfY2FsbHMiOiBudWxsLAogICJtb2RlbCI6ICJncHQtNS1taW5pLTIwMjUtMDgtMDciLAogICJvdXRwdXQiOiBbCiAgICB7CiAgICAgICJpZCI6ICJyc18wYzc2N2NlOGEzNzhkZGM1MDA2OTczNTdiMjQzYTA4MTkzOGNiYTgxODRkNTA3ODlkZiIsCiAgICAgICJ0eXBlIjogInJlYXNvbmluZyIsCiAgICAgICJzdW1tYXJ5IjogW10KICAgIH0sCiAgICB7CiAgICAgICJpZCI6ICJtc2dfMGM3NjdjZThhMzc4ZGRjNTAwNjk3MzU3YjRiYzU0ODE5MzljNWVhYjczN2YzN2RmZTciLAogICAgICAidHlwZSI6ICJtZXNzYWdlIiwKICAgICAgInN0YXR1cyI6ICJjb21wbGV0ZWQiLAogICAgICAiY29udGVudCI6IFsKICAgICAgICB7CiAgICAgICAgICAidHlwZSI6ICJvdXRwdXRfdGV4dCIsCiAgICAgICAgICAiYW5ub3RhdGlvbnMiOiBbXSwKICAgICAgICAgICJsb2dwcm9icyI6IFtdLAogICAgICAgICAgInRleHQiOiAiRG9uZSBcdTIwMTQgSSBzZW50IHRoZSB3ZWxjb21lIGVtYWlsIHRvIGpvaG5AZ21haWwuY29tLlxuXG5TZW50IG1lc3NhZ2UgKGNvcHkpOlxuU3ViamVjdDogV2VsY29tZSB0byBPdXIgU2VydmljZSFcblxuSGkgSm9obixcblxuV2VsY29tZSEgV2UncmUgdGhyaWxsZWQgdG8gaGF2ZSB5b3Ugd2l0aCB1cy4gSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBuZWVkIGhlbHAgZ2V0dGluZyBzdGFydGVkLCByZXBseSB0byB0aGlzIGVtYWlsIG9yIHZpc2l0IG91ciBIZWxwIENlbnRlci4gSGVyZSBhcmUgYSBmZXcgcmVzb3VyY2VzIHRvIGhlbHAgeW91IGJlZ2luOlxuXG4tIEdldHRpbmcgc3RhcnRlZCBndWlkZTogaHR0cHM6Ly9leGFtcGxlLmNvbS9nZXR0aW5nLXN0YXJ0ZWRcbi0gU3VwcG9ydDogc3VwcG9ydEBleGFtcGxlLmNvbVxuXG5XZSBsb29rIGZvcndhcmQgdG8gaGVscGluZyB5b3UgZ2V0IHRoZSBtb3N0IG91dCBvZiBvdXIgc2VydmljZS5cblxuQmVzdCByZWdhcmRzLFxuVGhlIFRlYW1cblxuV291bGQgeW91IGxpa2UgdG8gbW9kaWZ5IHRoZSBtZXNzYWdlLCBzZW5kIGl0IHRvIGFueW9uZSBlbHNlLCBvciBhZGQgYSBDQy9CQ0M/IgogICAgICAgIH0KICAgICAgXSwKICAgICAgInJvbGUiOiAiYXNzaXN0YW50IgogICAgfQogIF0sCiAgInBhcmFsbGVsX3Rvb2xfY2FsbHMiOiB0cnVlLAogICJwcmVzZW5jZV9wZW5hbHR5IjogMC4wLAogICJwcmV2aW91c19yZXNwb25zZV9pZCI6IG51bGwsCiAgInByb21wdF9jYWNoZV9rZXkiOiBudWxsLAogICJwcm9tcHRfY2FjaGVfcmV0ZW50aW9uIjogbnVsbCwKICAicmVhc29uaW5nIjogewogICAgImVmZm9ydCI6ICJtZWRpdW0iLAogICAgInN1bW1hcnkiOiBudWxsCiAgfSwKICAic2FmZXR5X2lkZW50aWZpZXIiOiBudWxsLAogICJzZXJ2aWNlX3RpZXIiOiAiZGVmYXVsdCIsCiAgInN0b3JlIjogdHJ1ZSwKICAidGVtcGVyYXR1cmUiOiAxLjAsCiAgInRleHQiOiB7CiAgICAiZm9ybWF0IjogewogICAgICAidHlwZSI6ICJ0ZXh0IgogICAgfSwKICAgICJ2ZXJib3NpdHkiOiAibWVkaXVtIgogIH0sCiAgInRvb2xfY2hvaWNlIjogImF1dG8iLAogICJ0b29scyI6IFsKICAgIHsKICAgICAgInR5cGUiOiAiZnVuY3Rpb24iLAogICAgICAiZGVzY3JpcHRpb24iOiAiU2VuZCBlbWFpbCIsCiAgICAgICJuYW1lIjogIkNvZGVfVG9vbCIsCiAgICAgICJwYXJhbWV0ZXJzIjogewogICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgICAidG9vbFBhcmFtZXRlcnMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICAgICAgICJyZWNlaXZlciI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICJib2R5IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmVkIjogWwogICAgICAgICAgICAgICJyZWNlaXZlciIsCiAgICAgICAgICAgICAgImJvZHkiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyI6IGZhbHNlLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSW5wdXQgcGFyYW1ldGVycyBmb3IgdGhlIHRvb2wiCiAgICAgICAgICB9LAogICAgICAgICAgImhpdGxQYXJhbWV0ZXJzIjogewogICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAicHJvcGVydGllcyI6IHt9LAogICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiBmYWxzZSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlBhcmFtZXRlcnMgZm9yIHRoZSBIdW1hbi1pbi10aGUtTG9vcCBsYXllciIKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJyZXF1aXJlZCI6IFsKICAgICAgICAgICJ0b29sUGFyYW1ldGVycyIsCiAgICAgICAgICAiaGl0bFBhcmFtZXRlcnMiCiAgICAgICAgXSwKICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiBmYWxzZQogICAgICB9LAogICAgICAic3RyaWN0IjogZmFsc2UKICAgIH0KICBdLAogICJ0b3BfbG9ncHJvYnMiOiAwLAogICJ0b3BfcCI6IDEuMCwKICAidHJ1bmNhdGlvbiI6ICJkaXNhYmxlZCIsCiAgInVzYWdlIjogewogICAgImlucHV0X3Rva2VucyI6IDM5OCwKICAgICJpbnB1dF90b2tlbnNfZGV0YWlscyI6IHsKICAgICAgImNhY2hlZF90b2tlbnMiOiAwCiAgICB9LAogICAgIm91dHB1dF90b2tlbnMiOiAyNjQsCiAgICAib3V0cHV0X3Rva2Vuc19kZXRhaWxzIjogewogICAgICAicmVhc29uaW5nX3Rva2VucyI6IDEyOAogICAgfSwKICAgICJ0b3RhbF90b2tlbnMiOiA2NjIKICB9LAogICJ1c2VyIjogbnVsbCwKICAibWV0YWRhdGEiOiB7fQp9"
}
},
"id": "1769166878317-unknown-host-POST-_v1_responses-5da732d2.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,80 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/chat/completions",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "gpt-4.1-mini",
"stream": false,
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImdwdC00LjEtbWluaSIsInN0cmVhbSI6ZmFsc2UsIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIZWxsbyEifV19"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-request-id": ["req_b8f45478a83a4dd2b6d3d6c0df25b482"],
"x-ratelimit-reset-tokens": ["0s"],
"x-ratelimit-reset-requests": ["2ms"],
"x-ratelimit-remaining-tokens": ["149999997"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"id": "chatcmpl-CDWB6cgun4QRcijeXQYPQWTaqtLmN",
"object": "chat.completion",
"created": 1757337992,
"model": "gpt-4.1-mini-2025-04-14",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I assist you today?",
"refusal": null,
"annotations": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 9,
"total_tokens": 18,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
},
"service_tier": "default",
"system_fingerprint": "fp_6d7dcc9a98"
},
"rawBytes": "ewogICJpZCI6ICJjaGF0Y21wbC1DRFdCNmNndW40UVJjaWplWFFZUFFXVGFxdExtTiIsCiAgIm9iamVjdCI6ICJjaGF0LmNvbXBsZXRpb24iLAogICJjcmVhdGVkIjogMTc1NzMzNzk5MiwKICAibW9kZWwiOiAiZ3B0LTQuMS1taW5pLTIwMjUtMDQtMTQiLAogICJjaG9pY2VzIjogWwogICAgewogICAgICAiaW5kZXgiOiAwLAogICAgICAibWVzc2FnZSI6IHsKICAgICAgICAicm9sZSI6ICJhc3Npc3RhbnQiLAogICAgICAgICJjb250ZW50IjogIkhlbGxvISBIb3cgY2FuIEkgYXNzaXN0IHlvdSB0b2RheT8iLAogICAgICAgICJyZWZ1c2FsIjogbnVsbCwKICAgICAgICAiYW5ub3RhdGlvbnMiOiBbXQogICAgICB9LAogICAgICAibG9ncHJvYnMiOiBudWxsLAogICAgICAiZmluaXNoX3JlYXNvbiI6ICJzdG9wIgogICAgfQogIF0sCiAgInVzYWdlIjogewogICAgInByb21wdF90b2tlbnMiOiA5LAogICAgImNvbXBsZXRpb25fdG9rZW5zIjogOSwKICAgICJ0b3RhbF90b2tlbnMiOiAxOCwKICAgICJwcm9tcHRfdG9rZW5zX2RldGFpbHMiOiB7CiAgICAgICJjYWNoZWRfdG9rZW5zIjogMCwKICAgICAgImF1ZGlvX3Rva2VucyI6IDAKICAgIH0sCiAgICAiY29tcGxldGlvbl90b2tlbnNfZGV0YWlscyI6IHsKICAgICAgInJlYXNvbmluZ190b2tlbnMiOiAwLAogICAgICAiYXVkaW9fdG9rZW5zIjogMCwKICAgICAgImFjY2VwdGVkX3ByZWRpY3Rpb25fdG9rZW5zIjogMCwKICAgICAgInJlamVjdGVkX3ByZWRpY3Rpb25fdG9rZW5zIjogMAogICAgfQogIH0sCiAgInNlcnZpY2VfdGllciI6ICJkZWZhdWx0IiwKICAic3lzdGVtX2ZpbmdlcnByaW50IjogImZwXzZkN2RjYzlhOTgiCn0K"
}
},
"id": "1757337994261-unknown-host-POST-_v1_chat_completions-1561df08.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,82 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/chat/completions",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "gpt-4.1-mini",
"stream": false,
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImdwdC00LjEtbWluaSIsInN0cmVhbSI6ZmFsc2UsIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIZWxsbyEifV19"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-request-id": ["req_11f2fb25bd0b4a758224bba6f1e68e50"],
"x-ratelimit-reset-tokens": ["0s"],
"x-ratelimit-reset-requests": ["2ms"],
"x-ratelimit-remaining-tokens": ["149999995"],
"x-ratelimit-remaining-requests": ["29999"],
"x-ratelimit-limit-tokens": ["150000000"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"id": "chatcmpl-CDWB7f4flZjMHmcuet4JNe5pRTfVM",
"object": "chat.completion",
"created": 1757337993,
"model": "gpt-4.1-mini-2025-04-14",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I assist you today?",
"refusal": null,
"annotations": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 9,
"total_tokens": 18,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
},
"service_tier": "default",
"system_fingerprint": "fp_4fce0778af"
},
"rawBytes": "ewogICJpZCI6ICJjaGF0Y21wbC1DRFdCN2Y0Zmxaak1IbWN1ZXQ0Sk5lNXBSVGZWTSIsCiAgIm9iamVjdCI6ICJjaGF0LmNvbXBsZXRpb24iLAogICJjcmVhdGVkIjogMTc1NzMzNzk5MywKICAibW9kZWwiOiAiZ3B0LTQuMS1taW5pLTIwMjUtMDQtMTQiLAogICJjaG9pY2VzIjogWwogICAgewogICAgICAiaW5kZXgiOiAwLAogICAgICAibWVzc2FnZSI6IHsKICAgICAgICAicm9sZSI6ICJhc3Npc3RhbnQiLAogICAgICAgICJjb250ZW50IjogIkhlbGxvISBIb3cgY2FuIEkgYXNzaXN0IHlvdSB0b2RheT8iLAogICAgICAgICJyZWZ1c2FsIjogbnVsbCwKICAgICAgICAiYW5ub3RhdGlvbnMiOiBbXQogICAgICB9LAogICAgICAibG9ncHJvYnMiOiBudWxsLAogICAgICAiZmluaXNoX3JlYXNvbiI6ICJzdG9wIgogICAgfQogIF0sCiAgInVzYWdlIjogewogICAgInByb21wdF90b2tlbnMiOiA5LAogICAgImNvbXBsZXRpb25fdG9rZW5zIjogOSwKICAgICJ0b3RhbF90b2tlbnMiOiAxOCwKICAgICJwcm9tcHRfdG9rZW5zX2RldGFpbHMiOiB7CiAgICAgICJjYWNoZWRfdG9rZW5zIjogMCwKICAgICAgImF1ZGlvX3Rva2VucyI6IDAKICAgIH0sCiAgICAiY29tcGxldGlvbl90b2tlbnNfZGV0YWlscyI6IHsKICAgICAgInJlYXNvbmluZ190b2tlbnMiOiAwLAogICAgICAiYXVkaW9fdG9rZW5zIjogMCwKICAgICAgImFjY2VwdGVkX3ByZWRpY3Rpb25fdG9rZW5zIjogMCwKICAgICAgInJlamVjdGVkX3ByZWRpY3Rpb25fdG9rZW5zIjogMAogICAgfQogIH0sCiAgInNlcnZpY2VfdGllciI6ICJkZWZhdWx0IiwKICAic3lzdGVtX2ZpbmdlcnByaW50IjogImZwXzRmY2UwNzc4YWYiCn0K"
}
},
"id": "1757337994532-unknown-host-POST-_v1_chat_completions-1561df08.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,82 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/chat/completions",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "gpt-4.1-mini",
"stream": false,
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImdwdC00LjEtbWluaSIsInN0cmVhbSI6ZmFsc2UsIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIZWxsbyEifV19"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-request-id": ["req_2476c446b9a74442be397d438277a7c1"],
"x-ratelimit-reset-tokens": ["0s"],
"x-ratelimit-reset-requests": ["2ms"],
"x-ratelimit-remaining-tokens": ["149999995"],
"x-ratelimit-remaining-requests": ["29999"],
"x-ratelimit-limit-tokens": ["150000000"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"id": "chatcmpl-CDWB6wRC1FBoWeZr36clt56dB1EzT",
"object": "chat.completion",
"created": 1757337992,
"model": "gpt-4.1-mini-2025-04-14",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I assist you today?",
"refusal": null,
"annotations": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 9,
"completion_tokens": 9,
"total_tokens": 18,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
},
"service_tier": "default",
"system_fingerprint": "fp_4fce0778af"
},
"rawBytes": "ewogICJpZCI6ICJjaGF0Y21wbC1DRFdCNndSQzFGQm9XZVpyMzZjbHQ1NmRCMUV6VCIsCiAgIm9iamVjdCI6ICJjaGF0LmNvbXBsZXRpb24iLAogICJjcmVhdGVkIjogMTc1NzMzNzk5MiwKICAibW9kZWwiOiAiZ3B0LTQuMS1taW5pLTIwMjUtMDQtMTQiLAogICJjaG9pY2VzIjogWwogICAgewogICAgICAiaW5kZXgiOiAwLAogICAgICAibWVzc2FnZSI6IHsKICAgICAgICAicm9sZSI6ICJhc3Npc3RhbnQiLAogICAgICAgICJjb250ZW50IjogIkhlbGxvISBIb3cgY2FuIEkgYXNzaXN0IHlvdSB0b2RheT8iLAogICAgICAgICJyZWZ1c2FsIjogbnVsbCwKICAgICAgICAiYW5ub3RhdGlvbnMiOiBbXQogICAgICB9LAogICAgICAibG9ncHJvYnMiOiBudWxsLAogICAgICAiZmluaXNoX3JlYXNvbiI6ICJzdG9wIgogICAgfQogIF0sCiAgInVzYWdlIjogewogICAgInByb21wdF90b2tlbnMiOiA5LAogICAgImNvbXBsZXRpb25fdG9rZW5zIjogOSwKICAgICJ0b3RhbF90b2tlbnMiOiAxOCwKICAgICJwcm9tcHRfdG9rZW5zX2RldGFpbHMiOiB7CiAgICAgICJjYWNoZWRfdG9rZW5zIjogMCwKICAgICAgImF1ZGlvX3Rva2VucyI6IDAKICAgIH0sCiAgICAiY29tcGxldGlvbl90b2tlbnNfZGV0YWlscyI6IHsKICAgICAgInJlYXNvbmluZ190b2tlbnMiOiAwLAogICAgICAiYXVkaW9fdG9rZW5zIjogMCwKICAgICAgImFjY2VwdGVkX3ByZWRpY3Rpb25fdG9rZW5zIjogMCwKICAgICAgInJlamVjdGVkX3ByZWRpY3Rpb25fdG9rZW5zIjogMAogICAgfQogIH0sCiAgInNlcnZpY2VfdGllciI6ICJkZWZhdWx0IiwKICAic3lzdGVtX2ZpbmdlcnByaW50IjogImZwXzRmY2UwNzc4YWYiCn0K"
}
},
"id": "1757337995023-unknown-host-POST-_v1_chat_completions-1561df08.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,101 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/chat/completions",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "gpt-4.1-mini",
"stream": false,
"tools": [
{
"type": "function",
"function": {
"name": "calculator",
"description": "Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.",
"parameters": {
"type": "object",
"properties": {
"input": {
"type": "string"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
}
}
],
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImdwdC00LjEtbWluaSIsInN0cmVhbSI6ZmFsc2UsInRvb2xzIjpbeyJ0eXBlIjoiZnVuY3Rpb24iLCJmdW5jdGlvbiI6eyJuYW1lIjoiY2FsY3VsYXRvciIsImRlc2NyaXB0aW9uIjoiVXNlZnVsIGZvciBnZXR0aW5nIHRoZSByZXN1bHQgb2YgYSBtYXRoIGV4cHJlc3Npb24uIFRoZSBpbnB1dCB0byB0aGlzIHRvb2wgc2hvdWxkIGJlIGEgdmFsaWQgbWF0aGVtYXRpY2FsIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSBleGVjdXRlZCBieSBhIHNpbXBsZSBjYWxjdWxhdG9yLiIsInBhcmFtZXRlcnMiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiaW5wdXQiOnsidHlwZSI6InN0cmluZyJ9fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCIkc2NoZW1hIjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn19fV0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJIZWxsbyEifV19"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-request-id": ["req_b9dd655cc0ac465980074d2301a4f058"],
"x-ratelimit-reset-tokens": ["0s"],
"x-ratelimit-reset-requests": ["2ms"],
"x-ratelimit-remaining-tokens": ["149999995"],
"x-ratelimit-remaining-requests": ["29999"],
"x-ratelimit-limit-tokens": ["150000000"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"id": "chatcmpl-CDWBAps4xOl2Ps9V9GQ7RwmRWYGnU",
"object": "chat.completion",
"created": 1757337996,
"model": "gpt-4.1-mini-2025-04-14",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello! How can I assist you today?",
"refusal": null,
"annotations": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 68,
"completion_tokens": 10,
"total_tokens": 78,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
},
"service_tier": "default",
"system_fingerprint": "fp_4fce0778af"
},
"rawBytes": "ewogICJpZCI6ICJjaGF0Y21wbC1DRFdCQXBzNHhPbDJQczlWOUdRN1J3bVJXWUduVSIsCiAgIm9iamVjdCI6ICJjaGF0LmNvbXBsZXRpb24iLAogICJjcmVhdGVkIjogMTc1NzMzNzk5NiwKICAibW9kZWwiOiAiZ3B0LTQuMS1taW5pLTIwMjUtMDQtMTQiLAogICJjaG9pY2VzIjogWwogICAgewogICAgICAiaW5kZXgiOiAwLAogICAgICAibWVzc2FnZSI6IHsKICAgICAgICAicm9sZSI6ICJhc3Npc3RhbnQiLAogICAgICAgICJjb250ZW50IjogIkhlbGxvISBIb3cgY2FuIEkgYXNzaXN0IHlvdSB0b2RheT8iLAogICAgICAgICJyZWZ1c2FsIjogbnVsbCwKICAgICAgICAiYW5ub3RhdGlvbnMiOiBbXQogICAgICB9LAogICAgICAibG9ncHJvYnMiOiBudWxsLAogICAgICAiZmluaXNoX3JlYXNvbiI6ICJzdG9wIgogICAgfQogIF0sCiAgInVzYWdlIjogewogICAgInByb21wdF90b2tlbnMiOiA2OCwKICAgICJjb21wbGV0aW9uX3Rva2VucyI6IDEwLAogICAgInRvdGFsX3Rva2VucyI6IDc4LAogICAgInByb21wdF90b2tlbnNfZGV0YWlscyI6IHsKICAgICAgImNhY2hlZF90b2tlbnMiOiAwLAogICAgICAiYXVkaW9fdG9rZW5zIjogMAogICAgfSwKICAgICJjb21wbGV0aW9uX3Rva2Vuc19kZXRhaWxzIjogewogICAgICAicmVhc29uaW5nX3Rva2VucyI6IDAsCiAgICAgICJhdWRpb190b2tlbnMiOiAwLAogICAgICAiYWNjZXB0ZWRfcHJlZGljdGlvbl90b2tlbnMiOiAwLAogICAgICAicmVqZWN0ZWRfcHJlZGljdGlvbl90b2tlbnMiOiAwCiAgICB9CiAgfSwKICAic2VydmljZV90aWVyIjogImRlZmF1bHQiLAogICJzeXN0ZW1fZmluZ2VycHJpbnQiOiAiZnBfNGZjZTA3NzhhZiIKfQo="
}
},
"id": "1757338000172-unknown-host-POST-_v1_chat_completions-fdac7829.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,111 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/chat/completions",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "gpt-4.1-mini",
"stream": false,
"tools": [
{
"type": "function",
"function": {
"name": "calculator",
"description": "Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.",
"parameters": {
"type": "object",
"properties": {
"input": {
"type": "string"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
}
}
],
"messages": [
{
"role": "user",
"content": "What is 1000 * 10?"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImdwdC00LjEtbWluaSIsInN0cmVhbSI6ZmFsc2UsInRvb2xzIjpbeyJ0eXBlIjoiZnVuY3Rpb24iLCJmdW5jdGlvbiI6eyJuYW1lIjoiY2FsY3VsYXRvciIsImRlc2NyaXB0aW9uIjoiVXNlZnVsIGZvciBnZXR0aW5nIHRoZSByZXN1bHQgb2YgYSBtYXRoIGV4cHJlc3Npb24uIFRoZSBpbnB1dCB0byB0aGlzIHRvb2wgc2hvdWxkIGJlIGEgdmFsaWQgbWF0aGVtYXRpY2FsIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSBleGVjdXRlZCBieSBhIHNpbXBsZSBjYWxjdWxhdG9yLiIsInBhcmFtZXRlcnMiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiaW5wdXQiOnsidHlwZSI6InN0cmluZyJ9fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCIkc2NoZW1hIjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn19fV0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJXaGF0IGlzIDEwMDAgKiAxMD8ifV19"
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-request-id": ["req_56023c245be3448c8373ff3aad21f7c4"],
"x-ratelimit-reset-tokens": ["0s"],
"x-ratelimit-reset-requests": ["2ms"],
"x-ratelimit-remaining-tokens": ["149999992"],
"x-ratelimit-remaining-requests": ["29999"],
"x-ratelimit-limit-tokens": ["150000000"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"id": "chatcmpl-CDWBDR6zMgzDe9t4hkJ0Xq3dxsK3y",
"object": "chat.completion",
"created": 1757337999,
"model": "gpt-4.1-mini-2025-04-14",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_88I326c3cCx7lOEXL3Wpp30c",
"type": "function",
"function": {
"name": "calculator",
"arguments": "{\"input\":\"1000 * 10\"}"
}
}
],
"refusal": null,
"annotations": []
},
"logprobs": null,
"finish_reason": "tool_calls"
}
],
"usage": {
"prompt_tokens": 75,
"completion_tokens": 18,
"total_tokens": 93,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
},
"service_tier": "default",
"system_fingerprint": "fp_4fce0778af"
},
"rawBytes": "ewogICJpZCI6ICJjaGF0Y21wbC1DRFdCRFI2ek1nekRlOXQ0aGtKMFhxM2R4c0szeSIsCiAgIm9iamVjdCI6ICJjaGF0LmNvbXBsZXRpb24iLAogICJjcmVhdGVkIjogMTc1NzMzNzk5OSwKICAibW9kZWwiOiAiZ3B0LTQuMS1taW5pLTIwMjUtMDQtMTQiLAogICJjaG9pY2VzIjogWwogICAgewogICAgICAiaW5kZXgiOiAwLAogICAgICAibWVzc2FnZSI6IHsKICAgICAgICAicm9sZSI6ICJhc3Npc3RhbnQiLAogICAgICAgICJjb250ZW50IjogbnVsbCwKICAgICAgICAidG9vbF9jYWxscyI6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgImlkIjogImNhbGxfODhJMzI2YzNjQ3g3bE9FWEwzV3BwMzBjIiwKICAgICAgICAgICAgInR5cGUiOiAiZnVuY3Rpb24iLAogICAgICAgICAgICAiZnVuY3Rpb24iOiB7CiAgICAgICAgICAgICAgIm5hbWUiOiAiY2FsY3VsYXRvciIsCiAgICAgICAgICAgICAgImFyZ3VtZW50cyI6ICJ7XCJpbnB1dFwiOlwiMTAwMCAqIDEwXCJ9IgogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAicmVmdXNhbCI6IG51bGwsCiAgICAgICAgImFubm90YXRpb25zIjogW10KICAgICAgfSwKICAgICAgImxvZ3Byb2JzIjogbnVsbCwKICAgICAgImZpbmlzaF9yZWFzb24iOiAidG9vbF9jYWxscyIKICAgIH0KICBdLAogICJ1c2FnZSI6IHsKICAgICJwcm9tcHRfdG9rZW5zIjogNzUsCiAgICAiY29tcGxldGlvbl90b2tlbnMiOiAxOCwKICAgICJ0b3RhbF90b2tlbnMiOiA5MywKICAgICJwcm9tcHRfdG9rZW5zX2RldGFpbHMiOiB7CiAgICAgICJjYWNoZWRfdG9rZW5zIjogMCwKICAgICAgImF1ZGlvX3Rva2VucyI6IDAKICAgIH0sCiAgICAiY29tcGxldGlvbl90b2tlbnNfZGV0YWlscyI6IHsKICAgICAgInJlYXNvbmluZ190b2tlbnMiOiAwLAogICAgICAiYXVkaW9fdG9rZW5zIjogMCwKICAgICAgImFjY2VwdGVkX3ByZWRpY3Rpb25fdG9rZW5zIjogMCwKICAgICAgInJlamVjdGVkX3ByZWRpY3Rpb25fdG9rZW5zIjogMAogICAgfQogIH0sCiAgInNlcnZpY2VfdGllciI6ICJkZWZhdWx0IiwKICAic3lzdGVtX2ZpbmdlcnByaW50IjogImZwXzRmY2UwNzc4YWYiCn0K"
}
},
"id": "1757338002750-unknown-host-POST-_v1_chat_completions-9d7fafef.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,120 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/chat/completions",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "gpt-4.1-mini",
"stream": false,
"tools": [
{
"type": "function",
"function": {
"name": "calculator",
"description": "Useful for getting the result of a math expression. The input to this tool should be a valid mathematical expression that could be executed by a simple calculator.",
"parameters": {
"type": "object",
"properties": {
"input": {
"type": "string"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
}
}
],
"messages": [
{
"role": "user",
"content": "What is 1000 * 10?"
},
{
"role": "assistant",
"content": "",
"tool_calls": [
{
"id": "call_88I326c3cCx7lOEXL3Wpp30c",
"type": "function",
"function": {
"name": "calculator",
"arguments": "{\"input\":\"1000 * 10\"}"
}
}
]
},
{
"role": "tool",
"content": "10000",
"tool_call_id": "call_88I326c3cCx7lOEXL3Wpp30c"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImdwdC00LjEtbWluaSIsInN0cmVhbSI6ZmFsc2UsInRvb2xzIjpbeyJ0eXBlIjoiZnVuY3Rpb24iLCJmdW5jdGlvbiI6eyJuYW1lIjoiY2FsY3VsYXRvciIsImRlc2NyaXB0aW9uIjoiVXNlZnVsIGZvciBnZXR0aW5nIHRoZSByZXN1bHQgb2YgYSBtYXRoIGV4cHJlc3Npb24uIFRoZSBpbnB1dCB0byB0aGlzIHRvb2wgc2hvdWxkIGJlIGEgdmFsaWQgbWF0aGVtYXRpY2FsIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSBleGVjdXRlZCBieSBhIHNpbXBsZSBjYWxjdWxhdG9yLiIsInBhcmFtZXRlcnMiOnsidHlwZSI6Im9iamVjdCIsInByb3BlcnRpZXMiOnsiaW5wdXQiOnsidHlwZSI6InN0cmluZyJ9fSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCIkc2NoZW1hIjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn19fV0sIm1lc3NhZ2VzIjpbeyJyb2xlIjoidXNlciIsImNvbnRlbnQiOiJXaGF0IGlzIDEwMDAgKiAxMD8ifSx7InJvbGUiOiJhc3Npc3RhbnQiLCJjb250ZW50IjoiIiwidG9vbF9jYWxscyI6W3siaWQiOiJjYWxsXzg4STMyNmMzY0N4N2xPRVhMM1dwcDMwYyIsInR5cGUiOiJmdW5jdGlvbiIsImZ1bmN0aW9uIjp7Im5hbWUiOiJjYWxjdWxhdG9yIiwiYXJndW1lbnRzIjoie1wiaW5wdXRcIjpcIjEwMDAgKiAxMFwifSJ9fV19LHsicm9sZSI6InRvb2wiLCJjb250ZW50IjoiMTAwMDAiLCJ0b29sX2NhbGxfaWQiOiJjYWxsXzg4STMyNmMzY0N4N2xPRVhMM1dwcDMwYyJ9XX0="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-request-id": ["req_65b7f6b5aad740e0965555ae8df92d43"],
"x-ratelimit-reset-tokens": ["0s"],
"x-ratelimit-reset-requests": ["2ms"],
"x-ratelimit-remaining-tokens": ["149999992"],
"x-ratelimit-remaining-requests": ["29999"],
"x-ratelimit-limit-tokens": ["150000000"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"id": "chatcmpl-CDWBEPUWN3El2oq4aRaezkvUlRjv8",
"object": "chat.completion",
"created": 1757338000,
"model": "gpt-4.1-mini-2025-04-14",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "1000 multiplied by 10 equals 10,000.",
"refusal": null,
"annotations": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 102,
"completion_tokens": 13,
"total_tokens": 115,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
},
"service_tier": "default",
"system_fingerprint": "fp_4fce0778af"
},
"rawBytes": "ewogICJpZCI6ICJjaGF0Y21wbC1DRFdCRVBVV04zRWwyb3E0YVJhZXprdlVsUmp2OCIsCiAgIm9iamVjdCI6ICJjaGF0LmNvbXBsZXRpb24iLAogICJjcmVhdGVkIjogMTc1NzMzODAwMCwKICAibW9kZWwiOiAiZ3B0LTQuMS1taW5pLTIwMjUtMDQtMTQiLAogICJjaG9pY2VzIjogWwogICAgewogICAgICAiaW5kZXgiOiAwLAogICAgICAibWVzc2FnZSI6IHsKICAgICAgICAicm9sZSI6ICJhc3Npc3RhbnQiLAogICAgICAgICJjb250ZW50IjogIjEwMDAgbXVsdGlwbGllZCBieSAxMCBlcXVhbHMgMTAsMDAwLiIsCiAgICAgICAgInJlZnVzYWwiOiBudWxsLAogICAgICAgICJhbm5vdGF0aW9ucyI6IFtdCiAgICAgIH0sCiAgICAgICJsb2dwcm9icyI6IG51bGwsCiAgICAgICJmaW5pc2hfcmVhc29uIjogInN0b3AiCiAgICB9CiAgXSwKICAidXNhZ2UiOiB7CiAgICAicHJvbXB0X3Rva2VucyI6IDEwMiwKICAgICJjb21wbGV0aW9uX3Rva2VucyI6IDEzLAogICAgInRvdGFsX3Rva2VucyI6IDExNSwKICAgICJwcm9tcHRfdG9rZW5zX2RldGFpbHMiOiB7CiAgICAgICJjYWNoZWRfdG9rZW5zIjogMCwKICAgICAgImF1ZGlvX3Rva2VucyI6IDAKICAgIH0sCiAgICAiY29tcGxldGlvbl90b2tlbnNfZGV0YWlscyI6IHsKICAgICAgInJlYXNvbmluZ190b2tlbnMiOiAwLAogICAgICAiYXVkaW9fdG9rZW5zIjogMCwKICAgICAgImFjY2VwdGVkX3ByZWRpY3Rpb25fdG9rZW5zIjogMCwKICAgICAgInJlamVjdGVkX3ByZWRpY3Rpb25fdG9rZW5zIjogMAogICAgfQogIH0sCiAgInNlcnZpY2VfdGllciI6ICJkZWZhdWx0IiwKICAic3lzdGVtX2ZpbmdlcnByaW50IjogImZwXzRmY2UwNzc4YWYiCn0K"
}
},
"id": "1757338002751-unknown-host-POST-_v1_chat_completions-e8887e9d.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,26 @@
{
"httpRequest": {
"method": "GET",
"path": "/mock-endpoint"
},
"httpResponse": {
"statusCode": 200,
"headers": {
"Content-Type": ["application/json"]
},
"body": {
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
},
"id": "511d9c87-9ee3-4af8-8729-ca13b0a70e89",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"remainingTimes": 1
}
}
@@ -0,0 +1,120 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-sonnet-4-5",
"temperature": 0,
"stream": false,
"max_tokens": 16000,
"tools": [
{
"name": "extract",
"description": "A function available to call.",
"input_schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 10,
"maxLength": 128,
"description": "Name of the workflow based on the prompt"
}
},
"required": ["name"],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
}
],
"tool_choice": {
"type": "tool",
"name": "extract"
},
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "<role>\nBased on the initial user prompt, please generate a name for the workflow that captures its essence and purpose\n</role>\n\n<initial_prompt>\nCreate an automation that checks the weather for my location every morning at 5 a.m using OpenWeather. Send me a short weather report by email using Gmail. Use OpenAI `gpt-4.1-mini` to write a short, fun formatted email body by adding personality when describing the weather and how the day might feel. Include all details relevant to decide on my plans and clothes for the day.\n</initial_prompt>\n\n<output_rules>\nThis name should be concise, descriptive, and suitable for a workflow that automates tasks related to the given prompt. The name should be in a format that is easy to read and understand. Do not include the word \"workflow\" in the name.\n</output_rules>"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1zb25uZXQtNC01IiwidGVtcGVyYXR1cmUiOjAsInN0cmVhbSI6ZmFsc2UsIm1heF90b2tlbnMiOjE2MDAwLCJ0b29scyI6W3sibmFtZSI6ImV4dHJhY3QiLCJkZXNjcmlwdGlvbiI6IkEgZnVuY3Rpb24gYXZhaWxhYmxlIHRvIGNhbGwuIiwiaW5wdXRfc2NoZW1hIjp7InR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsidHlwZSI6InN0cmluZyIsIm1pbkxlbmd0aCI6MTAsIm1heExlbmd0aCI6MTI4LCJkZXNjcmlwdGlvbiI6Ik5hbWUgb2YgdGhlIHdvcmtmbG93IGJhc2VkIG9uIHRoZSBwcm9tcHQifX0sInJlcXVpcmVkIjpbIm5hbWUiXSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCIkc2NoZW1hIjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn19XSwidG9vbF9jaG9pY2UiOnsidHlwZSI6InRvb2wiLCJuYW1lIjoiZXh0cmFjdCJ9LCJ0aGlua2luZyI6eyJ0eXBlIjoiZGlzYWJsZWQifSwibWVzc2FnZXMiOlt7InJvbGUiOiJ1c2VyIiwiY29udGVudCI6Ijxyb2xlPlxuQmFzZWQgb24gdGhlIGluaXRpYWwgdXNlciBwcm9tcHQsIHBsZWFzZSBnZW5lcmF0ZSBhIG5hbWUgZm9yIHRoZSB3b3JrZmxvdyB0aGF0IGNhcHR1cmVzIGl0cyBlc3NlbmNlIGFuZCBwdXJwb3NlXG48L3JvbGU+XG5cbjxpbml0aWFsX3Byb21wdD5cbkNyZWF0ZSBhbiBhdXRvbWF0aW9uIHRoYXQgY2hlY2tzIHRoZSB3ZWF0aGVyIGZvciBteSBsb2NhdGlvbiBldmVyeSBtb3JuaW5nIGF0IDUgYS5tIHVzaW5nIE9wZW5XZWF0aGVyLiBTZW5kIG1lIGEgc2hvcnQgd2VhdGhlciByZXBvcnQgYnkgZW1haWwgdXNpbmcgR21haWwuIFVzZSBPcGVuQUkgYGdwdC00LjEtbWluaWAgdG8gd3JpdGUgYSBzaG9ydCwgZnVuIGZvcm1hdHRlZCBlbWFpbCBib2R5IGJ5IGFkZGluZyBwZXJzb25hbGl0eSB3aGVuIGRlc2NyaWJpbmcgdGhlIHdlYXRoZXIgYW5kIGhvdyB0aGUgZGF5IG1pZ2h0IGZlZWwuIEluY2x1ZGUgYWxsIGRldGFpbHMgcmVsZXZhbnQgdG8gZGVjaWRlIG9uIG15IHBsYW5zIGFuZCBjbG90aGVzIGZvciB0aGUgZGF5LlxuPC9pbml0aWFsX3Byb21wdD5cblxuPG91dHB1dF9ydWxlcz5cblRoaXMgbmFtZSBzaG91bGQgYmUgY29uY2lzZSwgZGVzY3JpcHRpdmUsIGFuZCBzdWl0YWJsZSBmb3IgYSB3b3JrZmxvdyB0aGF0IGF1dG9tYXRlcyB0YXNrcyByZWxhdGVkIHRvIHRoZSBnaXZlbiBwcm9tcHQuIFRoZSBuYW1lIHNob3VsZCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIGVhc3kgdG8gcmVhZCBhbmQgdW5kZXJzdGFuZC4gRG8gbm90IGluY2x1ZGUgdGhlIHdvcmQgXCJ3b3JrZmxvd1wiIGluIHRoZSBuYW1lLlxuPC9vdXRwdXRfcnVsZXM+In1dfQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1961"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CX3pLkciCme3ExFoxCoGf"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-01-12T16:41:45Z"],
"anthropic-ratelimit-tokens-remaining": ["15500000"],
"anthropic-ratelimit-tokens-limit": ["15500000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-01-12T16:41:46Z"],
"anthropic-ratelimit-output-tokens-remaining": ["500000"],
"anthropic-ratelimit-output-tokens-limit": ["500000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-01-12T16:41:45Z"],
"anthropic-ratelimit-input-tokens-remaining": ["15000000"],
"anthropic-ratelimit-input-tokens-limit": ["15000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Mon, 12 Jan 2026 16:41:46 GMT"],
"Content-Type": ["application/json"],
"CF-RAY": ["9bce1a627da983da-PRG"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-sonnet-4-5-20250929",
"id": "msg_01Bs7quR6DerJHU8Zci4mPYg",
"type": "message",
"role": "assistant",
"content": [
{
"type": "tool_use",
"id": "toolu_01Qb6Yd8Max52Avqg1n8REpG",
"name": "extract",
"input": {
"name": "Daily Morning Weather Report with Personalized Email"
}
}
],
"stop_reason": "tool_use",
"stop_sequence": null,
"usage": {
"input_tokens": 896,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 0
},
"output_tokens": 41,
"service_tier": "standard"
}
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5IiwiaWQiOiJtc2dfMDFCczdxdVI2RGVySkhVOFpjaTRtUFlnIiwidHlwZSI6Im1lc3NhZ2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMVFiNllkOE1heDUyQXZxZzFuOFJFcEciLCJuYW1lIjoiZXh0cmFjdCIsImlucHV0Ijp7Im5hbWUiOiJEYWlseSBNb3JuaW5nIFdlYXRoZXIgUmVwb3J0IHdpdGggUGVyc29uYWxpemVkIEVtYWlsIn19XSwic3RvcF9yZWFzb24iOiJ0b29sX3VzZSIsInN0b3Bfc2VxdWVuY2UiOm51bGwsInVzYWdlIjp7ImlucHV0X3Rva2VucyI6ODk2LCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjowLCJlcGhlbWVyYWxfMWhfaW5wdXRfdG9rZW5zIjowfSwib3V0cHV0X3Rva2VucyI6NDEsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIn19"
},
"delay": {
"timeUnit": "MILLISECONDS",
"value": 2000
}
},
"id": "1768236114968-unknown-host-POST-_v1_messages-764da75c.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,133 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-sonnet-4-5",
"temperature": 0,
"stream": false,
"max_tokens": 16000,
"tools": [
{
"name": "routing_decision",
"description": "A function available to call.",
"input_schema": {
"type": "object",
"properties": {
"reasoning": {
"type": "string",
"description": "One sentence explaining why this agent should act next"
},
"next": {
"type": "string",
"enum": ["responder", "discovery", "builder", "configurator"],
"description": "The next agent to call"
}
},
"required": ["reasoning", "next"],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
}
],
"tool_choice": {
"type": "tool",
"name": "routing_decision"
},
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Create an automation that checks the weather for my location every morning at 5 a.m using OpenWeather. Send me a short weather report by email using Gmail. Use OpenAI `gpt-4.1-mini` to write a short, fun formatted email body by adding personality when describing the weather and how the day might feel. Include all details relevant to decide on my plans and clothes for the day."
}
],
"system": [
{
"type": "text",
"text": "<role>\nYou are a Supervisor that routes user requests to specialist agents.\n</role>\n\n<available_agents>\n- discovery: Find n8n nodes for building/modifying workflows\n- builder: Create nodes and connections (requires discovery first for new node types)\n- configurator: Set parameters on EXISTING nodes (no structural changes)\n- responder: Answer questions, confirm completion (TERMINAL)\n</available_agents>\n\n<routing_decision_tree>\n1. Is user asking a question or chatting? → responder\n Examples: \"what does this do?\", \"explain the workflow\", \"thanks\"\n\n2. Does the request involve NEW or DIFFERENT node types? → discovery\n Examples:\n - \"Build a workflow that...\" (new workflow)\n - \"Use [ServiceB] instead of [ServiceA]\" (replacing node type)\n - \"Add [some integration]\" (new integration)\n - \"Switch from [ServiceA] to [ServiceB]\" (swapping services)\n\n3. Is the request about connecting/disconnecting existing nodes? → builder\n Examples: \"Connect node A to node B\", \"Remove the connection to X\"\n\n4. Is the request about changing VALUES in existing nodes? → configurator\n Examples:\n - \"Change the URL to https://...\"\n - \"Set the timeout to 30 seconds\"\n - \"Update the email subject to...\"\n</routing_decision_tree>\n\n<key_distinction>\n- \"Use [ServiceB] instead of [ServiceA]\" = REPLACEMENT = discovery (new node type needed)\n- \"Change the [ServiceA] API key\" = CONFIGURATION = configurator (same node, different value)\n</key_distinction>\n\n<output>\n- reasoning: One sentence explaining your routing decision\n- next: Agent name\n</output>\n\n<instruction>\nGiven the conversation above, which agent should act next? Provide your reasoning and selection.\n</instruction>",
"cache_control": {
"type": "ephemeral"
}
}
]
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1zb25uZXQtNC01IiwidGVtcGVyYXR1cmUiOjAsInN0cmVhbSI6ZmFsc2UsIm1heF90b2tlbnMiOjE2MDAwLCJ0b29scyI6W3sibmFtZSI6InJvdXRpbmdfZGVjaXNpb24iLCJkZXNjcmlwdGlvbiI6IkEgZnVuY3Rpb24gYXZhaWxhYmxlIHRvIGNhbGwuIiwiaW5wdXRfc2NoZW1hIjp7InR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7InJlYXNvbmluZyI6eyJ0eXBlIjoic3RyaW5nIiwiZGVzY3JpcHRpb24iOiJPbmUgc2VudGVuY2UgZXhwbGFpbmluZyB3aHkgdGhpcyBhZ2VudCBzaG91bGQgYWN0IG5leHQifSwibmV4dCI6eyJ0eXBlIjoic3RyaW5nIiwiZW51bSI6WyJyZXNwb25kZXIiLCJkaXNjb3ZlcnkiLCJidWlsZGVyIiwiY29uZmlndXJhdG9yIl0sImRlc2NyaXB0aW9uIjoiVGhlIG5leHQgYWdlbnQgdG8gY2FsbCJ9fSwicmVxdWlyZWQiOlsicmVhc29uaW5nIiwibmV4dCJdLCJhZGRpdGlvbmFsUHJvcGVydGllcyI6ZmFsc2UsIiRzY2hlbWEiOiJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMifX1dLCJ0b29sX2Nob2ljZSI6eyJ0eXBlIjoidG9vbCIsIm5hbWUiOiJyb3V0aW5nX2RlY2lzaW9uIn0sInRoaW5raW5nIjp7InR5cGUiOiJkaXNhYmxlZCJ9LCJtZXNzYWdlcyI6W3sicm9sZSI6InVzZXIiLCJjb250ZW50IjoiQ3JlYXRlIGFuIGF1dG9tYXRpb24gdGhhdCBjaGVja3MgdGhlIHdlYXRoZXIgZm9yIG15IGxvY2F0aW9uIGV2ZXJ5IG1vcm5pbmcgYXQgNSBhLm0gdXNpbmcgT3BlbldlYXRoZXIuIFNlbmQgbWUgYSBzaG9ydCB3ZWF0aGVyIHJlcG9ydCBieSBlbWFpbCB1c2luZyBHbWFpbC4gVXNlIE9wZW5BSSBgZ3B0LTQuMS1taW5pYCB0byB3cml0ZSBhIHNob3J0LCBmdW4gZm9ybWF0dGVkIGVtYWlsIGJvZHkgYnkgYWRkaW5nIHBlcnNvbmFsaXR5IHdoZW4gZGVzY3JpYmluZyB0aGUgd2VhdGhlciBhbmQgaG93IHRoZSBkYXkgbWlnaHQgZmVlbC4gSW5jbHVkZSBhbGwgZGV0YWlscyByZWxldmFudCB0byBkZWNpZGUgb24gbXkgcGxhbnMgYW5kIGNsb3RoZXMgZm9yIHRoZSBkYXkuIn1dLCJzeXN0ZW0iOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ijxyb2xlPlxuWW91IGFyZSBhIFN1cGVydmlzb3IgdGhhdCByb3V0ZXMgdXNlciByZXF1ZXN0cyB0byBzcGVjaWFsaXN0IGFnZW50cy5cbjwvcm9sZT5cblxuPGF2YWlsYWJsZV9hZ2VudHM+XG4tIGRpc2NvdmVyeTogRmluZCBuOG4gbm9kZXMgZm9yIGJ1aWxkaW5nL21vZGlmeWluZyB3b3JrZmxvd3Ncbi0gYnVpbGRlcjogQ3JlYXRlIG5vZGVzIGFuZCBjb25uZWN0aW9ucyAocmVxdWlyZXMgZGlzY292ZXJ5IGZpcnN0IGZvciBuZXcgbm9kZSB0eXBlcylcbi0gY29uZmlndXJhdG9yOiBTZXQgcGFyYW1ldGVycyBvbiBFWElTVElORyBub2RlcyAobm8gc3RydWN0dXJhbCBjaGFuZ2VzKVxuLSByZXNwb25kZXI6IEFuc3dlciBxdWVzdGlvbnMsIGNvbmZpcm0gY29tcGxldGlvbiAoVEVSTUlOQUwpXG48L2F2YWlsYWJsZV9hZ2VudHM+XG5cbjxyb3V0aW5nX2RlY2lzaW9uX3RyZWU+XG4xLiBJcyB1c2VyIGFza2luZyBhIHF1ZXN0aW9uIG9yIGNoYXR0aW5nPyDihpIgcmVzcG9uZGVyXG4gICBFeGFtcGxlczogXCJ3aGF0IGRvZXMgdGhpcyBkbz9cIiwgXCJleHBsYWluIHRoZSB3b3JrZmxvd1wiLCBcInRoYW5rc1wiXG5cbjIuIERvZXMgdGhlIHJlcXVlc3QgaW52b2x2ZSBORVcgb3IgRElGRkVSRU5UIG5vZGUgdHlwZXM/IOKGkiBkaXNjb3ZlcnlcbiAgIEV4YW1wbGVzOlxuICAgLSBcIkJ1aWxkIGEgd29ya2Zsb3cgdGhhdC4uLlwiIChuZXcgd29ya2Zsb3cpXG4gICAtIFwiVXNlIFtTZXJ2aWNlQl0gaW5zdGVhZCBvZiBbU2VydmljZUFdXCIgKHJlcGxhY2luZyBub2RlIHR5cGUpXG4gICAtIFwiQWRkIFtzb21lIGludGVncmF0aW9uXVwiIChuZXcgaW50ZWdyYXRpb24pXG4gICAtIFwiU3dpdGNoIGZyb20gW1NlcnZpY2VBXSB0byBbU2VydmljZUJdXCIgKHN3YXBwaW5nIHNlcnZpY2VzKVxuXG4zLiBJcyB0aGUgcmVxdWVzdCBhYm91dCBjb25uZWN0aW5nL2Rpc2Nvbm5lY3RpbmcgZXhpc3Rpbmcgbm9kZXM/IOKGkiBidWlsZGVyXG4gICBFeGFtcGxlczogXCJDb25uZWN0IG5vZGUgQSB0byBub2RlIEJcIiwgXCJSZW1vdmUgdGhlIGNvbm5lY3Rpb24gdG8gWFwiXG5cbjQuIElzIHRoZSByZXF1ZXN0IGFib3V0IGNoYW5naW5nIFZBTFVFUyBpbiBleGlzdGluZyBub2Rlcz8g4oaSIGNvbmZpZ3VyYXRvclxuICAgRXhhbXBsZXM6XG4gICAtIFwiQ2hhbmdlIHRoZSBVUkwgdG8gaHR0cHM6Ly8uLi5cIlxuICAgLSBcIlNldCB0aGUgdGltZW91dCB0byAzMCBzZWNvbmRzXCJcbiAgIC0gXCJVcGRhdGUgdGhlIGVtYWlsIHN1YmplY3QgdG8uLi5cIlxuPC9yb3V0aW5nX2RlY2lzaW9uX3RyZWU+XG5cbjxrZXlfZGlzdGluY3Rpb24+XG4tIFwiVXNlIFtTZXJ2aWNlQl0gaW5zdGVhZCBvZiBbU2VydmljZUFdXCIgPSBSRVBMQUNFTUVOVCA9IGRpc2NvdmVyeSAobmV3IG5vZGUgdHlwZSBuZWVkZWQpXG4tIFwiQ2hhbmdlIHRoZSBbU2VydmljZUFdIEFQSSBrZXlcIiA9IENPTkZJR1VSQVRJT04gPSBjb25maWd1cmF0b3IgKHNhbWUgbm9kZSwgZGlmZmVyZW50IHZhbHVlKVxuPC9rZXlfZGlzdGluY3Rpb24+XG5cbjxvdXRwdXQ+XG4tIHJlYXNvbmluZzogT25lIHNlbnRlbmNlIGV4cGxhaW5pbmcgeW91ciByb3V0aW5nIGRlY2lzaW9uXG4tIG5leHQ6IEFnZW50IG5hbWVcbjwvb3V0cHV0PlxuXG48aW5zdHJ1Y3Rpb24+XG5HaXZlbiB0aGUgY29udmVyc2F0aW9uIGFib3ZlLCB3aGljaCBhZ2VudCBzaG91bGQgYWN0IG5leHQ/IFByb3ZpZGUgeW91ciByZWFzb25pbmcgYW5kIHNlbGVjdGlvbi5cbjwvaW5zdHJ1Y3Rpb24+IiwiY2FjaGVfY29udHJvbCI6eyJ0eXBlIjoiZXBoZW1lcmFsIn19XX0="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["3188"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CX3pLuuozzRcL5mMbhsPz"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-01-12T16:41:48Z"],
"anthropic-ratelimit-tokens-remaining": ["15499000"],
"anthropic-ratelimit-tokens-limit": ["15500000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-01-12T16:41:49Z"],
"anthropic-ratelimit-output-tokens-remaining": ["500000"],
"anthropic-ratelimit-output-tokens-limit": ["500000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-01-12T16:41:48Z"],
"anthropic-ratelimit-input-tokens-remaining": ["14999000"],
"anthropic-ratelimit-input-tokens-limit": ["15000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Mon, 12 Jan 2026 16:41:49 GMT"],
"Content-Type": ["application/json"],
"CF-RAY": ["9bce1a7009a8278c-PRG"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-sonnet-4-5-20250929",
"id": "msg_015gGoaENcqQ1xwWwrBPk3k7",
"type": "message",
"role": "assistant",
"content": [
{
"type": "tool_use",
"id": "toolu_01JwW5TB1ts9mom7aBDYPoLU",
"name": "routing_decision",
"input": {
"reasoning": "The user wants to build a new workflow with specific node types (OpenWeather, Gmail, OpenAI) that need to be discovered first.",
"next": "discovery"
}
}
],
"stop_reason": "tool_use",
"stop_sequence": null,
"usage": {
"input_tokens": 1259,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 0
},
"output_tokens": 78,
"service_tier": "standard"
}
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5IiwiaWQiOiJtc2dfMDE1Z0dvYUVOY3FRMXh3V3dyQlBrM2s3IiwidHlwZSI6Im1lc3NhZ2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMUp3VzVUQjF0czltb203YUJEWVBvTFUiLCJuYW1lIjoicm91dGluZ19kZWNpc2lvbiIsImlucHV0Ijp7InJlYXNvbmluZyI6IlRoZSB1c2VyIHdhbnRzIHRvIGJ1aWxkIGEgbmV3IHdvcmtmbG93IHdpdGggc3BlY2lmaWMgbm9kZSB0eXBlcyAoT3BlbldlYXRoZXIsIEdtYWlsLCBPcGVuQUkpIHRoYXQgbmVlZCB0byBiZSBkaXNjb3ZlcmVkIGZpcnN0LiIsIm5leHQiOiJkaXNjb3ZlcnkifX1dLCJzdG9wX3JlYXNvbiI6InRvb2xfdXNlIiwic3RvcF9zZXF1ZW5jZSI6bnVsbCwidXNhZ2UiOnsiaW5wdXRfdG9rZW5zIjoxMjU5LCJjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnMiOjAsImNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zIjowLCJjYWNoZV9jcmVhdGlvbiI6eyJlcGhlbWVyYWxfNW1faW5wdXRfdG9rZW5zIjowLCJlcGhlbWVyYWxfMWhfaW5wdXRfdG9rZW5zIjowfSwib3V0cHV0X3Rva2VucyI6NzgsInNlcnZpY2VfdGllciI6InN0YW5kYXJkIn19"
},
"delay": {
"timeUnit": "MILLISECONDS",
"value": 2000
}
},
"id": "1768236114974-unknown-host-POST-_v1_messages-4759b5e5.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,120 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-sonnet-4-5",
"temperature": 0,
"stream": false,
"max_tokens": 16000,
"tools": [
{
"name": "extract",
"description": "A function available to call.",
"input_schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 10,
"maxLength": 128,
"description": "Name of the workflow based on the prompt"
}
},
"required": ["name"],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
}
],
"tool_choice": {
"type": "tool",
"name": "extract"
},
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "<role>\nBased on the initial user prompt, please generate a name for the workflow that captures its essence and purpose\n</role>\n\n<initial_prompt>\nBuild an n8n workflow that automatically generates YouTube chapter timestamps from video captions. Use the n8n chat trigger for me to enter the URL of the YouTube video. Use the YouTube Get a video node to get the video title, description, and existing metadata. Use the YouTube Captions API to download the transcript for the given video ID. Send the transcript to AI agent using Anthropic's Claude model. Prompt the model to identify topic shifts and return structured output in timestamp - chapter format. Append the generated chapter list to the existing video description. Use the YouTube Update a video node to update the video description. Respond back with the updates using the respond to chat node.\n</initial_prompt>\n\n<output_rules>\nThis name should be concise, descriptive, and suitable for a workflow that automates tasks related to the given prompt. The name should be in a format that is easy to read and understand. Do not include the word \"workflow\" in the name.\n</output_rules>"
}
]
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1zb25uZXQtNC01IiwidGVtcGVyYXR1cmUiOjAsInN0cmVhbSI6ZmFsc2UsIm1heF90b2tlbnMiOjE2MDAwLCJ0b29scyI6W3sibmFtZSI6ImV4dHJhY3QiLCJkZXNjcmlwdGlvbiI6IkEgZnVuY3Rpb24gYXZhaWxhYmxlIHRvIGNhbGwuIiwiaW5wdXRfc2NoZW1hIjp7InR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7Im5hbWUiOnsidHlwZSI6InN0cmluZyIsIm1pbkxlbmd0aCI6MTAsIm1heExlbmd0aCI6MTI4LCJkZXNjcmlwdGlvbiI6Ik5hbWUgb2YgdGhlIHdvcmtmbG93IGJhc2VkIG9uIHRoZSBwcm9tcHQifX0sInJlcXVpcmVkIjpbIm5hbWUiXSwiYWRkaXRpb25hbFByb3BlcnRpZXMiOmZhbHNlLCIkc2NoZW1hIjoiaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEjIn19XSwidG9vbF9jaG9pY2UiOnsidHlwZSI6InRvb2wiLCJuYW1lIjoiZXh0cmFjdCJ9LCJ0aGlua2luZyI6eyJ0eXBlIjoiZGlzYWJsZWQifSwibWVzc2FnZXMiOlt7InJvbGUiOiJ1c2VyIiwiY29udGVudCI6Ijxyb2xlPlxuQmFzZWQgb24gdGhlIGluaXRpYWwgdXNlciBwcm9tcHQsIHBsZWFzZSBnZW5lcmF0ZSBhIG5hbWUgZm9yIHRoZSB3b3JrZmxvdyB0aGF0IGNhcHR1cmVzIGl0cyBlc3NlbmNlIGFuZCBwdXJwb3NlXG48L3JvbGU+XG5cbjxpbml0aWFsX3Byb21wdD5cbkJ1aWxkIGFuIG44biB3b3JrZmxvdyB0aGF0IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIFlvdVR1YmUgY2hhcHRlciB0aW1lc3RhbXBzIGZyb20gdmlkZW8gY2FwdGlvbnMuIFVzZSB0aGUgbjhuIGNoYXQgdHJpZ2dlciBmb3IgbWUgdG8gZW50ZXIgdGhlIFVSTCBvZiB0aGUgWW91VHViZSB2aWRlby4gVXNlIHRoZSBZb3VUdWJlIEdldCBhIHZpZGVvIG5vZGUgdG8gZ2V0IHRoZSB2aWRlbyB0aXRsZSwgZGVzY3JpcHRpb24sIGFuZCBleGlzdGluZyBtZXRhZGF0YS4gVXNlIHRoZSBZb3VUdWJlIENhcHRpb25zIEFQSSB0byBkb3dubG9hZCB0aGUgdHJhbnNjcmlwdCBmb3IgdGhlIGdpdmVuIHZpZGVvIElELiBTZW5kIHRoZSB0cmFuc2NyaXB0IHRvIEFJIGFnZW50IHVzaW5nIEFudGhyb3BpYydzIENsYXVkZSBtb2RlbC4gUHJvbXB0IHRoZSBtb2RlbCB0byBpZGVudGlmeSB0b3BpYyBzaGlmdHMgYW5kIHJldHVybiBzdHJ1Y3R1cmVkIG91dHB1dCBpbiB0aW1lc3RhbXAgLSBjaGFwdGVyIGZvcm1hdC4gQXBwZW5kIHRoZSBnZW5lcmF0ZWQgY2hhcHRlciBsaXN0IHRvIHRoZSBleGlzdGluZyB2aWRlbyBkZXNjcmlwdGlvbi4gVXNlIHRoZSBZb3VUdWJlIFVwZGF0ZSBhIHZpZGVvIG5vZGUgdG8gdXBkYXRlIHRoZSB2aWRlbyBkZXNjcmlwdGlvbi4gUmVzcG9uZCBiYWNrIHdpdGggdGhlIHVwZGF0ZXMgdXNpbmcgdGhlIHJlc3BvbmQgdG8gY2hhdCBub2RlLlxuPC9pbml0aWFsX3Byb21wdD5cblxuPG91dHB1dF9ydWxlcz5cblRoaXMgbmFtZSBzaG91bGQgYmUgY29uY2lzZSwgZGVzY3JpcHRpdmUsIGFuZCBzdWl0YWJsZSBmb3IgYSB3b3JrZmxvdyB0aGF0IGF1dG9tYXRlcyB0YXNrcyByZWxhdGVkIHRvIHRoZSBnaXZlbiBwcm9tcHQuIFRoZSBuYW1lIHNob3VsZCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIGVhc3kgdG8gcmVhZCBhbmQgdW5kZXJzdGFuZC4gRG8gbm90IGluY2x1ZGUgdGhlIHdvcmQgXCJ3b3JrZmxvd1wiIGluIHRoZSBuYW1lLlxuPC9vdXRwdXRfcnVsZXM+In1dfQ=="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["1916"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CX3pLit37ZZq59Hb2askd"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-01-12T16:41:45Z"],
"anthropic-ratelimit-tokens-remaining": ["15499000"],
"anthropic-ratelimit-tokens-limit": ["15500000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-01-12T16:41:45Z"],
"anthropic-ratelimit-output-tokens-remaining": ["499000"],
"anthropic-ratelimit-output-tokens-limit": ["500000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-01-12T16:41:45Z"],
"anthropic-ratelimit-input-tokens-remaining": ["15000000"],
"anthropic-ratelimit-input-tokens-limit": ["15000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Mon, 12 Jan 2026 16:41:45 GMT"],
"Content-Type": ["application/json"],
"CF-RAY": ["9bce1a5fe8342790-PRG"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-sonnet-4-5-20250929",
"id": "msg_01Nu38ya6N9u9FSX7FQR1T4E",
"type": "message",
"role": "assistant",
"content": [
{
"type": "tool_use",
"id": "toolu_01Bo6nfKaFCWVf9y8iVqtyR3",
"name": "extract",
"input": {
"name": "YouTube Video Chapter Generator from Captions with AI"
}
}
],
"stop_reason": "tool_use",
"stop_sequence": null,
"usage": {
"input_tokens": 950,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 0
},
"output_tokens": 42,
"service_tier": "standard"
}
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5IiwiaWQiOiJtc2dfMDFOdTM4eWE2Tjl1OUZTWDdGUVIxVDRFIiwidHlwZSI6Im1lc3NhZ2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMUJvNm5mS2FGQ1dWZjl5OGlWcXR5UjMiLCJuYW1lIjoiZXh0cmFjdCIsImlucHV0Ijp7Im5hbWUiOiJZb3VUdWJlIFZpZGVvIENoYXB0ZXIgR2VuZXJhdG9yIGZyb20gQ2FwdGlvbnMgd2l0aCBBSSJ9fV0sInN0b3BfcmVhc29uIjoidG9vbF91c2UiLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjk1MCwiY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zIjowLCJjYWNoZV9yZWFkX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfY3JlYXRpb24iOnsiZXBoZW1lcmFsXzVtX2lucHV0X3Rva2VucyI6MCwiZXBoZW1lcmFsXzFoX2lucHV0X3Rva2VucyI6MH0sIm91dHB1dF90b2tlbnMiOjQyLCJzZXJ2aWNlX3RpZXIiOiJzdGFuZGFyZCJ9fQ=="
},
"delay": {
"timeUnit": "MILLISECONDS",
"value": 2000
}
},
"id": "1768236115199-unknown-host-POST-_v1_messages-989b3528.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,133 @@
{
"httpRequest": {
"method": "POST",
"path": "/v1/messages",
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-sonnet-4-5",
"temperature": 0,
"stream": false,
"max_tokens": 16000,
"tools": [
{
"name": "routing_decision",
"description": "A function available to call.",
"input_schema": {
"type": "object",
"properties": {
"reasoning": {
"type": "string",
"description": "One sentence explaining why this agent should act next"
},
"next": {
"type": "string",
"enum": ["responder", "discovery", "builder", "configurator"],
"description": "The next agent to call"
}
},
"required": ["reasoning", "next"],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}
}
],
"tool_choice": {
"type": "tool",
"name": "routing_decision"
},
"thinking": {
"type": "disabled"
},
"messages": [
{
"role": "user",
"content": "Build an n8n workflow that automatically generates YouTube chapter timestamps from video captions. Use the n8n chat trigger for me to enter the URL of the YouTube video. Use the YouTube Get a video node to get the video title, description, and existing metadata. Use the YouTube Captions API to download the transcript for the given video ID. Send the transcript to AI agent using Anthropic's Claude model. Prompt the model to identify topic shifts and return structured output in timestamp - chapter format. Append the generated chapter list to the existing video description. Use the YouTube Update a video node to update the video description. Respond back with the updates using the respond to chat node."
}
],
"system": [
{
"type": "text",
"text": "<role>\nYou are a Supervisor that routes user requests to specialist agents.\n</role>\n\n<available_agents>\n- discovery: Find n8n nodes for building/modifying workflows\n- builder: Create nodes and connections (requires discovery first for new node types)\n- configurator: Set parameters on EXISTING nodes (no structural changes)\n- responder: Answer questions, confirm completion (TERMINAL)\n</available_agents>\n\n<routing_decision_tree>\n1. Is user asking a question or chatting? → responder\n Examples: \"what does this do?\", \"explain the workflow\", \"thanks\"\n\n2. Does the request involve NEW or DIFFERENT node types? → discovery\n Examples:\n - \"Build a workflow that...\" (new workflow)\n - \"Use [ServiceB] instead of [ServiceA]\" (replacing node type)\n - \"Add [some integration]\" (new integration)\n - \"Switch from [ServiceA] to [ServiceB]\" (swapping services)\n\n3. Is the request about connecting/disconnecting existing nodes? → builder\n Examples: \"Connect node A to node B\", \"Remove the connection to X\"\n\n4. Is the request about changing VALUES in existing nodes? → configurator\n Examples:\n - \"Change the URL to https://...\"\n - \"Set the timeout to 30 seconds\"\n - \"Update the email subject to...\"\n</routing_decision_tree>\n\n<key_distinction>\n- \"Use [ServiceB] instead of [ServiceA]\" = REPLACEMENT = discovery (new node type needed)\n- \"Change the [ServiceA] API key\" = CONFIGURATION = configurator (same node, different value)\n</key_distinction>\n\n<output>\n- reasoning: One sentence explaining your routing decision\n- next: Agent name\n</output>\n\n<instruction>\nGiven the conversation above, which agent should act next? Provide your reasoning and selection.\n</instruction>",
"cache_control": {
"type": "ephemeral"
}
}
]
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1zb25uZXQtNC01IiwidGVtcGVyYXR1cmUiOjAsInN0cmVhbSI6ZmFsc2UsIm1heF90b2tlbnMiOjE2MDAwLCJ0b29scyI6W3sibmFtZSI6InJvdXRpbmdfZGVjaXNpb24iLCJkZXNjcmlwdGlvbiI6IkEgZnVuY3Rpb24gYXZhaWxhYmxlIHRvIGNhbGwuIiwiaW5wdXRfc2NoZW1hIjp7InR5cGUiOiJvYmplY3QiLCJwcm9wZXJ0aWVzIjp7InJlYXNvbmluZyI6eyJ0eXBlIjoic3RyaW5nIiwiZGVzY3JpcHRpb24iOiJPbmUgc2VudGVuY2UgZXhwbGFpbmluZyB3aHkgdGhpcyBhZ2VudCBzaG91bGQgYWN0IG5leHQifSwibmV4dCI6eyJ0eXBlIjoic3RyaW5nIiwiZW51bSI6WyJyZXNwb25kZXIiLCJkaXNjb3ZlcnkiLCJidWlsZGVyIiwiY29uZmlndXJhdG9yIl0sImRlc2NyaXB0aW9uIjoiVGhlIG5leHQgYWdlbnQgdG8gY2FsbCJ9fSwicmVxdWlyZWQiOlsicmVhc29uaW5nIiwibmV4dCJdLCJhZGRpdGlvbmFsUHJvcGVydGllcyI6ZmFsc2UsIiRzY2hlbWEiOiJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSMifX1dLCJ0b29sX2Nob2ljZSI6eyJ0eXBlIjoidG9vbCIsIm5hbWUiOiJyb3V0aW5nX2RlY2lzaW9uIn0sInRoaW5raW5nIjp7InR5cGUiOiJkaXNhYmxlZCJ9LCJtZXNzYWdlcyI6W3sicm9sZSI6InVzZXIiLCJjb250ZW50IjoiQnVpbGQgYW4gbjhuIHdvcmtmbG93IHRoYXQgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgWW91VHViZSBjaGFwdGVyIHRpbWVzdGFtcHMgZnJvbSB2aWRlbyBjYXB0aW9ucy4gVXNlIHRoZSBuOG4gY2hhdCB0cmlnZ2VyIGZvciBtZSB0byBlbnRlciB0aGUgVVJMIG9mIHRoZSBZb3VUdWJlIHZpZGVvLiBVc2UgdGhlIFlvdVR1YmUgR2V0IGEgdmlkZW8gbm9kZSB0byBnZXQgdGhlIHZpZGVvIHRpdGxlLCBkZXNjcmlwdGlvbiwgYW5kIGV4aXN0aW5nIG1ldGFkYXRhLiBVc2UgdGhlIFlvdVR1YmUgQ2FwdGlvbnMgQVBJIHRvIGRvd25sb2FkIHRoZSB0cmFuc2NyaXB0IGZvciB0aGUgZ2l2ZW4gdmlkZW8gSUQuIFNlbmQgdGhlIHRyYW5zY3JpcHQgdG8gQUkgYWdlbnQgdXNpbmcgQW50aHJvcGljJ3MgQ2xhdWRlIG1vZGVsLiBQcm9tcHQgdGhlIG1vZGVsIHRvIGlkZW50aWZ5IHRvcGljIHNoaWZ0cyBhbmQgcmV0dXJuIHN0cnVjdHVyZWQgb3V0cHV0IGluIHRpbWVzdGFtcCAtIGNoYXB0ZXIgZm9ybWF0LiBBcHBlbmQgdGhlIGdlbmVyYXRlZCBjaGFwdGVyIGxpc3QgdG8gdGhlIGV4aXN0aW5nIHZpZGVvIGRlc2NyaXB0aW9uLiBVc2UgdGhlIFlvdVR1YmUgVXBkYXRlIGEgdmlkZW8gbm9kZSB0byB1cGRhdGUgdGhlIHZpZGVvIGRlc2NyaXB0aW9uLiBSZXNwb25kIGJhY2sgd2l0aCB0aGUgdXBkYXRlcyB1c2luZyB0aGUgcmVzcG9uZCB0byBjaGF0IG5vZGUuIn1dLCJzeXN0ZW0iOlt7InR5cGUiOiJ0ZXh0IiwidGV4dCI6Ijxyb2xlPlxuWW91IGFyZSBhIFN1cGVydmlzb3IgdGhhdCByb3V0ZXMgdXNlciByZXF1ZXN0cyB0byBzcGVjaWFsaXN0IGFnZW50cy5cbjwvcm9sZT5cblxuPGF2YWlsYWJsZV9hZ2VudHM+XG4tIGRpc2NvdmVyeTogRmluZCBuOG4gbm9kZXMgZm9yIGJ1aWxkaW5nL21vZGlmeWluZyB3b3JrZmxvd3Ncbi0gYnVpbGRlcjogQ3JlYXRlIG5vZGVzIGFuZCBjb25uZWN0aW9ucyAocmVxdWlyZXMgZGlzY292ZXJ5IGZpcnN0IGZvciBuZXcgbm9kZSB0eXBlcylcbi0gY29uZmlndXJhdG9yOiBTZXQgcGFyYW1ldGVycyBvbiBFWElTVElORyBub2RlcyAobm8gc3RydWN0dXJhbCBjaGFuZ2VzKVxuLSByZXNwb25kZXI6IEFuc3dlciBxdWVzdGlvbnMsIGNvbmZpcm0gY29tcGxldGlvbiAoVEVSTUlOQUwpXG48L2F2YWlsYWJsZV9hZ2VudHM+XG5cbjxyb3V0aW5nX2RlY2lzaW9uX3RyZWU+XG4xLiBJcyB1c2VyIGFza2luZyBhIHF1ZXN0aW9uIG9yIGNoYXR0aW5nPyDihpIgcmVzcG9uZGVyXG4gICBFeGFtcGxlczogXCJ3aGF0IGRvZXMgdGhpcyBkbz9cIiwgXCJleHBsYWluIHRoZSB3b3JrZmxvd1wiLCBcInRoYW5rc1wiXG5cbjIuIERvZXMgdGhlIHJlcXVlc3QgaW52b2x2ZSBORVcgb3IgRElGRkVSRU5UIG5vZGUgdHlwZXM/IOKGkiBkaXNjb3ZlcnlcbiAgIEV4YW1wbGVzOlxuICAgLSBcIkJ1aWxkIGEgd29ya2Zsb3cgdGhhdC4uLlwiIChuZXcgd29ya2Zsb3cpXG4gICAtIFwiVXNlIFtTZXJ2aWNlQl0gaW5zdGVhZCBvZiBbU2VydmljZUFdXCIgKHJlcGxhY2luZyBub2RlIHR5cGUpXG4gICAtIFwiQWRkIFtzb21lIGludGVncmF0aW9uXVwiIChuZXcgaW50ZWdyYXRpb24pXG4gICAtIFwiU3dpdGNoIGZyb20gW1NlcnZpY2VBXSB0byBbU2VydmljZUJdXCIgKHN3YXBwaW5nIHNlcnZpY2VzKVxuXG4zLiBJcyB0aGUgcmVxdWVzdCBhYm91dCBjb25uZWN0aW5nL2Rpc2Nvbm5lY3RpbmcgZXhpc3Rpbmcgbm9kZXM/IOKGkiBidWlsZGVyXG4gICBFeGFtcGxlczogXCJDb25uZWN0IG5vZGUgQSB0byBub2RlIEJcIiwgXCJSZW1vdmUgdGhlIGNvbm5lY3Rpb24gdG8gWFwiXG5cbjQuIElzIHRoZSByZXF1ZXN0IGFib3V0IGNoYW5naW5nIFZBTFVFUyBpbiBleGlzdGluZyBub2Rlcz8g4oaSIGNvbmZpZ3VyYXRvclxuICAgRXhhbXBsZXM6XG4gICAtIFwiQ2hhbmdlIHRoZSBVUkwgdG8gaHR0cHM6Ly8uLi5cIlxuICAgLSBcIlNldCB0aGUgdGltZW91dCB0byAzMCBzZWNvbmRzXCJcbiAgIC0gXCJVcGRhdGUgdGhlIGVtYWlsIHN1YmplY3QgdG8uLi5cIlxuPC9yb3V0aW5nX2RlY2lzaW9uX3RyZWU+XG5cbjxrZXlfZGlzdGluY3Rpb24+XG4tIFwiVXNlIFtTZXJ2aWNlQl0gaW5zdGVhZCBvZiBbU2VydmljZUFdXCIgPSBSRVBMQUNFTUVOVCA9IGRpc2NvdmVyeSAobmV3IG5vZGUgdHlwZSBuZWVkZWQpXG4tIFwiQ2hhbmdlIHRoZSBbU2VydmljZUFdIEFQSSBrZXlcIiA9IENPTkZJR1VSQVRJT04gPSBjb25maWd1cmF0b3IgKHNhbWUgbm9kZSwgZGlmZmVyZW50IHZhbHVlKVxuPC9rZXlfZGlzdGluY3Rpb24+XG5cbjxvdXRwdXQ+XG4tIHJlYXNvbmluZzogT25lIHNlbnRlbmNlIGV4cGxhaW5pbmcgeW91ciByb3V0aW5nIGRlY2lzaW9uXG4tIG5leHQ6IEFnZW50IG5hbWVcbjwvb3V0cHV0PlxuXG48aW5zdHJ1Y3Rpb24+XG5HaXZlbiB0aGUgY29udmVyc2F0aW9uIGFib3ZlLCB3aGljaCBhZ2VudCBzaG91bGQgYWN0IG5leHQ/IFByb3ZpZGUgeW91ciByZWFzb25pbmcgYW5kIHNlbGVjdGlvbi5cbjwvaW5zdHJ1Y3Rpb24+IiwiY2FjaGVfY29udHJvbCI6eyJ0eXBlIjoiZXBoZW1lcmFsIn19XX0="
}
},
"httpResponse": {
"statusCode": 200,
"reasonPhrase": "OK",
"headers": {
"x-envoy-upstream-service-time": ["2843"],
"strict-transport-security": ["max-age=31536000; includeSubDomains; preload"],
"request-id": ["req_011CX3pLt4SQ9iEyt7WZJ7mo"],
"cf-cache-status": ["DYNAMIC"],
"anthropic-ratelimit-tokens-reset": ["2026-01-12T16:41:47Z"],
"anthropic-ratelimit-tokens-remaining": ["15499000"],
"anthropic-ratelimit-tokens-limit": ["15500000"],
"anthropic-ratelimit-output-tokens-reset": ["2026-01-12T16:41:48Z"],
"anthropic-ratelimit-output-tokens-remaining": ["500000"],
"anthropic-ratelimit-output-tokens-limit": ["500000"],
"anthropic-ratelimit-input-tokens-reset": ["2026-01-12T16:41:47Z"],
"anthropic-ratelimit-input-tokens-remaining": ["14999000"],
"anthropic-ratelimit-input-tokens-limit": ["15000000"],
"X-Robots-Tag": ["none"],
"Server": ["cloudflare"],
"Date": ["Mon, 12 Jan 2026 16:41:48 GMT"],
"Content-Type": ["application/json"],
"CF-RAY": ["9bce1a6d5c25f971-PRG"]
},
"body": {
"contentType": "application/json",
"type": "JSON",
"json": {
"model": "claude-sonnet-4-5-20250929",
"id": "msg_014nQU1xG4xPk35B7mLso9tf",
"type": "message",
"role": "assistant",
"content": [
{
"type": "tool_use",
"id": "toolu_01WuNQTJkBWqtWv9tmZ7YWXr",
"name": "routing_decision",
"input": {
"reasoning": "The user is requesting to build a new workflow with specific node types (n8n chat trigger, YouTube nodes, Anthropic Claude, respond to chat), which requires discovering the appropriate nodes first.",
"next": "discovery"
}
}
],
"stop_reason": "tool_use",
"stop_sequence": null,
"usage": {
"input_tokens": 1313,
"cache_creation_input_tokens": 0,
"cache_read_input_tokens": 0,
"cache_creation": {
"ephemeral_5m_input_tokens": 0,
"ephemeral_1h_input_tokens": 0
},
"output_tokens": 88,
"service_tier": "standard"
}
},
"rawBytes": "eyJtb2RlbCI6ImNsYXVkZS1zb25uZXQtNC01LTIwMjUwOTI5IiwiaWQiOiJtc2dfMDE0blFVMXhHNHhQazM1QjdtTHNvOXRmIiwidHlwZSI6Im1lc3NhZ2UiLCJyb2xlIjoiYXNzaXN0YW50IiwiY29udGVudCI6W3sidHlwZSI6InRvb2xfdXNlIiwiaWQiOiJ0b29sdV8wMVd1TlFUSmtCV3F0V3Y5dG1aN1lXWHIiLCJuYW1lIjoicm91dGluZ19kZWNpc2lvbiIsImlucHV0Ijp7InJlYXNvbmluZyI6IlRoZSB1c2VyIGlzIHJlcXVlc3RpbmcgdG8gYnVpbGQgYSBuZXcgd29ya2Zsb3cgd2l0aCBzcGVjaWZpYyBub2RlIHR5cGVzIChuOG4gY2hhdCB0cmlnZ2VyLCBZb3VUdWJlIG5vZGVzLCBBbnRocm9waWMgQ2xhdWRlLCByZXNwb25kIHRvIGNoYXQpLCB3aGljaCByZXF1aXJlcyBkaXNjb3ZlcmluZyB0aGUgYXBwcm9wcmlhdGUgbm9kZXMgZmlyc3QuIiwibmV4dCI6ImRpc2NvdmVyeSJ9fV0sInN0b3BfcmVhc29uIjoidG9vbF91c2UiLCJzdG9wX3NlcXVlbmNlIjpudWxsLCJ1c2FnZSI6eyJpbnB1dF90b2tlbnMiOjEzMTMsImNhY2hlX2NyZWF0aW9uX2lucHV0X3Rva2VucyI6MCwiY2FjaGVfcmVhZF9pbnB1dF90b2tlbnMiOjAsImNhY2hlX2NyZWF0aW9uIjp7ImVwaGVtZXJhbF81bV9pbnB1dF90b2tlbnMiOjAsImVwaGVtZXJhbF8xaF9pbnB1dF90b2tlbnMiOjB9LCJvdXRwdXRfdG9rZW5zIjo4OCwic2VydmljZV90aWVyIjoic3RhbmRhcmQifX0="
},
"delay": {
"timeUnit": "MILLISECONDS",
"value": 2000
}
},
"id": "1768236115212-unknown-host-POST-_v1_messages-2bb8783c.json",
"priority": 0,
"timeToLive": {
"unlimited": true
},
"times": {
"unlimited": true
}
}
@@ -0,0 +1,42 @@
var File = function(url, object){
File.list = Array.isArray(File.list)? File.list : [];
File.progress = File.progress || 0;
this.progress = 0;
this.object = object;
this.url = url;
};
File.indexOf = function(term){
for(var index in File.list){
var file = File.list[index];
if (file.equals(term) || file.url === term || file.object === term) {
return index;
}
}
return -1;
};
File.find = function(term){
var index = File.indexOf(term);
return ~index && File.list[index];
};
File.prototype.equals = function(file){
var isFileType = file instanceof File;
return isFileType && this.url === file.url && this.object === file.object;
};
File.prototype.save = function(update){
update = typeof update === 'undefined'? true : update;
if(Array.isArray(File.list)){
var index = File.indexOf(this);
if(~index && update) {
File.list[index] = this;
console.warn('File `%s` has been loaded before and updated now for: %O.', this.url, this);
}else File.list.push(this);
console.log(File.list)
}else{
File.list = [this];
}
return this;
};
@@ -0,0 +1,61 @@
{
"name": "Test workflow 1",
"nodes": [
{
"parameters": {},
"id": "a2f85497-260d-4489-a957-2b7d88e2f33d",
"name": "On clicking 'execute'",
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [220, 260]
},
{
"parameters": {
"jsCode": "// Loop over input items and add a new field\n// called 'myNewField' to the JSON of each one\nfor (const item of $input.all()) {\n item.json.myNewField = 1;\n}\n\nreturn $input.all();"
},
"id": "9493d278-1ede-47c9-bedf-92ac3a737c65",
"name": "Code",
"type": "n8n-nodes-base.code",
"typeVersion": 1,
"position": [400, 260]
}
],
"pinData": {},
"connections": {
"On clicking 'execute'": {
"main": [
[
{
"node": "Code",
"type": "main",
"index": 0
}
]
]
},
"Code": {
"main": [[]]
}
},
"active": false,
"settings": {},
"hash": "a59c7b1c97b1741597afae0fcd43ebef",
"id": 3,
"meta": {
"instanceId": "a5280676597d00ecd0ea712da7f9cf2ce90174a791a309112731f6e44d162f35"
},
"tags": [
{
"name": "some-tag-1",
"createdAt": "2022-11-10T13:43:34.001Z",
"updatedAt": "2022-11-10T13:43:34.001Z",
"id": "6"
},
{
"name": "some-tag-2",
"createdAt": "2022-11-10T13:43:39.778Z",
"updatedAt": "2022-11-10T13:43:39.778Z",
"id": "7"
}
]
}
@@ -0,0 +1,83 @@
{
"name": "My workflow 8",
"nodes": [
{
"parameters": {
"operation": "getAllPeople",
"limit": 10
},
"id": "39cd80ce-5a8f-4339-b3d5-c4af969dd330",
"name": "Customer Datastore (n8n training)",
"type": "n8n-nodes-base.n8nTrainingCustomerDatastore",
"typeVersion": 1,
"position": [940, 680]
},
{
"parameters": {
"values": {
"number": [
{
"name": "objectValue.prop1",
"value": 123
}
],
"string": [
{
"name": "objectValue.prop2",
"value": "someText"
}
]
},
"options": {
"dotNotation": true
}
},
"id": "6e4490f6-ba95-4400-beec-2caefdd4895a",
"name": "Set",
"type": "n8n-nodes-base.set",
"typeVersion": 1,
"position": [1300, 680]
},
{
"parameters": {},
"id": "58512a93-dabf-4584-817f-27c608c1bdd5",
"name": "When clicking Execute workflow",
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [720, 680]
}
],
"pinData": {},
"connections": {
"Customer Datastore (n8n training)": {
"main": [
[
{
"node": "Set",
"type": "main",
"index": 0
}
]
]
},
"When clicking Execute workflow": {
"main": [
[
{
"node": "Customer Datastore (n8n training)",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {},
"versionId": "4a4f292a-92be-427c-848a-9582527f5ed3",
"id": "8",
"meta": {
"instanceId": "032eceae7493054b723340499be69ecbf4cbe28a7ec6df676b759000750b968d"
},
"tags": []
}
@@ -0,0 +1,300 @@
import type { CurrentsFixtures, CurrentsWorkerFixtures } from '@currents/playwright';
import { fixtures as currentsFixtures } from '@currents/playwright';
import { test as base, expect, request } from '@playwright/test';
import type { ServiceHelpers } from 'n8n-containers/services/types';
import type { N8NConfig, N8NStack } from 'n8n-containers/stack';
import { createN8NStack } from 'n8n-containers/stack';
import { CAPABILITIES, type Capability } from './capabilities';
import { consoleErrorFixtures } from './console-error-monitor';
import { N8N_AUTH_COOKIE } from '../config/constants';
import { setupDefaultInterceptors } from '../config/intercepts';
import { observabilityFixtures, type ObservabilityTestFixtures } from '../fixtures/observability';
import { n8nPage } from '../pages/n8nPage';
import { ApiHelpers } from '../services/api-helper';
import { TestError, type TestRequirements } from '../Types';
import { setupTestRequirements } from '../utils/requirements';
import { getBackendUrl, getFrontendUrl } from '../utils/url-helper';
type TestFixtures = {
n8n: n8nPage;
api: ApiHelpers;
baseURL: string;
setupRequirements: (requirements: TestRequirements) => Promise<void>;
/** Type-safe service helpers (mailpit, gitea, proxy, observability, etc.) */
services: ServiceHelpers;
/**
* Direct URLs to each main instance (bypasses load balancer).
* Only available in container mode with multi-main setup.
* Index 0 = main-1, Index 1 = main-2, etc.
*/
mainUrls: string[];
/**
* Create an API helper for a specific main instance (bypasses load balancer).
* Useful for multi-main testing scenarios.
* @param mainIndex - 0-based index of the main (0 = main-1, 1 = main-2, etc.)
*/
createApiForMain: (mainIndex: number) => Promise<ApiHelpers>;
};
type WorkerFixtures = {
n8nUrl: string;
backendUrl: string;
frontendUrl: string;
dbSetup: undefined;
n8nContainer: N8NStack;
capability?: CapabilityOption;
};
type CapabilityOption = Capability | N8NConfig;
type ProjectUse = { containerConfig?: N8NConfig };
export const test = base.extend<
TestFixtures & CurrentsFixtures & ObservabilityTestFixtures,
WorkerFixtures & CurrentsWorkerFixtures
>({
...currentsFixtures.baseFixtures,
...currentsFixtures.coverageFixtures,
...currentsFixtures.actionFixtures,
...observabilityFixtures,
...consoleErrorFixtures,
// Option for test.use({ capability: 'proxy' }) - transformed into N8NStack by n8nContainer
capability: [undefined, { scope: 'worker', option: true }],
// Creates container from: project.containerConfig (base) + capability (override)
// When N8N_BASE_URL is set, skips container creation for local testing
n8nContainer: [
async ({ capability }, use, workerInfo) => {
if (getBackendUrl()) {
await use(null!);
return;
}
const { containerConfig: base = {} } = workerInfo.project.use as ProjectUse;
const override: N8NConfig = !capability
? {}
: typeof capability === 'string'
? CAPABILITIES[capability]
: capability;
const config: N8NConfig = {
...base,
...override,
services: [...new Set([...(base.services ?? []), ...(override.services ?? [])])],
env: { ...base.env, ...override.env, E2E_TESTS: 'true', N8N_RESTRICT_FILE_ACCESS_TO: '' },
};
const container = await createN8NStack(config);
await use(container);
if (process.env.N8N_CONTAINERS_KEEPALIVE === 'true') {
console.log('\n=== KEEPALIVE: Containers left running for debugging ===');
console.log(` URL: ${container.baseUrl}`);
console.log(` Project: ${container.projectName}`);
console.log(' Cleanup: pnpm --filter n8n-containers stack:clean:all');
console.log('=========================================================\n');
return;
}
await container.stop();
},
{ scope: 'worker', box: true },
],
n8nUrl: [
async ({ n8nContainer }, use) => {
const envBaseURL = process.env.N8N_BASE_URL ?? n8nContainer?.baseUrl;
await use(envBaseURL);
},
{ scope: 'worker' },
],
backendUrl: [
async ({ n8nContainer }, use) => {
const envBackendURL = getBackendUrl() ?? n8nContainer?.baseUrl;
await use(envBackendURL);
},
{ scope: 'worker' },
],
frontendUrl: [
async ({ n8nContainer }, use) => {
const envFrontendURL = getFrontendUrl() ?? n8nContainer?.baseUrl;
await use(envFrontendURL);
},
{ scope: 'worker' },
],
dbSetup: [
async ({ n8nContainer }, use) => {
if (n8nContainer) {
console.log('Resetting database for new container');
const apiContext = await request.newContext({ baseURL: n8nContainer.baseUrl });
const api = new ApiHelpers(apiContext);
await api.resetDatabase();
await apiContext.dispose();
}
await use(undefined);
},
{ scope: 'worker' },
],
baseURL: async ({ frontendUrl, dbSetup }, use) => {
void dbSetup; // Ensure dbSetup runs first
await use(frontendUrl);
},
n8n: async ({ context, backendUrl, frontendUrl }, use, testInfo) => {
await setupDefaultInterceptors(context);
const page = await context.newPage();
// Set debounce multiplier for E2E tests - 1 means normal timing (no change)
// Can be lowered (e.g. 0.5) to speed up tests, but avoid 0 as it causes race conditions
await page.addInitScript(() => {
sessionStorage.setItem('N8N_DEBOUNCE_MULTIPLIER', '1');
});
const useSeparateApiContext = backendUrl !== frontendUrl;
if (useSeparateApiContext) {
const apiContext = await request.newContext({ baseURL: backendUrl });
const api = new ApiHelpers(apiContext);
const n8nInstance = new n8nPage(page, api);
await n8nInstance.api.setupFromTags(testInfo.tags);
// Auth: no tag = owner, @auth:none = unauthenticated, @auth:member etc = specific role
const hasAuthTag = testInfo.tags.some((tag) => tag.startsWith('@auth:'));
let apiCookies = await apiContext.storageState();
let authCookie = apiCookies.cookies.find((cookie) => cookie.name === N8N_AUTH_COOKIE);
if (!hasAuthTag && !authCookie) {
await api.signin('owner');
apiCookies = await apiContext.storageState();
authCookie = apiCookies.cookies.find((cookie) => cookie.name === N8N_AUTH_COOKIE);
}
// Transfer auth cookie from API context (backend) to browser context (frontend)
if (authCookie) {
const backendUrlParsed = new URL(backendUrl);
const frontendUrlParsed = new URL(frontendUrl);
if (backendUrlParsed.hostname === frontendUrlParsed.hostname) {
await context.addCookies([
{
...authCookie,
domain: frontendUrlParsed.hostname,
path: '/',
sameSite: 'Lax',
},
]);
} else {
await context.addCookies([
{
name: authCookie.name,
value: authCookie.value,
url: frontendUrl,
path: '/',
httpOnly: authCookie.httpOnly,
secure: authCookie.secure,
sameSite: 'Lax',
},
]);
}
}
await n8nInstance.start.withProjectFeatures();
await use(n8nInstance);
await apiContext.dispose();
} else {
const n8nInstance = new n8nPage(page);
await n8nInstance.api.setupFromTags(testInfo.tags);
await n8nInstance.start.withProjectFeatures();
await use(n8nInstance);
}
},
api: async ({ backendUrl }, use, testInfo) => {
const context = await request.newContext({ baseURL: backendUrl });
const api = new ApiHelpers(context);
await api.setupFromTags(testInfo.tags);
const hasAuthTag = testInfo.tags.some((tag) => tag.startsWith('@auth:'));
const apiCookies = await context.storageState();
const authCookie = apiCookies.cookies.find((cookie) => cookie.name === N8N_AUTH_COOKIE);
if (!hasAuthTag && !authCookie) {
await api.signin('owner');
}
await use(api);
await context.dispose();
},
mainUrls: async ({ n8nContainer }, use) => {
const urls = n8nContainer?.mainUrls ?? [];
await use(urls);
},
createApiForMain: async ({ n8nContainer }, use, testInfo) => {
const contexts: Array<{ dispose: () => Promise<void> }> = [];
const createApi = async (mainIndex: number): Promise<ApiHelpers> => {
const mainUrls = n8nContainer?.mainUrls ?? [];
if (mainIndex < 0 || mainIndex >= mainUrls.length) {
throw new TestError(
`Invalid main index ${mainIndex}. Available mains: ${mainUrls.length}. ` +
'Ensure you are running in multi-main container mode.',
);
}
const context = await request.newContext({ baseURL: mainUrls[mainIndex] });
contexts.push(context);
const api = new ApiHelpers(context);
await api.setupFromTags(testInfo.tags.filter((tag) => tag.toLowerCase() !== '@db:reset'));
const hasAuthTag = testInfo.tags.some((tag) => tag.startsWith('@auth:'));
const apiCookies = await context.storageState();
const authCookie = apiCookies.cookies.find((cookie) => cookie.name === N8N_AUTH_COOKIE);
if (!hasAuthTag && !authCookie) {
await api.signin('owner');
}
return api;
};
await use(createApi);
// Cleanup all created contexts
for (const ctx of contexts) {
await ctx.dispose();
}
},
setupRequirements: async ({ n8n, context }, use) => {
const setupFunction = async (requirements: TestRequirements): Promise<void> => {
await setupTestRequirements(n8n, context, requirements);
};
await use(setupFunction);
},
services: async ({ n8nContainer }, use) => {
await use(n8nContainer.services);
},
});
export { expect };
/*
Fixture Dependency Graph:
Worker: capability + project.containerConfig n8nContainer [backendUrl, frontendUrl, dbSetup]
Test: frontendUrl + dbSetup baseURL n8n (uses backendUrl for API calls)
backendUrl api
n8nContainer services
services: Type-safe helpers (mailpit, gitea, proxy, observability, etc.)
n8nContainer: Container lifecycle (stop, containers, mainUrls, etc.)
*/
@@ -0,0 +1,53 @@
import type { N8NConfig } from 'n8n-containers/stack';
/**
* Capability definitions for `test.use({ capability: 'email' })`.
* Add `@capability:X` tag to tests for orchestration grouping.
*
* Maps capability names to service registry keys.
* Note: task-runner is always enabled, no capability needed.
*/
export const CAPABILITIES = {
email: { services: ['mailpit'] },
proxy: { services: ['proxy'] },
'source-control': { services: ['gitea'] },
oidc: { services: ['keycloak'] },
observability: { services: ['victoriaLogs', 'victoriaMetrics', 'vector'] },
kafka: { services: ['kafka'] },
'external-secrets': {
services: ['localstack'],
env: {
// Enable project-scoped external secrets feature at startup
// (required for secret-providers-connections API)
N8N_ENV_FEAT_EXTERNAL_SECRETS_FOR_PROJECTS: 'true',
},
},
kent: { services: ['kent'] },
'dynamic-credentials': {
services: ['keycloak'],
env: {
N8N_ENV_FEAT_DYNAMIC_CREDENTIALS: 'true',
// Static token required to allow unauthenticated (external) requests to dynamic credential endpoints
N8N_DYNAMIC_CREDENTIALS_ENDPOINT_AUTH_TOKEN: 'e2e-test-endpoint-token',
},
},
} as const satisfies Record<string, Partial<N8NConfig>>;
export type Capability = keyof typeof CAPABILITIES;
/**
* Infrastructure modes (`@mode:X` tags). Most tests run against ALL modes via projects.
* Use @mode:X only for tests requiring specific infrastructure.
*/
export const INFRASTRUCTURE_MODES = ['postgres', 'queue', 'multi-main'] as const;
/**
* Tests requiring enterprise license features (`@licensed` tag).
* These tests only run in container mode where a license file is available.
* Use for tests that interact with enterprise-only API endpoints (log streaming, SSO, etc.)
*/
export const LICENSED_TAG = 'licensed';
// Used by playwright-projects.ts to filter container-only tests in local mode
export const CONTAINER_ONLY_CAPABILITIES = Object.keys(CAPABILITIES) as Capability[];
export const CONTAINER_ONLY_MODES = INFRASTRUCTURE_MODES;
@@ -0,0 +1,82 @@
import type { BrowserContext, ConsoleMessage, TestInfo } from '@playwright/test';
interface ConsoleError {
type: string;
text: string;
location: string;
timestamp: number;
}
/**
* Monitors browser context for console errors.
* Attaches diagnostic info to test results when errors occur.
* No-op when no errors are detected.
*/
class ConsoleErrorMonitor {
private errors: ConsoleError[] = [];
private readonly listener = (message: ConsoleMessage) => {
if (message.type() === 'error') {
this.errors.push({
type: message.type(),
text: message.text(),
location: message.location().url,
timestamp: Date.now(),
});
}
};
attach(context: BrowserContext): void {
context.on('console', this.listener);
}
detach(context: BrowserContext): void {
context.off('console', this.listener);
}
hasErrors(): boolean {
return this.errors.length > 0;
}
getErrors(): ConsoleError[] {
return this.errors;
}
}
/**
* Console error monitor fixtures for capturing browser errors.
* Spread into test.extend() to enable monitoring.
*/
export const consoleErrorFixtures = {
_consoleErrorMonitor: [
async (
{ context }: { context: BrowserContext },
use: (monitor: ConsoleErrorMonitor) => Promise<void>,
testInfo: TestInfo,
) => {
const monitor = new ConsoleErrorMonitor();
monitor.attach(context);
await use(monitor);
monitor.detach(context);
// Attach diagnostics if errors occurred
if (monitor.hasErrors()) {
await testInfo.attach('console-errors', {
body: JSON.stringify(
{
errors: monitor.getErrors(),
testTitle: testInfo.title,
project: testInfo.project.name,
},
null,
2,
),
contentType: 'application/json',
});
}
},
{ auto: true },
],
};
File diff suppressed because one or more lines are too long
@@ -0,0 +1,103 @@
import type { Fixtures, TestInfo } from '@playwright/test';
import type { N8NStack } from 'n8n-containers/stack';
export type ObservabilityTestFixtures = {
autoAttachLogs: undefined;
};
export type ObservabilityWorkerFixtures = {
n8nContainer: N8NStack;
};
async function attachLogsOnFailure(
stack: N8NStack,
testInfo: TestInfo,
options: { lookbackMinutes?: number } = {},
): Promise<void> {
const obs = stack.services?.observability;
if (!obs) return;
const lookback = options.lookbackMinutes ?? 5;
try {
const logs = await obs.logs.query('*', {
limit: 10000,
start: `${lookback}m`,
});
if (logs.length === 0) return;
const groupedLogs = logs.reduce<Record<string, typeof logs>>((acc, log) => {
const container = log.container_name ?? 'unknown';
acc[container] ??= [];
acc[container].push(log);
return acc;
}, {});
for (const containerLogs of Object.values(groupedLogs)) {
containerLogs.sort((a, b) => (a._time ?? '').localeCompare(b._time ?? ''));
}
const formattedLogs = Object.entries(groupedLogs)
.sort(([a], [b]) => a.localeCompare(b))
.map(([container, containerLogs]) => {
const logLines = containerLogs.map((log) => `[${log._time}] ${log.message}`).join('\n');
return `=== ${container} ===\n${logLines}`;
})
.join('\n\n');
await testInfo.attach('container-logs', {
body: formattedLogs,
contentType: 'text/plain',
});
const jsonLinesExport = logs.map((log) => JSON.stringify(log)).join('\n');
await testInfo.attach('victoria-logs-export.jsonl', {
body: jsonLinesExport,
contentType: 'application/x-ndjson',
});
} catch (error) {
console.warn('Failed to collect container logs:', error);
}
}
async function attachMetricsOnFailure(stack: N8NStack, testInfo: TestInfo): Promise<void> {
const obs = stack.services?.observability;
if (!obs) return;
try {
const metricsExport = await obs.metrics.exportAll();
if (!metricsExport.trim()) return;
await testInfo.attach('victoria-metrics-export.jsonl', {
body: metricsExport,
contentType: 'application/x-ndjson',
});
} catch (error) {
console.warn('Failed to export metrics:', error);
}
}
/**
* Auto-attaches container logs and metrics on test failure.
* Import exports locally with scripts/import-victoria-data.mjs
*/
export const observabilityFixtures: Fixtures<
ObservabilityTestFixtures,
ObservabilityWorkerFixtures
> = {
autoAttachLogs: [
async ({ n8nContainer }, use, testInfo) => {
await use(undefined);
if (testInfo.status !== testInfo.expectedStatus && n8nContainer?.services?.observability) {
await Promise.all([
attachLogsOnFailure(n8nContainer, testInfo),
attachMetricsOnFailure(n8nContainer, testInfo),
]);
}
},
{ auto: true },
],
};
@@ -0,0 +1,35 @@
{
"id": 200,
"planId": 1,
"pruneExecutionsInterval": 168,
"monthlyExecutionsLimit": 1000,
"activeWorkflowsLimit": 20,
"credentialsLimit": 100,
"supportTier": "community",
"displayName": "Trial",
"userIsTrialing": true,
"enabledFeatures": ["userManagement", "advancedExecutionFilters", "sharing"],
"licenseFeatures": {
"feat:sharing": true,
"feat:advancedExecutionFilters": true,
"feat:apiDisabled": true,
"quota:users": -1,
"quota:maxVariables": -1,
"feat:variables": true
},
"metadata": {
"version": "v1",
"group": "trial",
"slug": "trial-2",
"trial": {
"length": 14,
"gracePeriod": 3
}
},
"bannerConfig": {
"timeLeft": {},
"showExecutions": true,
"dismissible": true
},
"expirationDate": "2023-08-30T15:47:27.611Z"
}
@@ -0,0 +1,45 @@
import { request } from '@playwright/test';
import { ApiHelpers } from './services/api-helper';
import { getBackendUrl } from './utils/url-helper';
async function globalSetup() {
console.log('🚀 Starting global setup...');
// Check if backend URL is set (N8N_BACKEND_URL or N8N_BASE_URL)
const n8nBaseUrl = getBackendUrl();
if (!n8nBaseUrl) {
console.log('⚠️ N8N_BASE_URL environment variable is not set, skipping database reset');
return;
}
const resetE2eDb = process.env.RESET_E2E_DB;
if (resetE2eDb !== 'true') {
console.log('⚠️ RESET_E2E_DB is not set to "true", skipping database reset');
return;
}
console.log(`🔄 Resetting database for ${n8nBaseUrl}...`);
// Quick hack till we find out a better health check for the database reset command!
await new Promise((resolve) => setTimeout(resolve, 3000));
// Create standalone API request context
const requestContext = await request.newContext({
baseURL: n8nBaseUrl,
});
try {
const api = new ApiHelpers(requestContext);
await api.resetDatabase();
console.log('✅ Database reset completed successfully');
} catch (error) {
console.error('❌ Failed to reset database', error);
throw error; // This will fail the entire test suite if database reset fails
} finally {
await requestContext.dispose();
}
console.log('🏁 Global setup completed');
}
// eslint-disable-next-line import-x/no-default-export
export default globalSetup;
@@ -0,0 +1,27 @@
import { execSync } from 'child_process';
function globalTeardown() {
console.log('🧹 Starting global teardown...');
const ports = [5678, 8080];
for (const port of ports) {
try {
// Find process ID using the port
const pid = execSync(`lsof -ti :${port}`, { encoding: 'utf-8' }).trim();
if (pid) {
console.log(`- Killing process ${pid} on port ${port}`);
execSync(`kill -9 ${pid}`);
}
} catch (error) {
// lsof returns non-zero exit code if no process is found
console.log(`- No process found on port ${port}`);
}
}
console.log('🏁 Global teardown completed');
}
// eslint-disable-next-line import-x/no-default-export
export default globalTeardown;
@@ -0,0 +1,49 @@
import type { Page } from '@playwright/test';
export class ClipboardHelper {
constructor(private readonly page: Page) {}
/**
* Grant clipboard permissions
* @param mode - Permission mode: 'read', 'write', or 'readwrite' (default)
*/
async grant(mode: 'read' | 'write' | 'readwrite' = 'readwrite'): Promise<void> {
let permissions = ['clipboard-read', 'clipboard-write'];
if (mode === 'read') {
permissions = ['clipboard-read'];
} else if (mode === 'write') {
permissions = ['clipboard-write'];
}
await this.page.context().grantPermissions(permissions);
}
/**
* Write text to clipboard using page.evaluate.
* @param text - The text to write to clipboard
*/
async writeText(text: string): Promise<void> {
await this.page.evaluate(async (data) => {
await navigator.clipboard.writeText(data);
}, text);
}
/**
* Write text to clipboard and simulate paste keyboard action.
* @param text - The text to write to clipboard and paste
*/
async paste(text: string): Promise<void> {
await this.grant();
await this.writeText(text);
await this.page.keyboard.press('ControlOrMeta+V');
}
/**
* Read text from clipboard using page.evaluate.
* @returns The text from clipboard
*/
async readText(): Promise<string> {
return await this.page.evaluate(() => navigator.clipboard.readText());
}
}
@@ -0,0 +1,235 @@
import type { Page } from '@playwright/test';
/**
* NavigationHelper provides centralized navigation methods for all n8n routes.
* Handles both project-specific and global routes with proper URL construction.
*
* URLs are documented to help users understand where they're navigating:
* - Home workflows: /home/workflows
* - Project workflows: /projects/{projectId}/workflows
* - Variables: /variables (global only, no project scope)
* - Settings: /settings (global only)
* - Credentials: /home/credentials or /projects/{projectId}/credentials
* - Executions: /home/executions or /projects/{projectId}/executions
*/
export class NavigationHelper {
constructor(private page: Page) {}
/**
* Navigate to the home dashboard
* URL: /home
*/
async toHome(): Promise<void> {
await this.page.goto('/home');
}
/**
* Navigate to workflows page
* URLs:
* - Home workflows: /home/workflows
* - Project workflows: /projects/{projectId}/workflows
*/
async toWorkflows(projectId?: string): Promise<void> {
const url = projectId ? `/projects/${projectId}/workflows` : '/home/workflows';
await this.page.goto(url);
}
/**
* Navigate to credentials page
* URLs:
* - Home credentials: /home/credentials
* - Project credentials: /projects/{projectId}/credentials
*/
async toCredentials(projectId?: string): Promise<void> {
const url = projectId ? `/projects/${projectId}/credentials` : '/home/credentials';
await this.page.goto(url);
}
async toDatatables(projectId?: string): Promise<void> {
const url = projectId ? `/projects/${projectId}/datatables` : '/home/datatables';
await this.page.goto(url);
}
/**
* Navigate to variables page (global only)
* URL: /variables
* Note: Variables are global and don't have project-specific scoping
*/
async toVariables(): Promise<void> {
await this.page.goto('/variables');
}
/**
* Navigate to personal settings
* URL: /settings/personal
*/
async toPersonalSettings(): Promise<void> {
await this.page.goto('/settings/personal');
}
/**
* Navigate to a specific project's dashboard
* URL: /projects/{projectId}
*/
async toProject(projectId: string): Promise<void> {
await this.page.goto(`/projects/${projectId}`);
}
/**
* Navigate to project settings
* URL: /projects/{projectId}/settings
*/
async toProjectSettings(projectId: string): Promise<void> {
await this.page.goto(`/projects/${projectId}/settings`);
}
/**
* Navigate to a specific workflow
* URLs:
* - New workflow: /workflow/new
* - Existing workflow: /workflow/{workflowId}
* - Project workflow: /projects/{projectId}/workflow/{workflowId}
*/
async toWorkflow(workflowId: string = 'new'): Promise<void> {
const url = `/workflow/${workflowId}`;
await this.page.goto(url);
}
/**
* Navigate to a specific folder
* URL: /projects/{projectId}/folders/{folderId}/workflows or /home/folders/{folderId}/workflows
*/
async toFolder(folderId: string, projectId?: string): Promise<void> {
const url = projectId
? `/projects/${projectId}/folders/${folderId}/workflows`
: `/home/folders/${folderId}/workflows`;
await this.page.goto(url);
}
/**
* Navigate to workflow canvas (alias for toWorkflow)
*/
async toCanvas(workflowId: string = 'new'): Promise<void> {
await this.toWorkflow(workflowId);
}
/**
* Navigate to templates page
* URL: /templates
*/
async toTemplates(): Promise<void> {
await this.page.goto('/templates');
}
/**
* Navigate to a specific template
* URL: /templates/{templateId}
*/
async toTemplate(templateId: string): Promise<void> {
await this.page.goto(`/templates/${templateId}`);
}
/**
* Navigate to template onboarding flow
* URL: /workflows/onboarding/{templateId}
*/
async toOnboardingTemplate(templateId: string): Promise<void> {
await this.page.goto(`/workflows/onboarding/${templateId}`);
}
/**
* Navigate to template import flow
* URL: /workflows/templates/{templateId}
*/
async toTemplateImport(templateId: string): Promise<void> {
await this.page.goto(`/workflows/templates/${templateId}`);
}
/**
* Navigate to a template collection page
* URL: /collections/{collectionId}
*/
async toTemplateCollection(collectionId: number): Promise<void> {
await this.page.goto(`/collections/${collectionId}`);
}
/**
* Navigate to template credential setup page
* URL: /templates/{templateId}/setup
*/
async toTemplateCredentialSetup(templateId: number): Promise<void> {
await this.page.goto(`/templates/${templateId}/setup`);
}
/**
* Navigate to community nodes
* URL: /settings/community-nodes
*/
async toCommunityNodes(): Promise<void> {
await this.page.goto('/settings/community-nodes');
}
/**
* Navigate to log streaming settings
* URL: /settings/log-streaming
*/
async toLogStreaming(): Promise<void> {
await this.page.goto('/settings/log-streaming');
}
/**
* Navigate to users management
* URL: /settings/users
*/
async toUsers(): Promise<void> {
await this.page.goto('/settings/users');
}
/**
* Navigate to API settings
* URL: /settings/api
*/
async toApiSettings(): Promise<void> {
await this.page.goto('/settings/api');
}
/**
* Navigate to environments settings
* URL: /settings/environments
*/
async toEnvironments(): Promise<void> {
await this.page.goto('/settings/environments');
}
/**
* Navigate to settings page
* URL: /settings/chat
*/
async toChatHubSettings(): Promise<void> {
await this.page.goto('/settings/chat');
}
/**
* Navigate to ChatHub chat page
* URL: /home/chat
*/
async toChatHub() {
await this.page.goto('/home/chat');
}
/**
* Navigate to ChatHub personal agent list
* URL: /home/chat/personal-agents
*/
async toChatHubPersonalAgents() {
await this.page.goto('/home/chat/personal-agents');
}
/**
* Navigate to ChatHub workflow agent list
* URL: /home/chat/workflow-agents
*/
async toChatHubWorkflowAgents() {
await this.page.goto('/home/chat/workflow-agents');
}
}
@@ -0,0 +1,108 @@
import type { NodeDetailsViewPage } from '../pages/NodeDetailsViewPage';
/**
* Helper class for setting node parameters in the NDV
*/
export class NodeParameterHelper {
constructor(private ndv: NodeDetailsViewPage) {}
/**
* Detects parameter type by checking DOM structure
* Supports dropdown, text, and switch parameters
* @param parameterName - The parameter name to check
* @returns The detected parameter type
*/
async detectParameterType(parameterName: string): Promise<'dropdown' | 'text' | 'switch'> {
const parameterContainer = this.ndv.getParameterInput(parameterName);
const [hasSwitch, hasSelect, hasSelectCaret] = await Promise.all([
parameterContainer
.locator('.el-switch')
.count()
.then((count) => count > 0),
parameterContainer
.locator('.el-select')
.count()
.then((count) => count > 0),
parameterContainer
.locator('.el-select__caret')
.count()
.then((count) => count > 0),
]);
if (hasSwitch) return 'switch';
if (hasSelect && hasSelectCaret) return 'dropdown';
return 'text';
}
/**
* Sets a parameter value with automatic type detection or explicit type
* Supports dropdown, text, and switch parameters
* @param parameterName - Name of the parameter to set
* @param value - Value to set (string or boolean)
* @param type - Optional explicit type to skip detection for better performance
*/
async setParameter(
parameterName: string,
value: string | boolean,
type?: 'dropdown' | 'text' | 'switch',
): Promise<void> {
if (typeof value === 'boolean') {
await this.ndv.setParameterSwitch(parameterName, value);
return;
}
const parameterType = type ?? (await this.detectParameterType(parameterName));
switch (parameterType) {
case 'dropdown':
await this.ndv.setParameterDropdown(parameterName, value);
break;
case 'text':
await this.ndv.setParameterInput(parameterName, value);
await this.ndv.waitForDebounce();
break;
case 'switch':
await this.ndv.setParameterSwitch(parameterName, value === 'true');
break;
}
}
async webhook(config: {
httpMethod?: string;
path?: string;
authentication?: string;
responseMode?: string;
}): Promise<void> {
if (config.httpMethod !== undefined)
await this.setParameter('httpMethod', config.httpMethod, 'dropdown');
if (config.path !== undefined) await this.setParameter('path', config.path, 'text');
if (config.authentication !== undefined)
await this.setParameter('authentication', config.authentication, 'dropdown');
if (config.responseMode !== undefined)
await this.setParameter('responseMode', config.responseMode, 'dropdown');
}
async getWebhookPath(): Promise<string> {
const input = this.ndv.getParameterInputField('path');
return await input.inputValue();
}
async httpRequest(config: {
method?: string;
url?: string;
authentication?: string;
sendQuery?: boolean;
sendHeaders?: boolean;
sendBody?: boolean;
}): Promise<void> {
if (config.method !== undefined) await this.setParameter('method', config.method, 'dropdown');
if (config.url !== undefined) await this.setParameter('url', config.url, 'text');
if (config.authentication !== undefined)
await this.setParameter('authentication', config.authentication, 'dropdown');
if (config.sendQuery !== undefined)
await this.setParameter('sendQuery', config.sendQuery, 'switch');
if (config.sendHeaders !== undefined)
await this.setParameter('sendHeaders', config.sendHeaders, 'switch');
if (config.sendBody !== undefined)
await this.setParameter('sendBody', config.sendBody, 'switch');
}
}

Some files were not shown because too many files have changed in this diff Show More