API Reference
Interactive OpenAPI 3.1 reference for the MemHQ API.
Authorization
ApiKey Project API key. Issued via the dashboard. Pass in the
Authorization header as Bearer mem_<key>. Keys are hashed
at rest; the raw value is shown exactly once at creation.
In: header
Header Parameters
Client-supplied correlation id. Echoed in the response and logged with every server-side event. Generated by the server if omitted.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/memhq/add" \ -H "Content-Type: application/json" \ -d '{ "user_id": "usr_001", "messages": [ { "role": "user", "content": "I prefer dark roast coffee." } ] }'{ "user_id": "usr_001", "internal_user_id": "u_3a7e1c", "thread_id": "th_88aa01", "messages_stored": 1, "memories_queued": 1}Authorization
ApiKey Project API key. Issued via the dashboard. Pass in the
Authorization header as Bearer mem_<key>. Keys are hashed
at rest; the raw value is shown exactly once at creation.
In: header
Header Parameters
Client-supplied correlation id. Echoed in the response and logged with every server-side event. Generated by the server if omitted.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/memhq/search" \ -H "Content-Type: application/json" \ -d '{ "query": "dark roast", "user_id": "usr_001", "limit": 5 }'{ "results": [ { "id": "mem_xyz789", "content": "User prefers dark roast coffee.", "type": "PREFERENCE", "score": 0.81, "confidence": 0.92 } ], "total": 1, "latency_ms": 142, "query": "dark roast"}Authorization
ApiKey Project API key. Issued via the dashboard. Pass in the
Authorization header as Bearer mem_<key>. Keys are hashed
at rest; the raw value is shown exactly once at creation.
In: header
Header Parameters
Client-supplied correlation id. Echoed in the response and logged with every server-side event. Generated by the server if omitted.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/memhq/ask" \ -H "Content-Type: application/json" \ -d '{ "question": "What kind of coffee does this user like?", "user_id": "usr_001" }'{ "answer": "The user prefers dark roast coffee.", "citations": [ { "id": "mem_xyz789", "content": "User prefers dark roast coffee.", "type": "PREFERENCE" } ], "question_mode": "factoid", "refused": false, "latency_ms": 538}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/dashboard/projects"{ "projects": [ { "id": "prj_abc123", "tag": "acme-prod", "name": "Acme Production", "description": "Production memory store.", "region": "us-east-1", "plan": "pro", "createdAt": "2026-04-12T09:00:00Z", "stats": { "memories": 4821, "chunks": 1932, "apiKeys": 3, "users": 412 } } ]}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/v1/dashboard/projects" \ -H "Content-Type: application/json" \ -d '{ "tag": "acme-prod", "name": "Acme Production", "description": "Production memory store." }'{ "id": "string", "tag": "string", "name": "string", "description": "string", "apiKey": "string", "apiKeyHint": "string", "createdAt": "2019-08-24T14:15:22Z"}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/dashboard/projects/string"{ "id": "string", "tag": "string", "name": "string", "description": "string", "region": "string", "plan": "string", "createdAt": "2019-08-24T14:15:22Z", "stats": { "memories": 0, "chunks": 0, "apiKeys": 0, "users": 0 }}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
1 <= propertiesResponse Body
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/v1/dashboard/projects/string" \ -H "Content-Type: application/json" \ -d '{ "name": "Acme Production (EU)" }'{ "id": "string", "tag": "string", "name": "string", "description": "string", "region": "string", "plan": "string", "createdAt": "2019-08-24T14:15:22Z", "stats": { "memories": 0, "chunks": 0, "apiKeys": 0, "users": 0 }}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X DELETE "https://example.com/v1/dashboard/projects/string"{ "deleted": true, "id": "string"}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/dashboard/projects/string/api-keys"{ "apiKeys": [ { "id": "string", "name": "string", "scope": "admin", "lastUsedAt": "2019-08-24T14:15:22Z", "expiresAt": "2019-08-24T14:15:22Z", "createdAt": "2019-08-24T14:15:22Z" } ]}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/dashboard/projects/string/api-keys" \ -H "Content-Type: application/json" \ -d '{ "name": "ci-worker", "scope": "writer" }'{ "id": "string", "name": "string", "scope": "admin", "apiKey": "string", "createdAt": "2019-08-24T14:15:22Z"}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X DELETE "https://example.com/v1/dashboard/projects/string/api-keys/string"{ "deleted": true, "id": "string"}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/dashboard/projects/string/usage"{ "period": "string", "project": { "id": "string", "memories": 0, "ingests": 0, "chunks": 0 }, "entitlements": { "plan": "string", "ingestLimit": 0, "retrievalLimit": 0, "currentPeriodEnd": "2019-08-24T14:15:22Z" }, "recentJobs": [ { "id": "string", "status": "pending", "sourceType": "string", "chunksCreated": 0, "memoriesCreated": 0, "edgesCreated": 0, "createdAt": "2019-08-24T14:15:22Z", "startedAt": "2019-08-24T14:15:22Z", "finishedAt": "2019-08-24T14:15:22Z", "errorMessage": "string" } ]}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/usage"{ "organizationId": "string", "period": "string", "current": { "organizationId": "string", "period": "string", "memoriesIngested": 0, "retrievalCalls": 0, "extractionCalls": 0 }, "history": [ { "organizationId": "string", "period": "string", "memoriesIngested": 0, "retrievalCalls": 0, "extractionCalls": 0 } ]}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/subscription"{ "subscription": { "id": "string", "organizationId": "string", "planCode": "string", "status": "active", "currentPeriodEnd": "2019-08-24T14:15:22Z", "cancelAtPeriodEnd": true, "trialEnd": "2019-08-24T14:15:22Z" }}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/dashboard/billing/checkout" \ -H "Content-Type: application/json" \ -d '{ "planCode": "startup", "billingCycle": "monthly", "successUrl": "https://memhq.ai/app/billing?success=1", "cancelUrl": "https://memhq.ai/app/billing?cancel=1" }'{ "url": "http://example.com", "sessionId": "string"}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/dashboard/billing/portal" \ -H "Content-Type: application/json" \ -d '{ "returnUrl": "https://app.memhq.ai/billing" }'{ "url": "http://example.com"}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/billing/subscription"{ "organizationId": "string", "plan": "string", "status": "string", "currentPeriodEnd": "2019-08-24T14:15:22Z", "cancelAtPeriodEnd": true, "trialEnd": "2019-08-24T14:15:22Z", "usageThisPeriod": { "period": "string", "memoriesIngested": 0, "extractionCalls": 0 }}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/dashboard/ingest" \ -H "Content-Type: application/json" \ -d '{ "projectId": "prj_abc123", "content": "The user upgraded to the annual plan today." }'{ "project": { "id": "string", "tag": "string", "name": "string" }, "jobId": "string", "status": "string"}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/dashboard/search" \ -H "Content-Type: application/json" \ -d '{ "query": "string" }'{ "project": { "id": "string", "tag": "string", "name": "string" }, "query": "string", "latencyMs": 0, "count": 0, "results": [ { "id": "string", "content": "string", "type": "FACT", "score": 0.1, "confidence": 0.1 } ]}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/dashboard/ask" \ -H "Content-Type: application/json" \ -d '{ "question": "string" }'{ "project": { "id": "string", "tag": "string", "name": "string" }, "latencyMs": 0, "answer": "string", "citations": [ { "id": "string", "content": "string", "type": "string" } ]}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Query Parameters
Project id to scope the query to. When omitted, the most-recently-created project in the active organization is used.
Case-insensitive substring filter on memory content.
Value in
- "FACT"
- "EVENT"
- "PREFERENCE"
- "DECISION"
- "STATE"
- "RELATIONSHIP"
- "BELIEF"
- "SKILL"
- "GOAL"
Maximum number of rows to return (page size).
1 <= value <= 10025Number of rows to skip (offset pagination).
0 <= value0Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/memories"{ "project": { "id": "string", "tag": "string", "name": "string" }, "memories": [ { "id": "string", "type": "FACT", "content": "string", "confidence": 0.1, "isActive": true, "supersededBy": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "validFrom": "2019-08-24T14:15:22Z", "validUntil": "2019-08-24T14:15:22Z", "documentDate": "2019-08-24T14:15:22Z", "graph": { "id": "string", "kind": "GROUP", "groupName": "string", "userId": "string" } } ], "total": 0, "typeCounts": [ { "type": "string", "count": 0 } ]}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/dashboard/memories/string"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Query Parameters
Project id to scope the query to. When omitted, the most-recently-created project in the active organization is used.
Search filter against externalId, first name, last name, or email (case-insensitive substring).
Maximum number of rows to return (page size).
1 <= value <= 10025Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/users"{ "project": { "id": "string", "tag": "string", "name": "string" }, "users": [ { "id": "string", "externalId": "string", "firstName": "string", "lastName": "string", "email": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "threadCount": 0, "memoryCount": 0 } ], "total": 0, "active30d": 0}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/dashboard/users/string"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Query Parameters
Project id to scope the query to. When omitted, the most-recently-created project in the active organization is used.
Maximum number of rows to return (page size).
1 <= value <= 10025Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/threads"{ "project": { "id": "string", "tag": "string", "name": "string" }, "threads": [ { "id": "string", "name": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "user": { "id": "string", "externalId": "string", "firstName": "string", "lastName": "string" }, "messageCount": 0, "lastMessage": { "role": "string", "content": "string", "createdAt": "2019-08-24T14:15:22Z" } } ], "total": 0, "active24h": 0, "ownerCount": 0}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/dashboard/threads/string"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Query Parameters
Project id to scope the query to. When omitted, the most-recently-created project in the active organization is used.
Maximum number of rows to return (page size).
1 <= value <= 10025Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/entities"{ "project": { "id": "string", "tag": "string", "name": "string" }, "entities": [ { "id": "string", "name": "string", "type": "string", "createdAt": "2019-08-24T14:15:22Z", "relationCount": 0 } ], "totals": { "entities": 0, "relations": 0 }}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/dashboard/entities/string"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Query Parameters
Project id to scope the query to. When omitted, the most-recently-created project in the active organization is used.
Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/groups"{ "project": { "id": "string", "tag": "string", "name": "string" }, "groups": [ { "id": "string", "name": "string", "description": "string", "createdAt": "2019-08-24T14:15:22Z", "memberCount": 0, "memoryCount": 0 } ], "total": 0, "totalAcls": 0}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/dashboard/groups/string"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Query Parameters
Project id to scope the query to. When omitted, the most-recently-created project in the active organization is used.
Value in
- "PENDING"
- "RUNNING"
- "DONE"
- "FAILED"
Maximum number of rows to return (page size).
1 <= value <= 10025Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/jobs"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/dashboard/jobs/string"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/v1/dashboard/jobs/string/retry"{ "originalJobId": "string", "newJobId": "string", "status": "string"}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Query Parameters
Project id to scope the query to. When omitted, the most-recently-created project in the active organization is used.
Maximum number of results to return.
1 <= value <= 20050Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/graph"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Query Parameters
Project id to scope the query to. When omitted, the most-recently-created project in the active organization is used.
When true, only unresolved conflicts. When false, only resolved.
Value in
- "true"
- "false"
Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/conflicts"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/dashboard/conflicts/string"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/v1/dashboard/conflicts/string/resolve" \ -H "Content-Type: application/json" \ -d '{ "action": "confirm" }'{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Query Parameters
Project id to scope the query to. When omitted, the most-recently-created project in the active organization is used.
Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/audit"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Path Parameters
Response Body
application/json
application/json
curl -X GET "https://example.com/v1/dashboard/audit/string"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Query Parameters
Project id to scope the query to. When omitted, the most-recently-created project in the active organization is used.
Response Body
application/json
curl -X POST "https://example.com/v1/dashboard/audit/verify"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Query Parameters
Project id to scope the query to. When omitted, the most-recently-created project in the active organization is used.
Maximum number of rows to return (page size).
1 <= value <= 10025Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/timeline"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/observability"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/analytics"{}Authorization
ClerkJWT Clerk-issued JWT containing the calling user's account id and
the active organization id. Used for every /v1/dashboard/*
endpoint.
In: header
Query Parameters
Project id to scope the query to. When omitted, the most-recently-created project in the active organization is used.
Response Body
application/json
curl -X GET "https://example.com/v1/dashboard/ontology"{}Response Body
application/json
curl -X GET "https://example.com/v1/billing/plans"{ "plans": [ { "code": "string", "displayName": "string", "priceMonthly": 0, "limits": { "ingestPerMonth": 0, "retrievalPerMonth": 0 } } ]}Authorization
ApiKey Project API key. Issued via the dashboard. Pass in the
Authorization header as Bearer mem_<key>. Keys are hashed
at rest; the raw value is shown exactly once at creation.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/v1/connectors/webhook/ingest" \ -H "Content-Type: application/json" \ -d '{ "content": "string", "signature": "string" }'{ "status": "string", "jobId": "string"}Authorization
SvixSignature Clerk webhook signature. The svix-id, svix-timestamp, and
svix-signature headers together authenticate the request.
Timestamps older than five minutes are rejected to defeat
replay.
In: header
Header Parameters
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Raw Clerk event payload.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/webhooks/clerk" \ -H "svix-id: string" \ -H "svix-timestamp: string" \ -H "Content-Type: application/json" \ -d '{}'{ "received": true, "type": "string", "idempotent": true}Authorization
StripeSignature Stripe-issued HMAC signature over the raw request body, of the
form t=<unix>,v1=<hex>. Verified against
STRIPE_WEBHOOK_SECRET.
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Raw Stripe event payload.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/webhooks/stripe" \ -H "Content-Type: application/json" \ -d '{}'{ "received": true, "type": "string", "idempotent": true}Response Body
application/json
curl -X GET "https://example.com/v1/health"{ "status": "ok", "version": "1.0.0", "timestamp": "2026-05-29T12:00:00Z", "plugins": { "connectors": [ "webhook" ], "filters": [ "pii-redactor" ], "auth": "clerk" }}