Referencia de API
Descripción general
Esta página documenta el contrato actual de agente de IA externo para Flashcards.
Comience desde el punto de entrada del descubrimiento canónico:
GET https://api.flashcards-open-source-app.com/v1/
La misma carga útil de descubrimiento también está disponible en GET /v1/agent, pero /v1/ es el punto de entrada público principal.
La respuesta de descubrimiento le dice al agente cómo:
- iniciar sesión OTP por correo electrónico
- intercambiar la OTP por una clave API de larga duración
- cargar el contexto de la cuenta
- crear o seleccionar un espacio de trabajo
- continuar a través de la superficie SQL publicada
Especificaciones publicadas
URL de especificaciones principales para la superficie del agente externo:
https://api.flashcards-open-source-app.com/v1/agent/openapi.jsonhttps://api.flashcards-open-source-app.com/v1/agent/swagger.json
También existen alias de raíz equivalentes:
https://api.flashcards-open-source-app.com/v1/openapi.jsonhttps://api.flashcards-open-source-app.com/v1/swagger.json
Arranque de autenticación
El arranque OTP se ejecuta en el servicio de autenticación:
POST https://auth.flashcards-open-source-app.com/api/agent/send-codePOST https://auth.flashcards-open-source-app.com/api/agent/verify-code
El flujo es:
- Llama a
GET /v1/. - Envíe el correo electrónico del usuario a
send-code. - Lea
otpSessionTokende la respuesta. - Solicite al usuario el último código de correo electrónico de 8 dígitos.
- Llame a
verify-codeconcode,otpSessionTokenylabel. - Conserve la clave API devuelta fuera de la memoria del chat.
Variable de entorno recomendada:
export FLASHCARDS_OPEN_SOURCE_API_KEY="fca_ABCDEFGH_0123456789ABCDEFGHJKMNPQRS"
Las solicitudes autenticadas utilizan:
Authorization: ApiKey <key>
Secuencia de arranque de ejemplo:
curl https://api.flashcards-open-source-app.com/v1/
curl -X POST https://auth.flashcards-open-source-app.com/api/agent/send-code \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com"}'
curl -X POST https://auth.flashcards-open-source-app.com/api/agent/verify-code \
-H "Content-Type: application/json" \
-d '{
"code":"12345678",
"otpSessionToken":"...",
"label":"Codex on MacBook"
}'
Superficie del agente posterior al inicio de sesión
Después de la verificación, la superficie actual del agente es:
GET /v1/agent/meGET /v1/agent/workspacesPOST /v1/agent/workspacesPOST /v1/agent/workspaces/{workspaceId}/selectPOST /v1/agent/sql/query(solo lectura)POST /v1/agent/sql/execute(escritura)
El bootstrap típico se ve así:
GET /v1/agent/meGET /v1/agent/workspaces?limit=100- Si es necesario,
POST /v1/agent/workspacescon{"name":"Personal"} - Si es necesario,
POST /v1/agent/workspaces/{workspaceId}/select - Utilice
POST /v1/agent/sql/querypara lecturas yPOST /v1/agent/sql/executepara escrituras
La selección del espacio de trabajo es explícita por conexión de clave API. Los agentes deben seguir el texto instructions devuelto y el campo docs.openapiUrl de cada sobre en lugar de adivinar el siguiente paso.
Superficie SQL
POST /v1/agent/sql/query es la superficie estrictamente de solo lectura (SHOW TABLES, DESCRIBE, SELECT) y POST /v1/agent/sql/execute es la superficie de escritura (INSERT, UPDATE, DELETE); una sola llamada debe ser totalmente de lectura o totalmente de escritura.
Está intencionalmente limitado y no es PostgreSQL completo. Esta documentación cubre solo el dialecto compatible, no una referencia de compatibilidad con PostgreSQL.
Ninguna ruta de lectura repara datos, recalcula la programación ni cambia el
estado de las tarjetas. Use POST /v1/agent/sql/execute para toda escritura.
Familias de declaraciones actuales:
SHOW TABLESDESCRIBE <resource>SELECTINSERTUPDATEDELETE
Los recursos lógicos publicados actualmente incluyen:
workspacecardsdecksreview_events
Notas:
LIMITpor defecto es100y tiene un límite de100- use
ORDER BYcuando necesite una paginación estable - utilice
SHOW TABLESoDESCRIBE cardspara el descubrimiento de esquemas - el contrato de agente externo tiene un alcance de espacio de trabajo después de la selección
Solicitud de ejemplo:
curl -X POST https://api.flashcards-open-source-app.com/v1/agent/sql/query \
-H "Content-Type: application/json" \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY" \
-d '{"sql":"SHOW TABLES"}'
Ejemplo de consulta de tarjeta:
curl -X POST https://api.flashcards-open-source-app.com/v1/agent/sql/query \
-H "Content-Type: application/json" \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY" \
-d '{
"sql":"SELECT card_id, front_text, back_text, tags FROM cards ORDER BY updated_at DESC LIMIT 20 OFFSET 0"
}'
Mutación de ejemplo:
curl -X POST https://api.flashcards-open-source-app.com/v1/agent/sql/execute \
-H "Content-Type: application/json" \
-H "Authorization: ApiKey $FLASHCARDS_OPEN_SOURCE_API_KEY" \
-d '{
"sql":"UPDATE cards SET back_text = '\''Updated answer'\'' WHERE card_id = '\''50b5b928-7f04-4cc8-878d-6cd0e8b98474'\''"
}'
También hay disponible un servidor MCP remoto en https://mcp.flashcards-open-source-app.com/mcp que usa OAuth 2.1 (Dynamic Client Registration + PKCE). Expone la misma división como dos herramientas, sql_query (estrictamente de solo lectura) y sql_execute (escritura), además de list_workspaces, estrictamente de solo lectura.
Seguridad y alcance
La superficie SQL es un dialecto contenido y validado por el analizador, no PostgreSQL en bruto. Las protecciones son:
- Lista de instrucciones cerrada: solo
SHOW TABLES,DESCRIBE,SHOW COLUMNSySELECTpara lecturas, eINSERT,UPDATEyDELETEpara escrituras. Cualquier otra cosa se rechaza en el análisis. - Recursos limitados: las instrucciones solo pueden tocar los recursos
workspace,cards,decksyreview_events. - Alcance por espacio de trabajo: cada instrucción tiene el alcance de su espacio de trabajo seleccionado, sin acceso entre inquilinos.
- Límites: hasta
100filas por instrucción, hasta50instrucciones por lote y un límite de resultados de aproximadamente12ktokens. Los lotes de mutación se aplican de forma atómica. - División de lectura/escritura:
sql_queryylist_workspacesson estrictamente de solo lectura (readOnlyHint) y nunca reparan datos, recalculan la programación ni cambian el estado de las tarjetas.sql_executees la única herramienta de escritura y realiza escrituras (destructiveHint); una sola llamada debe ser totalmente de lectura o totalmente de escritura.
API humanas y de sincronización
Flashcards también incluye API independientes para clientes humanos y sincronización sin conexión, pero no son el contrato principal para agentes externos:
- los flujos del navegador utilizan cookies de dominio compartido más protección CSRF
- Los primeros clientes sin conexión utilizan rutas de sincronización implementadas en
/v1/workspaces/{workspaceId}/sync/pushy/v1/workspaces/{workspaceId}/sync/pull - las rutas de sincronización están intencionalmente fuera de la superficie OpenAPI del agente externo