{"openapi":"3.1.1","info":{"title":"Rembrandt API","description":"REST API for Rembrandt data access.\n\n## Rate Limiting\n\nThe API implements distributed rate limiting to ensure fair usage:\n\n**Per API Key:**\n- Regular: 1,000 requests/hour\n- Burst: 2,000 requests/hour\n\n**Per Organization (Enterprise):**\n- Regular: 5,000 requests/hour\n- Burst: 10,000 requests/hour\n\n**IP-Based Protection:**\n- Regular: 100 requests/minute per IP\n- Burst: 1,000 requests/hour per IP\n\nRate limit information is included in response headers:\n- `X-RateLimit-Limit`: Maximum requests allowed\n- `X-RateLimit-Remaining`: Remaining requests in current window\n- `X-RateLimit-Reset`: Time when the rate limit resets (Unix timestamp)\n\nWhen rate limits are exceeded, the API returns a `429 Too Many Requests` status code.","version":"1.0.0","contact":{"name":"Rembrandt Support","email":"support@rembrandtagents.com"}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","description":"API Key authentication using rk_* format (Rembrandt Key)"}},"schemas":{}},"paths":{"/v1/accounts":{"get":{"operationId":"getAccounts","summary":"List accounts","tags":["Accounts"],"description":"List accounts in the organization. Filter by name, industry, or status.","parameters":[{"schema":{"description":"Filter by account name (contains match).","type":"string"},"in":"query","name":"name","description":"Filter by account name (contains match)."},{"schema":{"description":"Filter by industry.","type":"string"},"in":"query","name":"industry","description":"Filter by industry."},{"schema":{"default":"ACTIVE","description":"Filter by account status (default: ACTIVE).","type":"string","enum":["ACTIVE","INACTIVE","ARCHIVED"]},"in":"query","name":"status","description":"Filter by account status (default: ACTIVE)."},{"schema":{"default":"name","description":"Field to sort by","type":"string","enum":["name","createdAt"]},"in":"query","name":"sortBy","description":"Field to sort by"},{"schema":{"default":"asc","description":"Sort order","type":"string","enum":["asc","desc"]},"in":"query","name":"sortOrder","description":"Sort order"},{"schema":{"description":"Maximum number of accounts to return (1-100)","default":"50","type":"string"},"in":"query","name":"limit","description":"Maximum number of accounts to return (1-100)"},{"schema":{"description":"Number of accounts to skip for pagination","default":"0","type":"string"},"in":"query","name":"offset","description":"Number of accounts to skip for pagination"}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","properties":{"accounts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Account ID (UUID)"},"name":{"type":"string","description":"Account name"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Account industry"},"headquartersCountry":{"type":"string","description":"Headquarters country code (lowercase ISO-2, e.g. 'nl', 'us')"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Account website URL"},"status":{"type":"string","description":"Account status (ACTIVE, INACTIVE, ARCHIVED)"},"opportunityCount":{"type":"number","description":"Number of opportunities for this account"},"createdAt":{"type":"string","description":"Account creation timestamp"},"updatedAt":{"type":"string","description":"Account last update timestamp"}},"required":["id","name","industry","headquartersCountry","website","status","opportunityCount","createdAt","updatedAt"],"additionalProperties":false}},"totalCount":{"type":"number","description":"Total number of accounts matching the query"},"pagination":{"type":"object","properties":{"offset":{"type":"number","description":"Current offset (number of items skipped)"},"limit":{"type":"number","description":"Maximum items per page"},"totalCount":{"type":"number","description":"Total number of items matching the query"},"hasMore":{"type":"boolean","description":"Whether more items exist beyond the current page"}},"required":["offset","limit","totalCount","hasMore"],"additionalProperties":false}},"required":["accounts","totalCount","pagination"],"additionalProperties":false},"timestamp":{"type":"string"}},"required":["success","data","timestamp"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"type":"string","enum":["VALIDATION_ERROR","ALREADY_EXISTS"],"description":"Error code for bad request"}},"required":["success","error","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for unauthorized access","type":"string","const":"UNAUTHORIZED"}},"required":["success","error"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for internal server error","type":"string","const":"INTERNAL_ERROR"}},"required":["success","error"],"additionalProperties":false}}}}}}},"/v1/accounts/{id}":{"get":{"operationId":"getAccountById","summary":"Get account details","tags":["Accounts"],"description":"Get detailed information about a specific account by its UUID.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Account ID (UUID)"},"in":"path","name":"id","required":true,"description":"Account ID (UUID)"}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","properties":{"account":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Account ID (UUID)"},"name":{"type":"string","description":"Account name"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Account industry"},"headquartersCountry":{"type":"string","description":"Headquarters country code (lowercase ISO-2)"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Account website URL"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Account description"},"status":{"type":"string","description":"Account status"},"createdAt":{"type":"string","description":"Account creation timestamp"},"updatedAt":{"type":"string","description":"Account last update timestamp"},"opportunityCount":{"type":"number","description":"Total number of opportunities"}},"required":["id","name","industry","headquartersCountry","website","description","status","createdAt","updatedAt","opportunityCount"],"additionalProperties":false}},"required":["account"],"additionalProperties":false},"timestamp":{"type":"string"}},"required":["success","data","timestamp"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"type":"string","enum":["VALIDATION_ERROR","ALREADY_EXISTS"],"description":"Error code for bad request"}},"required":["success","error","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for unauthorized access","type":"string","const":"UNAUTHORIZED"}},"required":["success","error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"type":"string","const":"NOT_FOUND","description":"Error code for resource not found"}},"required":["success","error","errorCode"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for internal server error","type":"string","const":"INTERNAL_ERROR"}},"required":["success","error"],"additionalProperties":false}}}}}}},"/v1/domains":{"get":{"operationId":"getDomains","summary":"List signal domains","tags":["Domains"],"description":"List signal domains with metadata. Domains represent business areas like 'Enterprise Sales' or 'SMB Outreach'. Each domain can have multiple frameworks configured with specific signals.","parameters":[{"schema":{"description":"Include archived domains (default: false)","default":"false","type":"string"},"in":"query","name":"includeArchived","description":"Include archived domains (default: false)"},{"schema":{"description":"Number of domains to return (1-100, default: 50)","default":"50","type":"string"},"in":"query","name":"limit","description":"Number of domains to return (1-100, default: 50)"},{"schema":{"description":"Number of domains to skip for pagination (default: 0)","default":"0","type":"string"},"in":"query","name":"offset","description":"Number of domains to skip for pagination (default: 0)"}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Domain ID (UUID)"},"name":{"type":"string","description":"Domain name (e.g., 'Enterprise Sales', 'SMB Outreach')"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Domain description"},"frameworkCount":{"type":"number","description":"Number of frameworks in this domain"},"recentSignalMatches":{"type":"number","description":"Number of recent signal matches (last 30 days)"},"isArchived":{"type":"boolean","description":"Whether the domain is archived"},"createdAt":{"type":"string","description":"Domain creation timestamp"},"updatedAt":{"type":"string","description":"Domain last update timestamp"}},"required":["id","name","description","frameworkCount","recentSignalMatches","isArchived","createdAt","updatedAt"],"additionalProperties":false}},"totalCount":{"type":"number","description":"Total number of domains matching the query"},"pagination":{"type":"object","properties":{"offset":{"type":"number","description":"Current offset (number of items skipped)"},"limit":{"type":"number","description":"Maximum items per page"},"totalCount":{"type":"number","description":"Total number of items matching the query"},"hasMore":{"type":"boolean","description":"Whether more items exist beyond the current page"}},"required":["offset","limit","totalCount","hasMore"],"additionalProperties":false}},"required":["domains","totalCount","pagination"],"additionalProperties":false},"timestamp":{"type":"string"}},"required":["success","data","timestamp"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"type":"string","enum":["VALIDATION_ERROR","ALREADY_EXISTS"],"description":"Error code for bad request"}},"required":["success","error","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for unauthorized access","type":"string","const":"UNAUTHORIZED"}},"required":["success","error"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for internal server error","type":"string","const":"INTERNAL_ERROR"}},"required":["success","error"],"additionalProperties":false}}}}}}},"/v1/domains/{id}":{"get":{"operationId":"getDomainDetails","summary":"Get domain details by ID","tags":["Domains"],"description":"Get detailed information about a specific signal domain by its UUID, including frameworks and recent activity.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Domain ID (UUID)"},"in":"path","name":"id","required":true,"description":"Domain ID (UUID)"}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","properties":{"domain":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Domain ID (UUID)"},"name":{"type":"string","description":"Domain name (e.g., 'Enterprise Sales', 'SMB Outreach')"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Domain description"},"frameworks":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Framework ID"},"name":{"type":"string","description":"Framework name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Framework description"}},"required":["id","name","description"],"additionalProperties":false},"description":"Signal frameworks"},"frameworkCount":{"type":"number","description":"Number of frameworks in this domain"},"recentSignalMatches":{"type":"number","description":"Number of recent signal matches (last 30 days)"},"solutionCount":{"type":"number","description":"Number of solutions linked to this domain"},"isArchived":{"type":"boolean","description":"Whether the domain is archived"},"createdAt":{"type":"string","description":"Domain creation timestamp"},"updatedAt":{"type":"string","description":"Domain last update timestamp"}},"required":["id","name","description","frameworks","frameworkCount","recentSignalMatches","solutionCount","isArchived","createdAt","updatedAt"],"additionalProperties":false}},"required":["domain"],"additionalProperties":false},"timestamp":{"type":"string"}},"required":["success","data","timestamp"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"type":"string","enum":["VALIDATION_ERROR","ALREADY_EXISTS"],"description":"Error code for bad request"}},"required":["success","error","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for unauthorized access","type":"string","const":"UNAUTHORIZED"}},"required":["success","error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"type":"string","const":"NOT_FOUND","description":"Error code for resource not found"}},"required":["success","error","errorCode"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for internal server error","type":"string","const":"INTERNAL_ERROR"}},"required":["success","error"],"additionalProperties":false}}}}}}},"/v1/solutions":{"get":{"operationId":"getSolutions","summary":"Get all solutions","tags":["Solutions"],"description":"List organization solutions with optional filtering by name, active status, or domain. Solutions define what opportunities to look for in account signals, each with a prompt template and output fields.","parameters":[{"schema":{"description":"[Filter] Filter by solution name (contains match)","type":"string"},"in":"query","name":"name","description":"[Filter] Filter by solution name (contains match)"},{"schema":{"description":"[Filter] Filter by active status (true/false)","type":"string"},"in":"query","name":"isActive","description":"[Filter] Filter by active status (true/false)"},{"schema":{"description":"[Filter] Filter by signal domain ID","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"query","name":"domainId","description":"[Filter] Filter by signal domain ID"},{"schema":{"description":"[Pagination] Maximum number of solutions to return (1-100)","default":"20","type":"string"},"in":"query","name":"limit","description":"[Pagination] Maximum number of solutions to return (1-100)"},{"schema":{"description":"[Pagination] Number of solutions to skip for pagination","default":"0","type":"string"},"in":"query","name":"offset","description":"[Pagination] Number of solutions to skip for pagination"}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","properties":{"solutions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Solution ID (UUID)"},"name":{"type":"string","description":"Solution name"},"prompt":{"type":"string","description":"LLM prompt for identifying opportunities"},"isActive":{"type":"boolean","description":"Whether the solution is active"},"domains":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"description":"Signal domains this solution targets"},"outputFields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Output field ID"},"fieldName":{"type":"string","description":"Field name (e.g., 'amount', 'priority')"},"fieldLabel":{"type":"string","description":"User-friendly label (e.g., 'Bedrag', 'Prioriteit')"},"fieldType":{"type":"string","description":"Field type (NUMBER, TEXT, YES_NO, DATE, EMAIL, URL, PERCENTAGE, CURRENCY)"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field description"},"isRequired":{"type":"boolean","description":"Whether the field is required"},"displayOrder":{"type":"number","description":"Display order in UI"}},"required":["id","fieldName","fieldLabel","fieldType","description","isRequired","displayOrder"],"additionalProperties":false},"description":"Output field definitions"},"opportunityCount":{"type":"number","description":"Number of opportunities for this solution"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"}},"required":["id","name","prompt","isActive","domains","outputFields","opportunityCount","createdAt","updatedAt"],"additionalProperties":false}},"totalCount":{"type":"number","description":"Total number of solutions matching the query"},"pagination":{"type":"object","properties":{"offset":{"type":"number","description":"Current offset (number of items skipped)"},"limit":{"type":"number","description":"Maximum items per page"},"totalCount":{"type":"number","description":"Total number of items matching the query"},"hasMore":{"type":"boolean","description":"Whether more items exist beyond the current page"}},"required":["offset","limit","totalCount","hasMore"],"additionalProperties":false}},"required":["solutions","totalCount","pagination"],"additionalProperties":false},"timestamp":{"type":"string"}},"required":["success","data","timestamp"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"type":"string","enum":["VALIDATION_ERROR","ALREADY_EXISTS"],"description":"Error code for bad request"}},"required":["success","error","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for unauthorized access","type":"string","const":"UNAUTHORIZED"}},"required":["success","error"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for internal server error","type":"string","const":"INTERNAL_ERROR"}},"required":["success","error"],"additionalProperties":false}}}}}}},"/v1/solutions/{id}":{"get":{"operationId":"getSolutionDetails","summary":"Get solution details by ID","tags":["Solutions"],"description":"Get detailed information about a specific solution by its UUID, including output field definitions and associated domains.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Solution ID (UUID)"},"in":"path","name":"id","required":true,"description":"Solution ID (UUID)"}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","properties":{"solution":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Solution ID (UUID)"},"name":{"type":"string","description":"Solution name"},"prompt":{"type":"string","description":"LLM prompt for identifying opportunities"},"isActive":{"type":"boolean","description":"Whether the solution is active"},"domains":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"description":"Associated domains"},"outputFields":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Output field ID"},"fieldName":{"type":"string","description":"Field name"},"fieldLabel":{"type":"string","description":"User-friendly label"},"fieldType":{"type":"string","description":"Field type"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Field description"},"isRequired":{"type":"boolean","description":"Whether the field is required"},"displayOrder":{"type":"number","description":"Display order in UI"}},"required":["id","fieldName","fieldLabel","fieldType","description","isRequired","displayOrder"],"additionalProperties":false},"description":"Output field definitions"},"opportunityCount":{"type":"number","description":"Total opportunities count"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"}},"required":["id","name","prompt","isActive","domains","outputFields","opportunityCount","createdAt","updatedAt"],"additionalProperties":false}},"required":["solution"],"additionalProperties":false},"timestamp":{"type":"string"}},"required":["success","data","timestamp"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"type":"string","enum":["VALIDATION_ERROR","ALREADY_EXISTS"],"description":"Error code for bad request"}},"required":["success","error","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for unauthorized access","type":"string","const":"UNAUTHORIZED"}},"required":["success","error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"type":"string","const":"NOT_FOUND","description":"Error code for resource not found"}},"required":["success","error","errorCode"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for internal server error","type":"string","const":"INTERNAL_ERROR"}},"required":["success","error"],"additionalProperties":false}}}}}}},"/v1/opportunities":{"get":{"operationId":"getOpportunities","summary":"Get opportunities with filters","tags":["Opportunities"],"description":"List opportunities with optional filtering by account, solution, domain, status, country, and conviction score. Opportunities represent moments to act based on signal intelligence. Supports sorting by conviction, date, or status.","parameters":[{"schema":{"description":"[Filter] Filter by account ID (UUID)","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"query","name":"accountId","description":"[Filter] Filter by account ID (UUID)"},{"schema":{"description":"[Filter] Filter by solution ID (UUID)","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"in":"query","name":"solutionId","description":"[Filter] Filter by solution ID (UUID)"},{"schema":{"description":"[Filter] Filter by account HQ country (ISO 2-letter code, case-insensitive)","type":"string","minLength":2,"maxLength":2},"in":"query","name":"country","description":"[Filter] Filter by account HQ country (ISO 2-letter code, case-insensitive)"},{"schema":{"description":"[Filter] Minimum conviction score (0-5)","type":"string"},"in":"query","name":"minConvictionScore","description":"[Filter] Minimum conviction score (0-5)"},{"schema":{"default":"createdAt","description":"[Sorting] Field to sort by","type":"string","enum":["convictionScore","momentToActDate","createdAt"]},"in":"query","name":"sortBy","description":"[Sorting] Field to sort by"},{"schema":{"default":"desc","description":"[Sorting] Sort order","type":"string","enum":["asc","desc"]},"in":"query","name":"sortOrder","description":"[Sorting] Sort order"},{"schema":{"description":"[Pagination] Maximum number of opportunities to return (1-100)","default":"20","type":"string"},"in":"query","name":"limit","description":"[Pagination] Maximum number of opportunities to return (1-100)"},{"schema":{"description":"[Pagination] Number of opportunities to skip for pagination (max 9900)","default":"0","type":"string"},"in":"query","name":"offset","description":"[Pagination] Number of opportunities to skip for pagination (max 9900)"}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","properties":{"opportunities":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Opportunity ID (UUID)"},"accountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Account ID"},"accountName":{"type":"string","description":"Account name"},"headquartersCountry":{"type":"string","description":"Account's HQ country (lowercase ISO-2)"},"solutionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Solution ID"},"solutionName":{"type":"string","description":"Solution name"},"momentToActDate":{"type":"string","description":"When the moment was identified"},"evidence":{"type":"string","description":"Detailed evidence text"},"convictionScore":{"type":"number","description":"Conviction score (0-5)"},"customOutput":{"anyOf":[{},{"type":"null"}],"description":"Dynamic output based on solution"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"}},"required":["id","accountId","accountName","headquartersCountry","solutionId","solutionName","momentToActDate","evidence","convictionScore","customOutput","createdAt","updatedAt"],"additionalProperties":false}},"totalCount":{"type":"number","description":"Total number of opportunities matching the query"},"pagination":{"type":"object","properties":{"offset":{"type":"number","description":"Current offset (number of items skipped)"},"limit":{"type":"number","description":"Maximum items per page"},"totalCount":{"type":"number","description":"Total number of items matching the query"},"hasMore":{"type":"boolean","description":"Whether more items exist beyond the current page"}},"required":["offset","limit","totalCount","hasMore"],"additionalProperties":false}},"required":["opportunities","totalCount","pagination"],"additionalProperties":false},"timestamp":{"type":"string"}},"required":["success","data","timestamp"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"type":"string","enum":["VALIDATION_ERROR","ALREADY_EXISTS"],"description":"Error code for bad request"}},"required":["success","error","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for unauthorized access","type":"string","const":"UNAUTHORIZED"}},"required":["success","error"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for internal server error","type":"string","const":"INTERNAL_ERROR"}},"required":["success","error"],"additionalProperties":false}}}}}}},"/v1/opportunities/{id}":{"get":{"operationId":"getOpportunityDetails","summary":"Get opportunity details by ID","tags":["Opportunities"],"description":"Get detailed information about a specific opportunity by its UUID, including related signal matches and evidence.","parameters":[{"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Opportunity ID (UUID)"},"in":"path","name":"id","required":true,"description":"Opportunity ID (UUID)"}],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":true},"data":{"type":"object","properties":{"opportunity":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Opportunity ID (UUID)"},"accountId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Account ID"},"accountName":{"type":"string","description":"Account name"},"headquartersCountry":{"type":"string","description":"Account's HQ country (lowercase ISO-2)"},"solutionId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Solution ID"},"solutionName":{"type":"string","description":"Solution name"},"momentToActDate":{"type":"string","description":"When the moment was identified"},"evidence":{"type":"string","description":"Detailed evidence text"},"convictionScore":{"type":"number","description":"Conviction score (0-5)"},"customOutput":{"anyOf":[{},{"type":"null"}],"description":"Dynamic output based on solution"},"signalMatches":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Signal match ID"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Signal content summary"},"sourceType":{"type":"string","description":"Signal source type"},"confidence":{"type":"string","description":"Confidence level"},"createdAt":{"type":"string","description":"Signal match creation timestamp"}},"required":["id","content","sourceType","confidence","createdAt"],"additionalProperties":false},"description":"Related signal matches"},"createdAt":{"type":"string","description":"Creation timestamp"},"updatedAt":{"type":"string","description":"Last update timestamp"}},"required":["id","accountId","accountName","headquartersCountry","solutionId","solutionName","momentToActDate","evidence","convictionScore","customOutput","signalMatches","createdAt","updatedAt"],"additionalProperties":false}},"required":["opportunity"],"additionalProperties":false},"timestamp":{"type":"string"}},"required":["success","data","timestamp"],"additionalProperties":false}}}},"400":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"type":"string","enum":["VALIDATION_ERROR","ALREADY_EXISTS"],"description":"Error code for bad request"}},"required":["success","error","errorCode"],"additionalProperties":false}}}},"401":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for unauthorized access","type":"string","const":"UNAUTHORIZED"}},"required":["success","error"],"additionalProperties":false}}}},"404":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"type":"string","const":"NOT_FOUND","description":"Error code for resource not found"}},"required":["success","error","errorCode"],"additionalProperties":false}}}},"500":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","const":false},"error":{"type":"string"},"errorId":{"description":"Unique error ID for tracking","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"timestamp":{"description":"ISO 8601 timestamp","type":"string"},"path":{"description":"Request path","type":"string"},"method":{"description":"HTTP method","type":"string"},"meta":{"description":"Additional error metadata","type":"object","propertyNames":{"type":"string"},"additionalProperties":{}},"errorCode":{"description":"Error code for internal server error","type":"string","const":"INTERNAL_ERROR"}},"required":["success","error"],"additionalProperties":false}}}}}}}},"servers":[{"url":"https://api.rembrandtagents.com","description":"Production server"}],"security":[{"bearerAuth":[]}]}