{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"tool_promptloop","slug":"promptloop","name":"PromptLoop","type":"product","url":"https://www.promptloop.com","page_url":"https://unfragile.ai/promptloop","categories":["prompt-engineering"],"tags":[],"pricing":{"model":"freemium","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"tool_promptloop__cap_0","uri":"capability://data.processing.analysis.spreadsheet.native.llm.batch.processing.with.multi.cell.formula.integration","name":"spreadsheet-native llm batch processing with multi-cell formula integration","description":"Executes LLM API calls directly within spreadsheet cells using a custom formula syntax (e.g., =PROMPTLOOP(prompt, model, parameters)), enabling users to process entire columns of data through language models without leaving their spreadsheet application. The system maintains bidirectional data binding between cells and API responses, automatically handling rate limiting, retry logic, and result caching to prevent duplicate API calls on formula recalculation.","intents":["Process 1000+ rows of customer feedback through an LLM for sentiment analysis without writing code or using external tools","Generate product descriptions for an e-commerce catalog by mapping spreadsheet columns to prompt templates","Batch-annotate datasets for ML training by running classification prompts across multiple rows simultaneously","Transform unstructured text data into structured outputs (JSON, CSV) while keeping results inline with source data"],"best_for":["Data analysts and business users who live in spreadsheets and want LLM automation without API knowledge","Marketing teams automating content generation workflows on tabular campaign data","Non-technical researchers batch-processing qualitative data through LLMs for thematic analysis"],"limitations":["Freemium tier caps API calls at 100-500 per month, making large-scale batch processing (10k+ rows) prohibitively expensive","No built-in result versioning or audit trail—overwrites previous cell values on formula recalculation unless manually preserved","Spreadsheet cell size limits (typically 32KB in Excel/Sheets) constrain maximum prompt length and response size","Latency scales linearly with row count; processing 10k rows sequentially can take 30+ minutes without parallel execution","No native support for multi-step workflows or conditional logic within formulas—complex pipelines require external orchestration"],"requires":["Active spreadsheet application (Google Sheets, Microsoft Excel, or compatible)","PromptLoop browser extension or add-on installed and authenticated","API key for at least one supported LLM provider (OpenAI, Anthropic, Cohere, etc.)","Internet connectivity for real-time API calls"],"input_types":["text (cell values, ranges)","structured data (CSV-like rows)","prompt templates with variable substitution"],"output_types":["text (LLM responses written back to cells)","structured data (JSON parsed from LLM output)","numeric (confidence scores, classifications)"],"categories":["data-processing-analysis","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"tool_promptloop__cap_1","uri":"capability://tool.use.integration.multi.provider.llm.model.selection.with.unified.api.abstraction","name":"multi-provider llm model selection with unified api abstraction","description":"Abstracts API differences across OpenAI, Anthropic, Cohere, and other LLM providers through a unified parameter interface, allowing users to swap models (GPT-4, Claude, Command) within spreadsheet formulas without rewriting prompts or handling provider-specific authentication. The system translates common parameters (temperature, max_tokens, top_p) to provider-native formats and manages separate API keys per provider, enabling cost optimization by routing requests to the cheapest available model.","intents":["Switch from GPT-4 to Claude mid-project to reduce API costs without modifying existing formulas","Test multiple models on the same dataset to compare output quality before committing to one provider","Route simple classification tasks to cheaper models (Cohere) and complex reasoning to premium models (GPT-4) based on task type","Avoid vendor lock-in by maintaining flexibility to migrate to new providers as pricing or capabilities change"],"best_for":["Cost-conscious teams running high-volume LLM workloads who want to optimize spend across providers","Researchers comparing model outputs across vendors without manual API integration","Organizations with multi-cloud or multi-vendor policies requiring provider flexibility"],"limitations":["Parameter translation is lossy—some provider-specific features (e.g., OpenAI's function_calling, Anthropic's extended thinking) are not exposed through the unified interface","Latency varies significantly by provider; no automatic failover if one provider's API is degraded","Requires separate API keys and billing accounts for each provider; no unified billing or cost tracking across providers","Model availability is static—new models require PromptLoop updates to support, creating lag vs. direct API access"],"requires":["API keys for at least one supported LLM provider","PromptLoop account with provider integrations configured","Sufficient API quota/credits with each provider"],"input_types":["text (prompts)","model identifiers (string)","parameter objects (temperature, max_tokens, etc.)"],"output_types":["text (LLM responses)","metadata (model used, tokens consumed, latency)"],"categories":["tool-use-integration","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"tool_promptloop__cap_10","uri":"capability://text.generation.language.custom.function.definitions.with.reusable.prompt.logic.and.parameter.binding","name":"custom function definitions with reusable prompt logic and parameter binding","description":"Allows users to define custom functions (e.g., SENTIMENT_ANALYSIS, ENTITY_EXTRACTION) that encapsulate a prompt template, model selection, and output parsing logic. These functions can be reused across multiple spreadsheets and shared with team members, reducing duplication and enabling consistent prompt logic across projects. Functions support parameter binding, allowing callers to override specific aspects (model, temperature, output schema) without modifying the underlying prompt.","intents":["Define a reusable sentiment analysis function that can be used across multiple projects without rewriting the prompt","Create a library of domain-specific functions (e.g., legal document classification, medical record summarization) for team reuse","Encapsulate complex prompt logic (multi-step reasoning, output parsing) in a single function call, simplifying spreadsheet formulas","Maintain consistency across projects by using the same function definition rather than duplicating prompts"],"best_for":["Teams running similar LLM tasks across multiple projects and wanting to avoid prompt duplication","Organizations building internal libraries of reusable LLM functions for common tasks"],"limitations":["Function definitions are stored in PromptLoop backend; no version control or ability to track function evolution in Git","No support for function composition (calling one function from another); functions are atomic and cannot be chained","Parameter binding is limited to simple overrides (model, temperature); complex logic changes require creating a new function","No type checking or validation for function parameters; incorrect parameter types are caught at runtime, not definition time","Function sharing is all-or-nothing; no granular access controls to share specific functions with specific users or teams"],"requires":["PromptLoop account with custom function support","Function definition (prompt template, model, parameters, output schema)"],"input_types":["function parameters (text, model, temperature, etc.)"],"output_types":["function result (text, structured data, or parsed output)"],"categories":["text-generation-language","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"tool_promptloop__cap_2","uri":"capability://text.generation.language.prompt.template.variable.substitution.with.cell.reference.binding","name":"prompt template variable substitution with cell reference binding","description":"Supports parameterized prompt templates using placeholder syntax (e.g., {{column_name}}, {{A1}}) that dynamically inject spreadsheet cell values into prompts at execution time. The system parses template strings, validates that referenced cells exist, and performs string interpolation before sending the final prompt to the LLM API, enabling reusable prompt patterns across multiple rows without manual editing.","intents":["Create a single prompt template for customer support that injects customer name, issue type, and order ID from spreadsheet columns","Generate personalized marketing copy by templating a base prompt with product name, price, and target audience from different columns","Build data labeling workflows where a template prompt references both the data to label and the labeling instructions","Maintain consistency across batch jobs by defining prompts once and reusing them across multiple datasets"],"best_for":["Teams running repetitive LLM tasks on structured data where prompt logic is consistent but inputs vary","Non-technical users who need to parameterize prompts without learning string formatting or programming"],"limitations":["No conditional logic in templates—cannot branch prompt content based on cell values (e.g., 'if sentiment is negative, use escalation prompt')","Variable names must match column headers exactly; typos silently fail or produce incorrect substitutions","No support for nested templates or template inheritance; complex prompt hierarchies require manual composition","Circular references (template A references template B which references A) are not detected, causing infinite loops"],"requires":["Spreadsheet with named columns or cell references","PromptLoop formula with template syntax"],"input_types":["text (prompt template string with placeholders)","cell references (A1, column_name, ranges)"],"output_types":["text (interpolated prompt sent to LLM)"],"categories":["text-generation-language","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"tool_promptloop__cap_3","uri":"capability://automation.workflow.batch.api.call.execution.with.automatic.rate.limiting.and.retry.logic","name":"batch api call execution with automatic rate limiting and retry logic","description":"Queues multiple LLM API calls triggered by spreadsheet formulas and executes them with configurable rate limiting (e.g., max 10 requests/second) and exponential backoff retry logic to handle transient API failures. The system tracks request state (pending, success, failed, retrying) per cell and prevents duplicate API calls if a formula is recalculated, using content-based deduplication to identify identical requests.","intents":["Process 5000 rows of data without hitting API rate limits or getting throttled by the LLM provider","Automatically retry failed API calls (e.g., due to temporary network issues) without manual intervention","Monitor which cells succeeded, failed, or are still pending to identify problematic data or API issues","Avoid wasting API credits by preventing duplicate calls when spreadsheet formulas are recalculated"],"best_for":["Teams processing large datasets (1k+ rows) where API rate limits and transient failures are common","Cost-sensitive workflows where duplicate API calls directly impact budget"],"limitations":["Rate limiting is global across all users' spreadsheets in a workspace—no per-user or per-project isolation, causing contention","Retry logic uses fixed exponential backoff (e.g., 1s, 2s, 4s) without jitter, potentially causing thundering herd on API recovery","No visibility into queue depth or estimated completion time; users cannot predict how long batch processing will take","Failed requests are retried up to N times (typically 3-5) then marked as failed; no manual retry mechanism for selective re-execution","Deduplication is content-based only—identical prompts with different expected outputs are treated as duplicates"],"requires":["PromptLoop account with batch processing enabled","API key with sufficient rate limit quota from the LLM provider"],"input_types":["spreadsheet formulas (multiple cells triggering API calls)"],"output_types":["text (LLM responses)","status metadata (success/failed/pending, retry count, timestamp)"],"categories":["automation-workflow","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"tool_promptloop__cap_4","uri":"capability://memory.knowledge.result.caching.with.cell.level.invalidation.and.manual.refresh.controls","name":"result caching with cell-level invalidation and manual refresh controls","description":"Caches LLM API responses at the cell level using a content hash of the prompt as the cache key, preventing redundant API calls when formulas are recalculated or spreadsheets are reopened. Users can manually invalidate cache entries per cell or globally, and the system tracks cache hit/miss rates to show cost savings. Cache is persisted in PromptLoop's backend, not in the spreadsheet itself, enabling cache sharing across users editing the same sheet.","intents":["Avoid re-running expensive API calls when a spreadsheet is reopened or a formula is accidentally recalculated","Measure API cost savings by comparing cached vs. non-cached execution","Invalidate cached results for specific cells if the underlying data or prompt changes","Share cached results across team members editing the same spreadsheet to reduce redundant API calls"],"best_for":["Teams with large spreadsheets that are frequently reopened or edited, where cache hits provide significant cost savings","Workflows where LLM outputs are deterministic and can be safely reused across multiple runs"],"limitations":["Cache invalidation is manual—no automatic invalidation if upstream data (referenced cells) changes, risking stale results","Cache key is based on prompt content only; identical prompts with different model parameters are treated as cache hits, potentially returning wrong results","No cache expiration policy—cached results persist indefinitely, which is problematic for time-sensitive data (e.g., current news, stock prices)","Cache is opaque to users; no UI to inspect what's cached, when it was cached, or why a particular result was served from cache","Freemium tier may have limited cache storage; unclear if cache is cleared on account downgrade or deletion"],"requires":["PromptLoop account with backend cache enabled","Persistent internet connection to access cached results"],"input_types":["prompt text (used to generate cache key)"],"output_types":["cached LLM response (if hit) or fresh API response (if miss)","cache metadata (hit/miss, timestamp, cost savings)"],"categories":["memory-knowledge","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"tool_promptloop__cap_5","uri":"capability://data.processing.analysis.structured.output.parsing.with.json.schema.validation","name":"structured output parsing with json schema validation","description":"Accepts a JSON schema definition from the user and validates LLM responses against that schema, extracting structured fields (e.g., sentiment, confidence, entities) from unstructured LLM output. The system uses schema-based prompting techniques (e.g., appending schema to the prompt or using function calling APIs) to encourage the LLM to output valid JSON, then parses and validates the response, returning individual fields as separate cell values or a single JSON object.","intents":["Extract structured data (sentiment label, confidence score, entities) from free-text LLM responses and populate separate spreadsheet columns","Validate that LLM outputs conform to expected structure before using them in downstream workflows","Convert unstructured LLM outputs into machine-readable formats (JSON, CSV) for further processing or database ingestion","Enforce consistent output format across multiple LLM calls to enable reliable data aggregation"],"best_for":["Data annotation and labeling workflows where LLM outputs must be structured for downstream ML training","ETL pipelines where LLM-generated data must conform to a fixed schema before database insertion"],"limitations":["Schema validation is strict—if LLM output doesn't match schema, the entire response is rejected with no partial extraction","No fallback or error handling if LLM refuses to output valid JSON; users must manually fix malformed responses","Schema definition is manual and error-prone; no schema inference from example outputs or automatic schema generation","Complex nested schemas may confuse the LLM, leading to high failure rates; no guidance on schema design for LLM compatibility","No support for optional fields or union types; all schema fields are treated as required"],"requires":["JSON schema definition provided by user","LLM model that supports structured output (e.g., OpenAI's function calling, Claude with JSON mode)"],"input_types":["text (LLM response)","JSON schema (validation rules)"],"output_types":["structured data (JSON object)","individual fields (separate cell values)","validation status (success/failed)"],"categories":["data-processing-analysis","text-generation-language"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"tool_promptloop__cap_6","uri":"capability://data.processing.analysis.cost.tracking.and.usage.analytics.with.per.model.and.per.provider.breakdowns","name":"cost tracking and usage analytics with per-model and per-provider breakdowns","description":"Tracks API costs for each LLM call (based on token counts and provider pricing) and aggregates costs by model, provider, and time period. The system displays cost dashboards showing total spend, cost per row, and cost trends, enabling users to identify expensive operations and optimize spending. Cost data is tied to individual cells, allowing users to see which spreadsheet operations are most expensive.","intents":["Monitor total API spending across all spreadsheet operations to stay within budget","Identify which models or providers are most expensive and optimize by switching to cheaper alternatives","Calculate cost per unit of work (e.g., cost per customer record processed) to inform pricing decisions","Track spending trends over time to detect cost anomalies or unexpected spikes"],"best_for":["Cost-conscious teams running high-volume LLM workloads who need visibility into spending","Organizations with strict budget controls requiring detailed cost attribution"],"limitations":["Cost tracking is approximate—based on estimated token counts, not actual token counts returned by the API (which may differ)","Pricing data is static and updated manually; doesn't reflect real-time price changes from LLM providers","No cost forecasting or budget alerts; users must manually monitor dashboards to detect overspending","Cost attribution is at the cell level only; no support for project-level or team-level cost tracking","Freemium tier may have limited analytics history (e.g., only last 30 days); historical cost data may not be available"],"requires":["PromptLoop account with analytics enabled","API keys configured for cost tracking"],"input_types":["LLM API calls (token counts, model, provider)"],"output_types":["cost metrics (total spend, cost per row, cost per model)","dashboards (cost trends, provider breakdown)","alerts (optional, if budget exceeded)"],"categories":["data-processing-analysis","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"tool_promptloop__cap_7","uri":"capability://automation.workflow.collaborative.editing.with.formula.level.access.controls.and.audit.logging","name":"collaborative editing with formula-level access controls and audit logging","description":"Enables multiple users to edit the same spreadsheet with PromptLoop formulas while maintaining formula-level access controls (e.g., some users can view results but not edit formulas, others can modify prompts). The system logs all formula changes, API calls, and result modifications with user attribution and timestamps, enabling audit trails for compliance or debugging.","intents":["Allow data analysts to run LLM operations on data prepared by other team members without exposing or modifying the underlying prompts","Maintain audit trails showing who ran which LLM operations and when, for compliance or debugging purposes","Restrict formula editing to senior team members while allowing junior analysts to view and use results","Track changes to prompts over time to understand how prompt evolution affects output quality"],"best_for":["Teams with multiple users collaborating on the same spreadsheet where access control and audit trails are important","Organizations with compliance requirements (HIPAA, SOC 2) needing detailed audit logs of data processing"],"limitations":["Access controls are formula-level only; no row-level or column-level permissions, limiting granularity","Audit logs are append-only and not easily queryable; no built-in search or filtering for specific users, formulas, or time ranges","No conflict resolution for simultaneous edits to the same formula; last-write-wins, potentially losing changes","Audit logs are retained for a limited time (unclear retention policy); historical logs may be deleted after 30-90 days","No integration with external audit systems (Splunk, DataDog); logs are stored only in PromptLoop"],"requires":["PromptLoop account with team/workspace features enabled","Multiple users with PromptLoop accounts in the same workspace"],"input_types":["formula edits (prompt changes, parameter changes)","API calls (execution, results)"],"output_types":["audit logs (user, action, timestamp, before/after state)","access control policies (user roles, permissions)"],"categories":["automation-workflow","safety-moderation"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"tool_promptloop__cap_8","uri":"capability://automation.workflow.error.handling.and.result.validation.with.user.defined.fallback.rules","name":"error handling and result validation with user-defined fallback rules","description":"Detects API failures, invalid responses, and schema validation errors, and applies user-defined fallback rules (e.g., 'if API fails, use cached result; if cache is empty, use default value'). The system supports conditional fallback logic based on error type (timeout, rate limit, validation error) and allows users to define fallback prompts or static values to use when primary LLM calls fail.","intents":["Gracefully handle API failures without breaking spreadsheet workflows by falling back to cached results or default values","Distinguish between transient failures (retry) and permanent failures (use fallback) to avoid wasting API credits on unrecoverable errors","Define fallback prompts for high-priority tasks (e.g., 'if sentiment analysis fails, use a simpler model') to ensure critical operations complete","Populate spreadsheets with partial results even if some API calls fail, rather than leaving cells empty"],"best_for":["Mission-critical workflows where partial results are better than no results (e.g., data annotation where some labels are better than none)","Cost-sensitive operations where distinguishing transient vs. permanent failures prevents wasted API calls"],"limitations":["Fallback rules are static and defined per formula; no dynamic fallback logic based on runtime conditions (e.g., 'use fallback if error rate > 10%')","No visibility into why a fallback was triggered; users cannot easily debug whether a result came from the primary LLM or fallback","Fallback prompts are not validated before use; if a fallback prompt is malformed, it will fail silently or produce unexpected results","No support for chained fallbacks (fallback A fails, try fallback B); only a single fallback per formula is supported","Fallback results are not marked as such in the spreadsheet; users cannot distinguish between primary and fallback results without manual inspection"],"requires":["User-defined fallback rules (prompt, static value, or cache)","Error classification logic (timeout, rate limit, validation error, etc.)"],"input_types":["primary prompt","fallback rules (prompt, value, or cache reference)","error type (timeout, rate limit, validation error)"],"output_types":["primary LLM response (if successful)","fallback response (if primary fails)","error metadata (error type, fallback used)"],"categories":["automation-workflow","safety-moderation"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"tool_promptloop__cap_9","uri":"capability://planning.reasoning.prompt.versioning.and.a.b.testing.with.side.by.side.result.comparison","name":"prompt versioning and a/b testing with side-by-side result comparison","description":"Allows users to create multiple versions of a prompt and run them in parallel on the same dataset, comparing results side-by-side in the spreadsheet. The system tracks prompt versions with timestamps and metadata, enabling users to revert to previous versions or identify which version produced the best results. A/B testing is conducted at the row level—each row can be assigned to a version (A or B) randomly or deterministically, and results are aggregated to show performance metrics (e.g., accuracy, cost, latency) per version.","intents":["Test two prompt variations on the same dataset to determine which produces better results before committing to one","Compare output quality across models (GPT-4 vs. Claude) or providers (OpenAI vs. Anthropic) on the same data","Track how prompt changes affect output quality over time by comparing versions","Optimize prompts iteratively by running A/B tests and selecting the winning version for production"],"best_for":["Teams optimizing prompts for quality or cost and needing data-driven evidence to guide decisions","Researchers comparing LLM outputs across models or prompt variations"],"limitations":["A/B testing is row-level only; no support for multi-armed testing (A/B/C/D) or sequential testing that adapts allocation based on results","Statistical significance testing is not built-in; users must manually calculate p-values or use external tools to determine if differences are significant","Version comparison is manual—no automated recommendation engine to suggest which version is 'better' based on metrics","Prompt versions are stored in PromptLoop backend; no version control integration (Git) or ability to track prompt changes in source control","A/B test results are not persistent; if a spreadsheet is deleted, test results are lost (unless manually exported)"],"requires":["Multiple prompt versions defined by user","Dataset with sufficient rows to enable meaningful A/B testing (typically 100+ rows per version)"],"input_types":["prompt versions (text)","dataset (rows to test on)","allocation strategy (random, deterministic, sequential)"],"output_types":["results per version (side-by-side in spreadsheet)","performance metrics (accuracy, cost, latency per version)","statistical summary (mean, std dev, confidence intervals)"],"categories":["planning-reasoning","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":43,"verified":false,"data_access_risk":"high","permissions":["Active spreadsheet application (Google Sheets, Microsoft Excel, or compatible)","PromptLoop browser extension or add-on installed and authenticated","API key for at least one supported LLM provider (OpenAI, Anthropic, Cohere, etc.)","Internet connectivity for real-time API calls","API keys for at least one supported LLM provider","PromptLoop account with provider integrations configured","Sufficient API quota/credits with each provider","PromptLoop account with custom function support","Function definition (prompt template, model, parameters, output schema)","Spreadsheet with named columns or cell references"],"failure_modes":["Freemium tier caps API calls at 100-500 per month, making large-scale batch processing (10k+ rows) prohibitively expensive","No built-in result versioning or audit trail—overwrites previous cell values on formula recalculation unless manually preserved","Spreadsheet cell size limits (typically 32KB in Excel/Sheets) constrain maximum prompt length and response size","Latency scales linearly with row count; processing 10k rows sequentially can take 30+ minutes without parallel execution","No native support for multi-step workflows or conditional logic within formulas—complex pipelines require external orchestration","Parameter translation is lossy—some provider-specific features (e.g., OpenAI's function_calling, Anthropic's extended thinking) are not exposed through the unified interface","Latency varies significantly by provider; no automatic failover if one provider's API is degraded","Requires separate API keys and billing accounts for each provider; no unified billing or cost tracking across providers","Model availability is static—new models require PromptLoop updates to support, creating lag vs. direct API access","Function definitions are stored in PromptLoop backend; no version control or ability to track function evolution in Git","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.36666666666666664,"quality":0.78,"ecosystem":0.15000000000000002,"match_graph":0.25,"freshness":0.75,"weights":{"adoption":0.25,"quality":0.25,"ecosystem":0.1,"match_graph":0.35,"freshness":0.05}},"observed_outcomes":{"matches":0,"success_rate":0,"avg_confidence":0,"top_intents":[],"last_matched_at":null},"maintenance":{"status":"active","updated_at":"2026-05-24T12:16:32.438Z","last_scraped_at":"2026-04-05T13:23:42.551Z","last_commit":null},"community":{"stars":null,"forks":null,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=promptloop","compare_url":"https://unfragile.ai/compare?artifact=promptloop"}},"signature":"BR2LaIKAtEXJBulFuycWtuJcxvu5nIzuci3njLVhzSTIfq1CTNvbgVfd2lZ63JFIjzejYXHq52mkbpVllpXdAA==","signedAt":"2026-06-20T11:41:58.937Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/promptloop","artifact":"https://unfragile.ai/promptloop","verify":"https://unfragile.ai/api/v1/verify?slug=promptloop","publicKey":"https://unfragile.ai/api/v1/trust-passport-public-key","spec":"https://unfragile.ai/trust","schema":"https://unfragile.ai/schema.json","docs":"https://unfragile.ai/docs"}}