{"components":{"schemas":{"ApiErrorResponse":{"additionalProperties":false,"properties":{"error":{"additionalProperties":false,"properties":{"code":{"enum":["CONFLICT","FEATURE_DISABLED","FORBIDDEN","IDEMPOTENCY_CONFLICT","INTERNAL_ERROR","INVALID_INPUT","INVALID_STATE","NOT_FOUND","PRECONDITION_REQUIRED","RATE_LIMITED","UNAUTHENTICATED","VERSION_CONFLICT"],"type":"string"},"message":{"minLength":1,"type":"string"},"requestId":{"maxLength":128,"minLength":1,"type":"string"}},"required":["code","message","requestId"],"type":"object"}},"required":["error"],"type":"object"},"RelationshipSearchResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"companies":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"company"},"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"},"organizationNumber":{"type":"string"},"email":{"type":["string","null"]},"phone":{"type":["string","null"]},"industry":{"type":["string","null"]},"lifecycleStage":{"anyOf":[{"type":"string","enum":["LEAD","PROSPECT","CUSTOMER","CHURNED"]},{"type":"null"}]}},"required":["type","id","name","organizationNumber","email","phone","industry","lifecycleStage"],"additionalProperties":false}},"people":{"maxItems":20,"type":"array","items":{"type":"object","properties":{"type":{"type":"string","const":"person"},"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"},"email":{"type":"string"},"phone":{"type":["string","null"]},"mobile":{"type":["string","null"]},"title":{"type":["string","null"]},"companyId":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},{"type":"null"}]},"companyName":{"type":["string","null"]},"lifecycleStage":{"anyOf":[{"type":"string","enum":["LEAD","PROSPECT","CUSTOMER","CHURNED"]},{"type":"null"}]}},"required":["type","id","name","email","phone","mobile","title","companyId","companyName","lifecycleStage"],"additionalProperties":false}}},"required":["companies","people"],"additionalProperties":false},"CompanyRegistrySearchResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"type":"object","properties":{"company":{"anyOf":[{"type":"object","properties":{"address":{"type":"string"},"city":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"vat":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"zip":{"type":"string"}},"required":["address","city","name","type","vat","zip"],"additionalProperties":false},{"type":"null"}]}},"required":["company"],"additionalProperties":false},{"type":"object","properties":{"companies":{"maxItems":5,"type":"array","items":{"type":"object","properties":{"address":{"type":"string"},"city":{"type":"string"},"companyType":{"type":"string"},"name":{"type":"string"},"organisationNumber":{"type":"string"},"zip":{"type":"string"}},"required":["address","city","companyType","name","organisationNumber","zip"],"additionalProperties":false}}},"required":["companies"],"additionalProperties":false}]},"CompanyListResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"archivedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"email":{"anyOf":[{"type":"string","maxLength":320,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]},"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"lastActivityAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"lifecycleStage":{"anyOf":[{"type":"string","enum":["LEAD","PROSPECT","CUSTOMER","CHURNED"]},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":255},"organizationNumber":{"type":"string","pattern":"^(?:|\\d{8})$"},"phone":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"version":{"type":"string","minLength":1,"maxLength":512,"pattern":"^v1\\.[A-Za-z0-9_-]+$"},"website":{"anyOf":[{"type":"string","maxLength":255,"pattern":"^https?:\\/\\/"},{"type":"null"}]}},"required":["archivedAt","email","id","lastActivityAt","lifecycleStage","name","organizationNumber","phone","updatedAt","version","website"],"additionalProperties":false}},"nextCursor":{"anyOf":[{"type":"string","minLength":1,"maxLength":512},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false},"CompanyDetailResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"company":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"version":{"type":"string","minLength":1,"maxLength":512,"pattern":"^v1\\.[A-Za-z0-9_-]+$"},"name":{"type":"string","minLength":1,"maxLength":255},"organizationNumber":{"type":"string","pattern":"^(?:|\\d{8})$"},"email":{"anyOf":[{"type":"string","maxLength":320,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]},"phone":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"website":{"anyOf":[{"type":"string","maxLength":255,"pattern":"^https?:\\/\\/"},{"type":"null"}]},"industry":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"employeeCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":10000000},{"type":"null"}]},"annualRevenueOere":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}]},"linkedinUrl":{"anyOf":[{"type":"string","maxLength":255,"pattern":"^https?:\\/\\/"},{"type":"null"}]},"lifecycleStage":{"anyOf":[{"type":"string","enum":["LEAD","PROSPECT","CUSTOMER","CHURNED"]},{"type":"null"}]},"lastActivityAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"archivedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"maxProperties":50},"customFields":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,62}$"},"additionalProperties":{"anyOf":[{"type":"string","maxLength":5000},{"type":"number"},{"type":"boolean"},{"maxItems":50,"type":"array","items":{"type":"string","maxLength":1000}}]},"maxProperties":50},"ownerUserIds":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":255}},"people":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"},"email":{"type":"string"},"title":{"type":["string","null"]}},"required":["id","name","email","title"],"additionalProperties":false}}},"required":["id","version","name","organizationNumber","email","phone","website","industry","employeeCount","annualRevenueOere","description","linkedinUrl","lifecycleStage","lastActivityAt","archivedAt","updatedAt","metadata","customFields","ownerUserIds","people"],"additionalProperties":false}},"required":["company"],"additionalProperties":false},"CompanyCreate":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"annualRevenueOere":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"customFields":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,62}$"},"additionalProperties":{"anyOf":[{"type":"string","maxLength":5000},{"type":"number"},{"type":"boolean"},{"maxItems":50,"type":"array","items":{"type":"string","maxLength":1000}}]},"maxProperties":50},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}]},"email":{"anyOf":[{"type":"string","maxLength":320,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]},"employeeCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":10000000},{"type":"null"}]},"industry":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"lifecycleStage":{"anyOf":[{"type":"string","enum":["LEAD","PROSPECT","CUSTOMER","CHURNED"]},{"type":"null"}]},"linkedinUrl":{"anyOf":[{"type":"string","maxLength":255,"pattern":"^https?:\\/\\/"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"maxProperties":50},"name":{"type":"string","minLength":1,"maxLength":255},"phone":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"website":{"anyOf":[{"type":"string","maxLength":255,"pattern":"^https?:\\/\\/"},{"type":"null"}]},"organizationNumber":{"type":"string","pattern":"^\\d{8}$"}},"required":["name"],"additionalProperties":false},"CompanyPatch":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"annualRevenueOere":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"customFields":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,62}$"},"additionalProperties":{"anyOf":[{"anyOf":[{"type":"string","maxLength":5000},{"type":"number"},{"type":"boolean"},{"maxItems":50,"type":"array","items":{"type":"string","maxLength":1000}}]},{"type":"null"}]},"maxProperties":50},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}]},"email":{"anyOf":[{"type":"string","maxLength":320,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},{"type":"null"}]},"employeeCount":{"anyOf":[{"type":"integer","minimum":0,"maximum":10000000},{"type":"null"}]},"industry":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"lifecycleStage":{"anyOf":[{"type":"string","enum":["LEAD","PROSPECT","CUSTOMER","CHURNED"]},{"type":"null"}]},"linkedinUrl":{"anyOf":[{"type":"string","maxLength":255,"pattern":"^https?:\\/\\/"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"maxProperties":50},"name":{"type":"string","minLength":1,"maxLength":255},"phone":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"website":{"anyOf":[{"type":"string","maxLength":255,"pattern":"^https?:\\/\\/"},{"type":"null"}]}},"additionalProperties":false,"minProperties":1},"CustomFieldDefinitionListResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,62}$"},"label":{"type":"string","minLength":1,"maxLength":120},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}]},"fieldType":{"type":"string","enum":["TEXT","MULTILINE_TEXT","NUMBER","DATETIME","BOOLEAN","SINGLE_SELECT","MULTI_SELECT","URL"]},"options":{"type":"array","items":{"type":"object","properties":{"color":{"type":"string"},"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"],"additionalProperties":false}},"config":{"type":"object","properties":{"granularity":{"type":"string","enum":["date","time","datetime"]},"max":{"type":"number"},"maxLength":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"min":{"type":"number"}},"additionalProperties":false},"isRequired":{"type":"boolean"},"position":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["key","label","description","fieldType","options","config","isRequired","position"],"additionalProperties":false}},"nextCursor":{"anyOf":[{"type":"string","minLength":1,"maxLength":512},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false},"PersonListResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"archivedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"company":{"anyOf":[{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"department":{"type":["string","null"]},"email":{"type":"string"},"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"lastActivityAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"lifecycleStage":{"anyOf":[{"type":"string","enum":["LEAD","PROSPECT","CUSTOMER","CHURNED"]},{"type":"null"}]},"linkedinUrl":{"type":["string","null"]},"mobile":{"type":["string","null"]},"name":{"type":"string"},"phone":{"type":["string","null"]},"title":{"type":["string","null"]},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"version":{"type":"string","minLength":1,"maxLength":512}},"required":["archivedAt","company","department","email","id","lastActivityAt","lifecycleStage","linkedinUrl","mobile","name","phone","title","updatedAt","version"],"additionalProperties":false}},"nextCursor":{"anyOf":[{"type":"string","minLength":1,"maxLength":512},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false},"PersonDetailResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"person":{"type":"object","properties":{"archivedAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"company":{"anyOf":[{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"customFields":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,62}$"},"additionalProperties":{"anyOf":[{"type":"string","maxLength":5000},{"type":"number"},{"type":"boolean"},{"maxItems":50,"type":"array","items":{"type":"string","maxLength":255}}]},"maxProperties":50},"department":{"type":["string","null"]},"description":{"type":["string","null"]},"email":{"type":"string"},"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"lastActivityAt":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"lifecycleStage":{"anyOf":[{"type":"string","enum":["LEAD","PROSPECT","CUSTOMER","CHURNED"]},{"type":"null"}]},"linkedinUrl":{"type":["string","null"]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"maxProperties":50},"mobile":{"type":["string","null"]},"name":{"type":"string"},"ownerUserIds":{"maxItems":50,"type":"array","items":{"type":"string","minLength":1,"maxLength":255}},"phone":{"type":["string","null"]},"title":{"type":["string","null"]},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"version":{"type":"string","minLength":1,"maxLength":512}},"required":["archivedAt","company","customFields","department","description","email","id","lastActivityAt","lifecycleStage","linkedinUrl","metadata","mobile","name","ownerUserIds","phone","title","updatedAt","version"],"additionalProperties":false}},"required":["person"],"additionalProperties":false},"PersonCreateRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"companyId":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647},"customFields":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,62}$"},"additionalProperties":{"anyOf":[{"anyOf":[{"type":"string","maxLength":5000},{"type":"number"},{"type":"boolean"},{"maxItems":50,"type":"array","items":{"type":"string","maxLength":255}}]},{"type":"null"}]},"maxProperties":50},"department":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]},"description":{"anyOf":[{"type":"string","minLength":1,"maxLength":5000},{"type":"null"}]},"email":{"type":"string","maxLength":320,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"lifecycleStage":{"anyOf":[{"type":"string","enum":["LEAD","PROSPECT","CUSTOMER","CHURNED"]},{"type":"null"}]},"linkedinUrl":{"anyOf":[{"type":"string","maxLength":255,"format":"uri"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"maxProperties":50},"mobile":{"anyOf":[{"type":"string","minLength":1,"maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":255},"phone":{"anyOf":[{"type":"string","minLength":1,"maxLength":32},{"type":"null"}]},"title":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]}},"required":["email","name"],"additionalProperties":false},"PersonPatchRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"companyId":{"anyOf":[{"type":"integer","exclusiveMinimum":0,"maximum":2147483647},{"type":"null"}]},"customFields":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,62}$"},"additionalProperties":{"anyOf":[{"anyOf":[{"type":"string","maxLength":5000},{"type":"number"},{"type":"boolean"},{"maxItems":50,"type":"array","items":{"type":"string","maxLength":255}}]},{"type":"null"}]},"maxProperties":50},"department":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]},"description":{"anyOf":[{"type":"string","minLength":1,"maxLength":5000},{"type":"null"}]},"email":{"type":"string","maxLength":320,"format":"email","pattern":"^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"},"lifecycleStage":{"anyOf":[{"type":"string","enum":["LEAD","PROSPECT","CUSTOMER","CHURNED"]},{"type":"null"}]},"linkedinUrl":{"anyOf":[{"type":"string","maxLength":255,"format":"uri"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"maxProperties":50},"mobile":{"anyOf":[{"type":"string","minLength":1,"maxLength":32},{"type":"null"}]},"name":{"type":"string","minLength":1,"maxLength":255},"phone":{"anyOf":[{"type":"string","minLength":1,"maxLength":32},{"type":"null"}]},"title":{"anyOf":[{"type":"string","minLength":1,"maxLength":128},{"type":"null"}]}},"additionalProperties":false,"minProperties":1},"BriefingListResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"version":{"type":"string","minLength":1,"maxLength":512,"pattern":"^v1\\.[A-Za-z0-9_-]+$"},"name":{"type":"string"},"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETE","FAILED"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"company":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},"excerpt":{"type":["string","null"]}},"required":["id","version","name","status","createdAt","updatedAt","company","excerpt"],"additionalProperties":false}},"nextCursor":{"anyOf":[{"type":"string","minLength":1,"maxLength":512},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false},"BriefingDetailResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"briefing":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"version":{"type":"string","minLength":1,"maxLength":512,"pattern":"^v1\\.[A-Za-z0-9_-]+$"},"name":{"type":"string"},"status":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETE","FAILED"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"company":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"},"organizationNumber":{"type":"string"}},"required":["id","name","organizationNumber"],"additionalProperties":false},"content":{"anyOf":[{"type":"object","properties":{"virksomhedsoplysninger":{"anyOf":[{"type":"object","properties":{"virksomhedsnavn":{"description":"Virksomhedens officielle navn","type":["string","null"]},"adresse":{"description":"Virksomhedens fysiske adresse","type":["string","null"]},"cvrNummer":{"description":"CVR-nummer (dansk virksomhedsregistreringsnummer)","type":["string","null"]},"hjemmeside":{"description":"Virksomhedens hjemmeside URL","type":["string","null"]},"selskabsform":{"description":"Juridisk selskabsform (f.eks. A/S, ApS, IVS)","type":["string","null"]},"stiftet":{"description":"Stiftelsesår eller -dato","type":["string","null"]},"branchekode":{"description":"Branchekode og beskrivelse","type":["string","null"]},"kontaktinfo":{"description":"Kontaktoplysninger (telefon, email)","type":["string","null"]},"direktor":{"description":"Navn på direktør/CEO","type":["string","null"]},"bestyrelsesformand":{"description":"Navn på bestyrelsesformand","type":["string","null"]},"bestyrelsesmedlemmer":{"anyOf":[{"maxItems":20,"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Navne på bestyrelsesmedlemmer"},"legaleEjere":{"anyOf":[{"maxItems":20,"type":"array","items":{"type":"object","properties":{"navn":{"type":"string"},"ejerandel":{"type":["string","null"]},"type":{"type":["string","null"]}},"required":["navn"],"additionalProperties":false}},{"type":"null"}],"description":"Legale ejere af virksomheden"}},"additionalProperties":false},{"type":"null"}],"description":"Grundlæggende virksomhedsoplysninger og kontaktdata"},"opsummering":{"anyOf":[{"type":"object","properties":{"virksomhedsresume":{"description":"Et kort resumé på 3-5 sætninger med mødets formål, vigtigste dokumenterede signal og centrale åbne beslutning","type":["string","null"]}},"additionalProperties":false},{"type":"null"}],"description":"Samlet resumé af briefingen"},"introduktion":{"anyOf":[{"type":"object","properties":{"kortIntroduktion":{"description":"Kort introduktion til virksomheden inkl. stiftelsesår, placering, medarbejderantal og ejerskabsform","type":["string","null"]},"produktOgKunder":{"description":"Beskrivelse af virksomhedens primære produkter/services og kundesegmenter (private, erhverv, offentlige)","type":["string","null"]}},"additionalProperties":false},{"type":"null"}],"description":"Kort introduktion til virksomhedens profil og forretningsområde"},"regnskabsstatus":{"anyOf":[{"type":"object","properties":{"regnskabsdata":{"default":[],"description":"Array af regnskabsår med finansielle nøgletal, typisk de seneste 5 år","anyOf":[{"maxItems":5,"type":"array","items":{"type":"object","properties":{"year":{"description":"Regnskabsår (f.eks. \"2024\")","type":["string","null"]},"bruttofortjeneste":{"description":"Bruttofortjeneste i tusinde kroner eller \"X\" hvis ikke tilgængelig","type":["string","null"]},"ebitda":{"description":"EBITDA i tusinde kroner eller \"X\" hvis ikke tilgængelig","type":["string","null"]},"aaretsResultat":{"description":"Årets resultat i tusinde kroner eller \"X\" hvis ikke tilgængelig","type":["string","null"]},"egenkapital":{"description":"Egenkapital i tusinde kroner eller \"X\" hvis ikke tilgængelig","type":["string","null"]},"balance":{"description":"Balancesum i tusinde kroner eller \"X\" hvis ikke tilgængelig","type":["string","null"]},"likviditetsgrad":{"description":"Likviditetsgrad i procent eller \"X\" hvis ikke tilgængelig","type":["string","null"]},"soliditetsgrad":{"description":"Soliditetsgrad i procent eller \"X\" hvis ikke tilgængelig","type":["string","null"]},"antalAnsatte":{"description":"Antal ansatte eller \"X\" hvis ikke tilgængelig","type":["string","null"]}},"additionalProperties":false}},{"type":"null"}]},"usikkerhedGoingConcern":{"description":"Eventuel usikkerhed omkring going concern-forudsætningen","type":["string","null"]},"analyseOgTendenser":{"default":[],"description":"Array af analyse-punkter der beskriver finansielle tendenser, udvikling i nøgletal og væsentlige ændringer over tid","anyOf":[{"maxItems":10,"type":"array","items":{"type":["string","null"]}},{"type":"null"}]}},"required":["regnskabsdata","analyseOgTendenser"],"additionalProperties":false},{"type":"null"}],"description":"Finansiel status med regnskabstal, analyse og tendenser"},"senesteNyt":{"anyOf":[{"type":"object","properties":{"nyheder":{"default":[],"description":"Array af nyhedsstrenge inkl. dato/periode, der dækker certificeringer, større hændelser, teknologiimplementeringer, brancheudviklingen og kundeoplevelser. Hver nyhed skal være konkret og dateret. Kildelinks inkluderes som markdown-links i parentes til sidst, f.eks. 'Nyhedstekst ([Kildenavn](https://url.dk))'.","anyOf":[{"maxItems":10,"type":"array","items":{"type":["string","null"]}},{"type":"null"}]}},"required":["nyheder"],"additionalProperties":false},{"type":"null"}],"description":"Seneste nyheder, begivenheder og udvikling i virksomheden"},"swotAnalyse":{"anyOf":[{"type":"object","properties":{"styrker":{"default":[],"description":"Array af konkrete interne styrker ved virksomheden, baseret på dokumenterede forhold og observerbare mønstre","anyOf":[{"maxItems":8,"type":"array","items":{"type":["string","null"]}},{"type":"null"}]},"svagheder":{"default":[],"description":"Array af konkrete interne svagheder eller begrænsninger, baseret på data og tilgængelig kontekst","anyOf":[{"maxItems":8,"type":"array","items":{"type":["string","null"]}},{"type":"null"}]},"muligheder":{"default":[],"description":"Array af eksterne muligheder eller vækstspor, som virksomheden realistisk kan udnytte","anyOf":[{"maxItems":8,"type":"array","items":{"type":["string","null"]}},{"type":"null"}]},"trusler":{"default":[],"description":"Array af eksterne trusler eller markedsrisici, der kan påvirke virksomheden negativt","anyOf":[{"maxItems":8,"type":"array","items":{"type":["string","null"]}},{"type":"null"}]}},"required":["styrker","svagheder","muligheder","trusler"],"additionalProperties":false},{"type":"null"}],"description":"SWOT-analyse med styrker, svagheder, muligheder og trusler"},"identificeredeUdfordringer":{"anyOf":[{"type":"object","properties":{"direkteData":{"default":[],"description":"Array af udfordringer baseret på direkte observerbare data fra regnskab og faktiske forhold (f.eks. volatilitet, faldende likviditet, omkostningsstruktur)","anyOf":[{"maxItems":8,"type":"array","items":{"type":["string","null"]}},{"type":"null"}]},"fagligeFortolkninger":{"default":[],"description":"Array af faglige fortolkninger og vurderinger af underliggende risici og svagheder baseret på data og kontekst (f.eks. projektstyring, rekruttering, omdømme, digitalisering)","anyOf":[{"maxItems":10,"type":"array","items":{"type":["string","null"]}},{"type":"null"}]},"stoetteordningerOgKlynger":{"default":[],"description":"Array af relevante offentlige støtteordninger, tilskudsmuligheder og brancheklynger som virksomheden kan drage nytte af","anyOf":[{"maxItems":5,"type":"array","items":{"type":["string","null"]}},{"type":"null"}]}},"required":["direkteData","fagligeFortolkninger","stoetteordningerOgKlynger"],"additionalProperties":false},{"type":"null"}],"description":"Identificerede udfordringer baseret på data og faglige vurderinger"},"forslagTilSamtalepunkter":{"anyOf":[{"type":"object","properties":{"samtalepunkter":{"default":[],"description":"Array af 3-6 korte, konkrete spørgsmål til ledelsen. Hvert spørgsmål skal kunne siges højt i mødet, være knyttet til en konkret oplysning eller åben beslutning og invitere til dialog.","anyOf":[{"maxItems":12,"type":"array","items":{"type":["string","null"]}},{"type":"null"}]}},"required":["samtalepunkter"],"additionalProperties":false},{"type":"null"}],"description":"Forslag til konkrete diskussionspunkter til møde med virksomhedens ledelse"},"relationshipHistory":{"anyOf":[{"type":"object","properties":{"lastMeeting":{"anyOf":[{"type":"object","properties":{"summaryId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}]},"date":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]}},"required":["summaryId","title","date"],"additionalProperties":false},{"type":"null"}]},"meetingCount":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"openItems":{"default":[],"maxItems":30,"type":"array","items":{"type":"object","properties":{"text":{"type":"string","maxLength":1500},"itemKind":{"type":"string","enum":["agreement","todo"]},"responsible":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"deadline":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}]},"sourceSummaryId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["text","itemKind","responsible","deadline","sourceSummaryId"],"additionalProperties":false}}},"required":["lastMeeting","meetingCount","openItems"],"additionalProperties":false},{"type":"null"}],"description":"Siden sidst: seneste møde og åbne aftaler/opgaver fra godkendte referater. Bygges deterministisk fra egne data."},"openWork":{"anyOf":[{"type":"object","properties":{"items":{"default":[],"maxItems":10,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","maxLength":255,"description":"Record name"},"workflowLabel":{"type":"string","maxLength":128,"description":"The workflow's own singular label (fx Deal, Sparringsforløb)"},"pipelineName":{"type":"string","maxLength":128},"stageName":{"type":"string","maxLength":128,"description":"Current stage, workspace-defined"},"stagePosition":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"1-based position of the stage"},"stageCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Total stages in the pipeline"},"probability":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"valueOere":{"type":["number","null"]},"currency":{"anyOf":[{"type":"string","maxLength":3},{"type":"null"}]},"valueLabel":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"expectedDate":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]},"dateLabel":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"lastActivityAt":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]}},"required":["name","workflowLabel","pipelineName","stageName","stagePosition","stageCount","probability","valueOere","currency","valueLabel","expectedDate","dateLabel","lastActivityAt"],"additionalProperties":false}},"recentlyClosed":{"default":[],"maxItems":5,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","maxLength":255},"workflowLabel":{"type":"string","maxLength":128},"status":{"type":"string","enum":["WON","LOST"]},"lostReason":{"anyOf":[{"type":"string","enum":["PRICE","TIMING","COMPETITOR","NO_BUDGET","NO_DECISION","OTHER"]},{"type":"null"}]},"closedAt":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}]}},"required":["name","workflowLabel","status","lostReason","closedAt"],"additionalProperties":false}},"workflowPluralLabel":{"default":null,"description":"Forløbstypens egen betegnelse i flertal (fx Sager)","anyOf":[{"type":"string","maxLength":128},{"type":"null"}]}},"required":["items","recentlyClosed","workflowPluralLabel"],"additionalProperties":false},{"type":"null"}],"description":"Åbne forløb: virksomhedens åbne poster på tværs af arbejdsområdets pipelines (deals, sparringsforløb, projekter m.m.) med hvert forløbs egne betegnelser, plus nyligt afsluttede. Bygges deterministisk fra Work-motoren."},"attendees":{"anyOf":[{"type":"object","properties":{"fromCalendar":{"type":"boolean"},"people":{"default":[],"maxItems":12,"type":"array","items":{"type":"object","properties":{"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}]},"email":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}]},"title":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}]},"known":{"type":"boolean"}},"required":["name","email","title","known"],"additionalProperties":false}}},"required":["fromCalendar","people"],"additionalProperties":false},{"type":"null"}],"description":"Mødedeltagere: deltagere fra det tilknyttede kalendermøde matchet mod personkartoteket, eller virksomhedens kendte kontakter. Bygges deterministisk."},"timelyTriggers":{"anyOf":[{"type":"object","properties":{"items":{"anyOf":[{"maxItems":10,"type":"array","items":{"type":["string","null"]}},{"type":"null"}]}},"additionalProperties":false},{"type":"null"}],"description":"Aktuelle anledninger: daterede, dokumenterede begivenheder der giver en konkret anledning til at handle nu, med kilde."},"concernsRaised":{"anyOf":[{"type":"object","properties":{"items":{"anyOf":[{"maxItems":10,"type":"array","items":{"type":["string","null"]}},{"type":"null"}]}},"additionalProperties":false},{"type":"null"}],"description":"Rejste bekymringer: bekymringer og indvendinger virksomheden selv har rejst i tidligere møder, med status hvis kendt."},"customSections":{"anyOf":[{"maxItems":10,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","maxLength":64,"description":"Stable machine key of the custom module"},"title":{"type":"string","maxLength":200,"description":"Display title of the custom module at generation time"},"body":{"type":"string","maxLength":8000,"description":"Generated prose for the section"}},"required":["key","title","body"],"additionalProperties":false}},{"type":"null"}],"description":"Brugerdefinerede prosasektioner fra arbejdsområdets briefing-moduler, i modulrækkefølge. Tomme sektioner udelades."}},"additionalProperties":false},{"type":"null"}]},"sections":{"description":"The briefing body projected into renderer-neutral sections, in display order. Present only when the request passes `include=sections`; empty while the briefing is generating.","type":"array","items":{"oneOf":[{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","const":"prose"},"title":{"description":"Display heading for user-defined sections (ids prefixed custom:). Null for registry sections, whose headings come from the client's own localization.","type":["string","null"]},"paragraphs":{"type":"array","items":{"type":"string"}}},"required":["id","kind","title","paragraphs"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","const":"bulletList"},"groups":{"type":"array","items":{"type":"object","properties":{"groupId":{"type":["string","null"]},"items":{"type":"array","items":{"type":"string"}}},"required":["groupId","items"],"additionalProperties":false}}},"required":["id","kind","groups"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","const":"metricTable"},"years":{"type":"array","items":{"type":"object","properties":{"year":{"type":["string","null"]},"metrics":{"type":"array","items":{"type":"object","properties":{"metricId":{"type":"string"},"value":{"type":"string"}},"required":["metricId","value"],"additionalProperties":false}}},"required":["year","metrics"],"additionalProperties":false}},"goingConcern":{"type":["string","null"]},"analysis":{"type":"array","items":{"type":"string"}}},"required":["id","kind","years","goingConcern","analysis"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","const":"quadrant"},"quadrants":{"type":"array","items":{"type":"object","properties":{"quadrantId":{"type":"string","enum":["strengths","weaknesses","opportunities","threats"]},"items":{"type":"array","items":{"type":"string"}}},"required":["quadrantId","items"],"additionalProperties":false}}},"required":["id","kind","quadrants"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","const":"questionList"},"questions":{"type":"array","items":{"type":"string"}}},"required":["id","kind","questions"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","const":"historyList"},"lastMeeting":{"anyOf":[{"type":"object","properties":{"summaryId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"title":{"type":["string","null"]},"date":{"type":["string","null"]}},"required":["summaryId","title","date"],"additionalProperties":false},{"type":"null"}]},"meetingCount":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"openItems":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"itemKind":{"type":"string","enum":["agreement","todo"]},"responsible":{"type":["string","null"]},"deadline":{"type":["string","null"]},"sourceSummaryId":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["text","itemKind","responsible","deadline","sourceSummaryId"],"additionalProperties":false}}},"required":["id","kind","lastMeeting","meetingCount","openItems"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","const":"workList"},"workflowPluralLabel":{"description":"The workflow's own plural label (e.g. Deals, Sparringsforløb), set when every record in the section comes from one workflow. Clients may use it as the section heading; null falls back to the generic heading.","type":["string","null"]},"items":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"workflowLabel":{"type":"string"},"pipelineName":{"type":"string"},"stageName":{"type":"string"},"stagePosition":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"stageCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"probability":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"valueOere":{"type":["number","null"]},"currency":{"type":["string","null"]},"valueLabel":{"type":["string","null"]},"expectedDate":{"type":["string","null"]},"dateLabel":{"type":["string","null"]},"lastActivityAt":{"type":["string","null"]}},"required":["name","workflowLabel","pipelineName","stageName","stagePosition","stageCount","probability","valueOere","currency","valueLabel","expectedDate","dateLabel","lastActivityAt"],"additionalProperties":false}},"recentlyClosed":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"workflowLabel":{"type":"string"},"status":{"type":"string","enum":["WON","LOST"]},"lostReason":{"anyOf":[{"type":"string","enum":["PRICE","TIMING","COMPETITOR","NO_BUDGET","NO_DECISION","OTHER"]},{"type":"null"}]},"closedAt":{"type":["string","null"]}},"required":["name","workflowLabel","status","lostReason","closedAt"],"additionalProperties":false}}},"required":["id","kind","workflowPluralLabel","items","recentlyClosed"],"additionalProperties":false},{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","const":"personList"},"fromCalendar":{"type":"boolean"},"people":{"type":"array","items":{"type":"object","properties":{"name":{"type":["string","null"]},"email":{"type":["string","null"]},"title":{"type":["string","null"]},"known":{"type":"boolean"}},"required":["name","email","title","known"],"additionalProperties":false}}},"required":["id","kind","fromCalendar","people"],"additionalProperties":false}],"description":"One renderable briefing section, discriminated by `kind`. Section ids and metric/group/quadrant identifiers are stable English keys."}}},"required":["id","version","name","status","createdAt","updatedAt","company","content"],"additionalProperties":false}},"required":["briefing"],"additionalProperties":false},"BriefingCreateRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"additionalContext":{"type":"string","minLength":1,"maxLength":10000},"companyId":{"type":"integer","exclusiveMinimum":0,"maximum":2147483647}},"required":["companyId"],"additionalProperties":false},"SummaryListResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"items":{"maxItems":50,"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"version":{"type":"string","minLength":1,"maxLength":512,"pattern":"^v1\\.[A-Za-z0-9_-]+$"},"name":{"type":"string"},"status":{"type":"string","enum":["WAITING","WAITING_APPROVAL","APPROVED","FAILED"]},"evidenceAudience":{"type":"string","enum":["CUSTOMER","INTERNAL"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"appointmentDate":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"durationSec":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"company":{"anyOf":[{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"}},"required":["id","name"],"additionalProperties":false},{"type":"null"}]},"excerpt":{"type":["string","null"]}},"required":["id","version","name","status","evidenceAudience","createdAt","updatedAt","appointmentDate","durationSec","company","excerpt"],"additionalProperties":false}},"nextCursor":{"anyOf":[{"type":"string","minLength":1,"maxLength":512},{"type":"null"}]}},"required":["items","nextCursor"],"additionalProperties":false},"SummaryDetailResponse":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"summary":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"version":{"type":"string","minLength":1,"maxLength":512,"pattern":"^v1\\.[A-Za-z0-9_-]+$"},"name":{"type":"string"},"status":{"type":"string","enum":["WAITING","WAITING_APPROVAL","APPROVED","FAILED"]},"evidenceAudience":{"type":"string","enum":["CUSTOMER","INTERNAL"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"appointmentDate":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},{"type":"null"}]},"appointmentSubject":{"type":["string","null"]},"durationSec":{"anyOf":[{"type":"integer","minimum":0,"maximum":9007199254740991},{"type":"null"}]},"internalNotes":{"type":["string","null"]},"company":{"anyOf":[{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"name":{"type":"string"},"organizationNumber":{"type":"string"}},"required":["id","name","organizationNumber"],"additionalProperties":false},{"type":"null"}]},"content":{"anyOf":[{"type":"object","properties":{"titel":{"description":"Kort, beskrivende titel for mødereferatet der opsummerer mødets hovedformål (3-10 ord). Eksempel: 'Strategi for digital transformation' eller 'Opfølgning på eksportplaner'","type":"string","maxLength":200},"opsummering":{"description":"Sammenhængende opsummering af hele mødet som flydende prosa; længden skaleres efter mødets længde – følg instruktionerne. Skal give læseren et hurtigt overblik over mødets vigtigste pointer, beslutninger og næste skridt. Ingen punktopstillinger eller markdown.","type":"string","maxLength":1500},"hvadBlevDroeftet":{"default":{"emner":[]},"type":"object","properties":{"emner":{"default":[],"description":"Array af de vigtigste emner, problemstillinger og muligheder der blev drøftet under mødet. Antallet skaleres efter mødets længde – følg instruktionerne.","maxItems":30,"type":"array","items":{"type":"object","properties":{"emne":{"type":"string","maxLength":200,"description":"Kort titel på emnet der blev drøftet (1 sætning, ca. 5-12 ord)"},"beskrivelse":{"type":"string","maxLength":2000,"description":"Uddybende beskrivelse af hvad der blev diskuteret omkring emnet, inkl. problemstillinger og muligheder (2-4 sætninger)"},"rejstAf":{"description":"Hvem der primært rejste emnet: 'virksomhed', 'konsulent', eller 'fælles' dialog. Udelades hvis det ikke fremgår tydeligt.","type":"string","enum":["virksomhed","konsulent","fælles"]}},"required":["emne","beskrivelse"],"additionalProperties":false}}},"required":["emner"],"additionalProperties":false,"description":"Sektion 1: Hvad blev drøftet - de vigtigste emner, problemstillinger og muligheder fra mødet"},"hvadBlevAftalt":{"default":{},"type":"object","properties":{"aftaler":{"description":"Array af centrale aftaler og beslutninger truffet under mødet. Medtag alle konkrete aftaler; kan være tomt hvis ingen blev truffet.","maxItems":25,"type":"array","items":{"type":"object","properties":{"aftale":{"type":"string","maxLength":1500,"description":"Kort beskrivelse af hvad der blev aftalt eller besluttet (1-2 sætninger)"},"ansvarlig":{"description":"Hvem der er ansvarlig for aftalen: virksomhed, konsulent, eller navngiven person/rolle. Udelades hvis det ikke fremgår.","type":"string","maxLength":200},"deadline":{"description":"Tidshorisont eller deadline for aftalen, fx 'Inden næste møde', '01.10.2025'. Udelades hvis det ikke fremgår.","type":"string","maxLength":200}},"required":["aftale"],"additionalProperties":false}},"ingenAftaler":{"description":"Hvis der ikke blev truffet konkrete aftaler, beskrives dette her, inkl. eventuelle forventede næste skridt.","type":"string","maxLength":1500}},"additionalProperties":false,"description":"Sektion 2: Hvad blev aftalt - centrale beslutninger og aftaler truffet under mødet"},"todos":{"default":{},"type":"object","properties":{"opgaver":{"description":"Array af konkrete opgaver der skal udføres som opfølgning på mødet. Kun opgaver der tydeligt fremgår af mødet medtages.","maxItems":30,"type":"array","items":{"type":"object","properties":{"opgave":{"type":"string","maxLength":1500,"description":"Beskrivelse af den konkrete opgave der skal udføres (1-2 sætninger)"},"ansvarlig":{"description":"Hvem der er ansvarlig for opgaven: 'Virksomheden', 'Konsulent', eller navngiven person. Udelades hvis det ikke fremgår.","type":"string","maxLength":200},"deadline":{"description":"Deadline for opgaven, fx '01.10.2025' eller 'Ikke fastlagt'. Udelades hvis det ikke fremgår.","type":"string","maxLength":200},"prioritet":{"description":"Opgavens prioritet baseret på kontekst i mødet. Udelades hvis det ikke kan vurderes.","type":"string","enum":["høj","mellem","lav"]}},"required":["opgave"],"additionalProperties":false}}},"additionalProperties":false,"description":"Sektion 3: To-dos - konkret checkliste med opgaver til opfølgning"},"context":{"default":[],"description":"Tag-slugs der beskriver mødets hovedtemaer. Vælg KUN slugs fra den medsendte taxonomy der tydeligt blev diskuteret. Kan være tomt hvis ingen passer.","maxItems":5,"type":"array","items":{"type":"string"}}},"required":["hvadBlevDroeftet","hvadBlevAftalt","todos","context"],"additionalProperties":false},{"type":"null"}]}},"required":["id","version","name","status","evidenceAudience","createdAt","updatedAt","appointmentDate","appointmentSubject","durationSec","internalNotes","company","content"],"additionalProperties":false}},"required":["summary"],"additionalProperties":false},"SummaryPatchRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"internalNotes":{"anyOf":[{"type":"string","maxLength":50000},{"type":"null"}]}},"required":["internalNotes"],"additionalProperties":false},"SummaryApproveRequest":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"appointmentDate":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"content":{"type":"object","properties":{"titel":{"description":"Kort, beskrivende titel for mødereferatet der opsummerer mødets hovedformål (3-10 ord). Eksempel: 'Strategi for digital transformation' eller 'Opfølgning på eksportplaner'","type":"string","maxLength":200},"opsummering":{"description":"Sammenhængende opsummering af hele mødet som flydende prosa; længden skaleres efter mødets længde – følg instruktionerne. Skal give læseren et hurtigt overblik over mødets vigtigste pointer, beslutninger og næste skridt. Ingen punktopstillinger eller markdown.","type":"string","maxLength":1500},"hvadBlevDroeftet":{"default":{"emner":[]},"type":"object","properties":{"emner":{"default":[],"description":"Array af de vigtigste emner, problemstillinger og muligheder der blev drøftet under mødet. Antallet skaleres efter mødets længde – følg instruktionerne.","maxItems":30,"type":"array","items":{"type":"object","properties":{"emne":{"type":"string","maxLength":200,"description":"Kort titel på emnet der blev drøftet (1 sætning, ca. 5-12 ord)"},"beskrivelse":{"type":"string","maxLength":2000,"description":"Uddybende beskrivelse af hvad der blev diskuteret omkring emnet, inkl. problemstillinger og muligheder (2-4 sætninger)"},"rejstAf":{"description":"Hvem der primært rejste emnet: 'virksomhed', 'konsulent', eller 'fælles' dialog. Udelades hvis det ikke fremgår tydeligt.","type":"string","enum":["virksomhed","konsulent","fælles"]}},"required":["emne","beskrivelse"],"additionalProperties":false}}},"required":["emner"],"additionalProperties":false,"description":"Sektion 1: Hvad blev drøftet - de vigtigste emner, problemstillinger og muligheder fra mødet"},"hvadBlevAftalt":{"default":{},"type":"object","properties":{"aftaler":{"description":"Array af centrale aftaler og beslutninger truffet under mødet. Medtag alle konkrete aftaler; kan være tomt hvis ingen blev truffet.","maxItems":25,"type":"array","items":{"type":"object","properties":{"aftale":{"type":"string","maxLength":1500,"description":"Kort beskrivelse af hvad der blev aftalt eller besluttet (1-2 sætninger)"},"ansvarlig":{"description":"Hvem der er ansvarlig for aftalen: virksomhed, konsulent, eller navngiven person/rolle. Udelades hvis det ikke fremgår.","type":"string","maxLength":200},"deadline":{"description":"Tidshorisont eller deadline for aftalen, fx 'Inden næste møde', '01.10.2025'. Udelades hvis det ikke fremgår.","type":"string","maxLength":200}},"required":["aftale"],"additionalProperties":false}},"ingenAftaler":{"description":"Hvis der ikke blev truffet konkrete aftaler, beskrives dette her, inkl. eventuelle forventede næste skridt.","type":"string","maxLength":1500}},"additionalProperties":false,"description":"Sektion 2: Hvad blev aftalt - centrale beslutninger og aftaler truffet under mødet"},"todos":{"default":{},"type":"object","properties":{"opgaver":{"description":"Array af konkrete opgaver der skal udføres som opfølgning på mødet. Kun opgaver der tydeligt fremgår af mødet medtages.","maxItems":30,"type":"array","items":{"type":"object","properties":{"opgave":{"type":"string","maxLength":1500,"description":"Beskrivelse af den konkrete opgave der skal udføres (1-2 sætninger)"},"ansvarlig":{"description":"Hvem der er ansvarlig for opgaven: 'Virksomheden', 'Konsulent', eller navngiven person. Udelades hvis det ikke fremgår.","type":"string","maxLength":200},"deadline":{"description":"Deadline for opgaven, fx '01.10.2025' eller 'Ikke fastlagt'. Udelades hvis det ikke fremgår.","type":"string","maxLength":200},"prioritet":{"description":"Opgavens prioritet baseret på kontekst i mødet. Udelades hvis det ikke kan vurderes.","type":"string","enum":["høj","mellem","lav"]}},"required":["opgave"],"additionalProperties":false}}},"additionalProperties":false,"description":"Sektion 3: To-dos - konkret checkliste med opgaver til opfølgning"}},"required":["hvadBlevDroeftet","hvadBlevAftalt","todos"],"additionalProperties":false}},"additionalProperties":false}},"securitySchemes":{"bearerAuth":{"bearerFormat":"Floral PAT","description":"Authenticate with a workspace-pinned Floral personal access token.","scheme":"bearer","type":"http"}}},"info":{"description":"Stable external API for relationship lookup and meeting intelligence.\n\nVersioning and deprecation: the major version in the path (/api/v1) is the compatibility boundary. Within a major version only additive changes are made (new operations, optional request fields and filters, response fields, enum values where documented). A breaking change ships as a new major path with at least 180 days of overlap; the replacement, migration steps, effective date and support channel are published before the overlap starts, and deprecated operations are marked in the API reference with their replacement. Full policy: https://docs.floral.so/developers/api/versioning.md","title":"Floral Public API","version":"1.0.0","contact":{"name":"Floral","url":"https://floral.so/developers","email":"hi@floral.so"},"termsOfService":"https://floral.so/terms-of-service","x-versioning-policy":"https://docs.floral.so/developers/api/versioning.md"},"openapi":"3.1.0","paths":{"/api/v1/workspaces/{workspaceSlug}/relationships/search":{"get":{"description":"Search active companies and people in one workspace.","operationId":"searchRelationshipsV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"in":"query","description":"Case-insensitive company or person search text.","example":"Acme","name":"q","required":true,"schema":{"type":"string","minLength":3,"maxLength":200}},{"in":"query","description":"Maximum combined matches to return.","example":8,"name":"limit","required":false,"schema":{"default":8,"type":"integer","maximum":20,"minimum":1}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"companies":[{"email":"hello@acme-nordic.example","id":42,"industry":"Design","lifecycleStage":"PROSPECT","name":"Acme Nordic","organizationNumber":"12345678","phone":"+45 33 12 34 56","type":"company"}],"people":[{"companyId":42,"companyName":"Acme Nordic","email":"ada@acme-nordic.example","id":84,"lifecycleStage":"PROSPECT","mobile":"+45 20 11 22 33","name":"Ada Jensen","phone":"+45 33 12 34 56","title":"Operations director","type":"person"}]},"schema":{"$ref":"#/components/schemas/RelationshipSearchResponse"}}},"description":"Successful response","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:read"]}],"summary":"Search companies and people","tags":["Search"],"x-error-profile":"E-READ","x-audit-profile":"NONE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/relationships/search?limit=8&q=Acme' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN'"}],"x-rate-limit-class":"READ","x-rate-limit-per-minute":120,"x-rate-limit-window-seconds":60,"x-reliability-profile":"READ","x-required-scopes":["contacts:read"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/company-registry/search":{"get":{"description":"Search company-register data by exact CVR or company name.","operationId":"searchCompanyRegistryV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"in":"query","description":"Exactly eight digits when type=cvr; 3–200 characters when type=name.","example":"12345678","name":"q","required":true,"schema":{"anyOf":[{"type":"string","pattern":"^[0-9]{8}$"},{"type":"string","minLength":3,"maxLength":200}]}},{"in":"query","description":"Select exact CVR lookup or company-name search.","example":"cvr","name":"type","required":true,"schema":{"enum":["cvr","name"],"type":"string"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"company":{"address":"Havnevej 12","city":"Copenhagen","name":"Acme Nordic ApS","type":"Anpartsselskab","vat":12345678,"zip":"2100"}},"schema":{"$ref":"#/components/schemas/CompanyRegistrySearchResponse"}}},"description":"Successful response","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:read"]}],"summary":"Search the Danish company registry","tags":["Company registry"],"x-error-profile":"E-READ","x-audit-profile":"NONE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/company-registry/search?q=12345678&type=cvr' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN'"}],"x-rate-limit-class":"READ","x-rate-limit-per-minute":120,"x-rate-limit-window-seconds":60,"x-reliability-profile":"READ","x-required-scopes":["contacts:read"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/companies":{"get":{"description":"List a cursor-paginated company collection in one workspace.","operationId":"listCompaniesV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"in":"query","description":"Opaque cursor returned as nextCursor by the previous page. Do not inspect or construct it.","example":"eyJpZCI6NDIsInNvcnQiOiJ1cGRhdGVkLWRlc2MifQ","name":"cursor","required":false,"schema":{"type":"string","maxLength":512}},{"in":"query","description":"Restrict results to one lifecycle stage.","example":"PROSPECT","name":"lifecycleStage","required":false,"schema":{"type":"string","enum":["LEAD","PROSPECT","CUSTOMER","CHURNED"]}},{"in":"query","description":"Number of items to return.","example":20,"name":"limit","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"in":"query","description":"Stable collection ordering used by the cursor.","example":"updated-desc","name":"sort","required":false,"schema":{"default":"updated-desc","type":"string","enum":["updated-desc","name-asc"]}},{"in":"query","description":"Lifecycle state to include in the collection.","example":"active","name":"status","required":false,"schema":{"default":"active","type":"string","enum":["active","archived","all"]}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"items":[{"archivedAt":null,"email":"hello@acme-nordic.example","id":42,"lastActivityAt":"2026-08-15T09:30:00.000Z","lifecycleStage":"PROSPECT","name":"Acme Nordic","organizationNumber":"12345678","phone":"+45 33 12 34 56","updatedAt":"2026-08-15T09:30:00.000Z","version":"v1.eyJpZCI6NDIsInJlc291cmNlIjoiY29tcGFueSIsInZlcnNpb24iOiIyMDI2LTA4LTE1VDA5OjMwOjAwLjAwMFoifQ","website":"https://acme-nordic.example"}],"nextCursor":"eyJpZCI6NDIsInNvcnQiOiJ1cGRhdGVkLWRlc2MifQ"},"schema":{"$ref":"#/components/schemas/CompanyListResponse"}}},"description":"Successful response","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:read"]}],"summary":"List companies","tags":["Companies"],"x-error-profile":"E-READ","x-audit-profile":"NONE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/companies?limit=20&status=active' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN'"}],"x-rate-limit-class":"READ","x-rate-limit-per-minute":120,"x-rate-limit-window-seconds":60,"x-reliability-profile":"READ","x-required-scopes":["contacts:read"],"x-visibility":"public"},"post":{"description":"Create a company or resolve the canonical workspace company for a supplied CVR.","operationId":"createCompanyV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Required idempotency key. Exact retries of the same canonical request replay the original status, body, ETag, Location, and request ID for 24 hours.","example":"createCompanyV1-20260816-001","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":255,"minLength":1,"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"customFields":{"account_tier":"growth"},"email":"hello@acme-nordic.example","lifecycleStage":"PROSPECT","metadata":{"source":"partner-directory"},"name":"Acme Nordic","organizationNumber":"12345678","website":"https://acme-nordic.example"},"schema":{"$ref":"#/components/schemas/CompanyCreate"}}},"description":"Company profile. Metadata and custom fields require Work access. Maximum 65536 bytes.","required":true},"responses":{"201":{"content":{"application/json":{"example":{"company":{"annualRevenueOere":12500000,"archivedAt":null,"customFields":{"account_tier":"growth"},"description":"Nordic workplace design and furniture supplier.","email":"hello@acme-nordic.example","employeeCount":48,"id":42,"industry":"Design","lastActivityAt":"2026-08-15T09:30:00.000Z","lifecycleStage":"PROSPECT","linkedinUrl":"https://www.linkedin.com/company/acme-nordic","metadata":{"source":"partner-directory"},"name":"Acme Nordic","organizationNumber":"12345678","ownerUserIds":["user_01J5N9CF9QY8T4M2A7W3R6K1P0"],"people":[{"email":"ada@acme-nordic.example","id":84,"name":"Ada Jensen","title":"Operations director"}],"phone":"+45 33 12 34 56","updatedAt":"2026-08-15T09:30:00.000Z","version":"v1.eyJpZCI6NDIsInJlc291cmNlIjoiY29tcGFueSIsInZlcnNpb24iOiIyMDI2LTA4LTE1VDA5OjMwOjAwLjAwMFoifQ","website":"https://acme-nordic.example"}},"schema":{"$ref":"#/components/schemas/CompanyDetailResponse"}}},"description":"Company created or resolved","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.eyJpZCI6NDIsInJlc291cmNlIjoiY29tcGFueSIsInZlcnNpb24iOiIyMDI2LTA4LTE1VDA5OjMwOjAwLjAwMFoifQ\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}},"Location":{"description":"Canonical path of the created resource.","example":"/api/v1/workspaces/acme-nordic/companies/42","schema":{"format":"uri-reference","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"409":{"content":{"application/json":{"example":{"error":{"code":"CONFLICT","message":"The requested change conflicts with the current resource state.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["CONFLICT","IDEMPOTENCY_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: CONFLICT, IDEMPOTENCY_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:write"]}],"summary":"Create or resolve a company","tags":["Companies"],"x-error-profile":"E-CREATE","x-audit-profile":"CRITICAL_CHANGE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request POST \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/companies' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN' \\\n  --header 'Idempotency-Key: createCompanyV1-20260816-001' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"customFields\": {\n    \"account_tier\": \"growth\"\n  },\n  \"email\": \"hello@acme-nordic.example\",\n  \"lifecycleStage\": \"PROSPECT\",\n  \"metadata\": {\n    \"source\": \"partner-directory\"\n  },\n  \"name\": \"Acme Nordic\",\n  \"organizationNumber\": \"12345678\",\n  \"website\": \"https://acme-nordic.example\"\n}'"}],"x-idempotency-window-hours":24,"x-rate-limit-class":"CREATE","x-rate-limit-per-minute":60,"x-rate-limit-window-seconds":60,"x-reliability-profile":"CREATE","x-required-scopes":["contacts:write"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/companies/{id}":{"get":{"description":"Get a bounded company profile and its active people.","operationId":"getCompanyV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Stable numeric resource ID.","example":42,"in":"path","name":"id","required":true,"schema":{"minimum":1,"type":"integer"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"company":{"annualRevenueOere":12500000,"archivedAt":null,"customFields":{"account_tier":"growth"},"description":"Nordic workplace design and furniture supplier.","email":"hello@acme-nordic.example","employeeCount":48,"id":42,"industry":"Design","lastActivityAt":"2026-08-15T09:30:00.000Z","lifecycleStage":"PROSPECT","linkedinUrl":"https://www.linkedin.com/company/acme-nordic","metadata":{"source":"partner-directory"},"name":"Acme Nordic","organizationNumber":"12345678","ownerUserIds":["user_01J5N9CF9QY8T4M2A7W3R6K1P0"],"people":[{"email":"ada@acme-nordic.example","id":84,"name":"Ada Jensen","title":"Operations director"}],"phone":"+45 33 12 34 56","updatedAt":"2026-08-15T09:30:00.000Z","version":"v1.eyJpZCI6NDIsInJlc291cmNlIjoiY29tcGFueSIsInZlcnNpb24iOiIyMDI2LTA4LTE1VDA5OjMwOjAwLjAwMFoifQ","website":"https://acme-nordic.example"}},"schema":{"$ref":"#/components/schemas/CompanyDetailResponse"}}},"description":"Successful response","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.eyJpZCI6NDIsInJlc291cmNlIjoiY29tcGFueSIsInZlcnNpb24iOiIyMDI2LTA4LTE1VDA5OjMwOjAwLjAwMFoifQ\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:read"]}],"summary":"Get a company","tags":["Companies"],"x-error-profile":"E-READ","x-audit-profile":"NONE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/companies/42' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN'"}],"x-rate-limit-class":"READ","x-rate-limit-per-minute":120,"x-rate-limit-window-seconds":60,"x-reliability-profile":"READ","x-required-scopes":["contacts:read"],"x-visibility":"public"},"patch":{"description":"Apply a partial profile update and typed custom-field merge patch. Lifecycle, metadata, and custom fields require Work access.","operationId":"updateCompanyV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Stable numeric resource ID.","example":42,"in":"path","name":"id","required":true,"schema":{"minimum":1,"type":"integer"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Strong ETag from the latest detail or mutation response. A stale value returns 412 VERSION_CONFLICT.","example":"\"v1.Y29tcGFueS00Mi0y\"","in":"header","name":"If-Match","required":true,"schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"lifecycleStage":"CUSTOMER","metadata":{"source":"partner-directory","tier":"customer"},"phone":"+45 33 12 34 56"},"schema":{"$ref":"#/components/schemas/CompanyPatch"}}},"description":"Fields omitted from the patch remain unchanged. Explicit null clears a nullable field. Lifecycle, metadata, and custom fields require Work access. Maximum 65536 bytes.","required":true},"responses":{"200":{"content":{"application/json":{"example":{"company":{"annualRevenueOere":12500000,"archivedAt":null,"customFields":{"account_tier":"growth"},"description":"Nordic workplace design and furniture supplier.","email":"hello@acme-nordic.example","employeeCount":48,"id":42,"industry":"Design","lastActivityAt":"2026-08-15T09:30:00.000Z","lifecycleStage":"CUSTOMER","linkedinUrl":"https://www.linkedin.com/company/acme-nordic","metadata":{"source":"partner-directory","tier":"customer"},"name":"Acme Nordic","organizationNumber":"12345678","ownerUserIds":["user_01J5N9CF9QY8T4M2A7W3R6K1P0"],"people":[{"email":"ada@acme-nordic.example","id":84,"name":"Ada Jensen","title":"Operations director"}],"phone":"+45 33 12 34 56","updatedAt":"2026-08-15T09:30:00.000Z","version":"v1.Y29tcGFueS00Mi0y","website":"https://acme-nordic.example"}},"schema":{"$ref":"#/components/schemas/CompanyDetailResponse"}}},"description":"Company updated","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.Y29tcGFueS00Mi0y\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"409":{"content":{"application/json":{"example":{"error":{"code":"CONFLICT","message":"The requested change conflicts with the current resource state.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"412":{"content":{"application/json":{"example":{"error":{"code":"VERSION_CONFLICT","message":"The resource changed since it was read.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["VERSION_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: VERSION_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"428":{"content":{"application/json":{"example":{"error":{"code":"PRECONDITION_REQUIRED","message":"If-Match is required for this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["PRECONDITION_REQUIRED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: PRECONDITION_REQUIRED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:write"]}],"summary":"Update a company","tags":["Companies"],"x-error-profile":"E-WRITE","x-audit-profile":"CRITICAL_CHANGE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request PATCH \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/companies/42' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN' \\\n  --header 'If-Match: \"v1.Y29tcGFueS00Mi0y\"' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"lifecycleStage\": \"CUSTOMER\",\n  \"metadata\": {\n    \"source\": \"partner-directory\",\n    \"tier\": \"customer\"\n  },\n  \"phone\": \"+45 33 12 34 56\"\n}'"}],"x-rate-limit-class":"WRITE","x-rate-limit-per-minute":60,"x-rate-limit-window-seconds":60,"x-reliability-profile":"WRITE","x-required-scopes":["contacts:write"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/companies/{id}/archive":{"post":{"description":"Soft archive an active company while preserving its stable ID.","operationId":"archiveCompanyV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Stable numeric resource ID.","example":42,"in":"path","name":"id","required":true,"schema":{"minimum":1,"type":"integer"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Required idempotency key. Exact retries of the same canonical request replay the original status, body, ETag, Location, and request ID for 24 hours.","example":"archiveCompanyV1-20260816-001","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":255,"minLength":1,"type":"string"}},{"description":"Strong ETag from the latest detail or mutation response. A stale value returns 412 VERSION_CONFLICT.","example":"\"v1.Y29tcGFueS00Mi0z\"","in":"header","name":"If-Match","required":true,"schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"company":{"annualRevenueOere":12500000,"archivedAt":"2026-08-16T08:30:00.000Z","customFields":{"account_tier":"growth"},"description":"Nordic workplace design and furniture supplier.","email":"hello@acme-nordic.example","employeeCount":48,"id":42,"industry":"Design","lastActivityAt":"2026-08-15T09:30:00.000Z","lifecycleStage":"PROSPECT","linkedinUrl":"https://www.linkedin.com/company/acme-nordic","metadata":{"source":"partner-directory"},"name":"Acme Nordic","organizationNumber":"12345678","ownerUserIds":["user_01J5N9CF9QY8T4M2A7W3R6K1P0"],"people":[{"email":"ada@acme-nordic.example","id":84,"name":"Ada Jensen","title":"Operations director"}],"phone":"+45 33 12 34 56","updatedAt":"2026-08-15T09:30:00.000Z","version":"v1.Y29tcGFueS00Mi0z","website":"https://acme-nordic.example"}},"schema":{"$ref":"#/components/schemas/CompanyDetailResponse"}}},"description":"Company archived","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.Y29tcGFueS00Mi0z\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"409":{"content":{"application/json":{"example":{"error":{"code":"CONFLICT","message":"The requested change conflicts with the current resource state.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["CONFLICT","INVALID_STATE","IDEMPOTENCY_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: CONFLICT, INVALID_STATE, IDEMPOTENCY_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"412":{"content":{"application/json":{"example":{"error":{"code":"VERSION_CONFLICT","message":"The resource changed since it was read.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["VERSION_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: VERSION_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"428":{"content":{"application/json":{"example":{"error":{"code":"PRECONDITION_REQUIRED","message":"If-Match is required for this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["PRECONDITION_REQUIRED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: PRECONDITION_REQUIRED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:write"]}],"summary":"Archive a company","tags":["Companies"],"x-error-profile":"E-ACTION","x-audit-profile":"CRITICAL_CHANGE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request POST \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/companies/42/archive' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN' \\\n  --header 'Idempotency-Key: archiveCompanyV1-20260816-001' \\\n  --header 'If-Match: \"v1.Y29tcGFueS00Mi0z\"'"}],"x-idempotency-window-hours":24,"x-rate-limit-class":"ACTION","x-rate-limit-per-minute":60,"x-rate-limit-window-seconds":60,"x-reliability-profile":"ACTION","x-required-scopes":["contacts:write"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/companies/{id}/restore":{"post":{"description":"Restore an archived company with its stable ID.","operationId":"restoreCompanyV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Stable numeric resource ID.","example":42,"in":"path","name":"id","required":true,"schema":{"minimum":1,"type":"integer"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Required idempotency key. Exact retries of the same canonical request replay the original status, body, ETag, Location, and request ID for 24 hours.","example":"restoreCompanyV1-20260816-001","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":255,"minLength":1,"type":"string"}},{"description":"Strong ETag from the latest detail or mutation response. A stale value returns 412 VERSION_CONFLICT.","example":"\"v1.Y29tcGFueS00Mi00\"","in":"header","name":"If-Match","required":true,"schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"company":{"annualRevenueOere":12500000,"archivedAt":null,"customFields":{"account_tier":"growth"},"description":"Nordic workplace design and furniture supplier.","email":"hello@acme-nordic.example","employeeCount":48,"id":42,"industry":"Design","lastActivityAt":"2026-08-15T09:30:00.000Z","lifecycleStage":"PROSPECT","linkedinUrl":"https://www.linkedin.com/company/acme-nordic","metadata":{"source":"partner-directory"},"name":"Acme Nordic","organizationNumber":"12345678","ownerUserIds":["user_01J5N9CF9QY8T4M2A7W3R6K1P0"],"people":[{"email":"ada@acme-nordic.example","id":84,"name":"Ada Jensen","title":"Operations director"}],"phone":"+45 33 12 34 56","updatedAt":"2026-08-15T09:30:00.000Z","version":"v1.Y29tcGFueS00Mi00","website":"https://acme-nordic.example"}},"schema":{"$ref":"#/components/schemas/CompanyDetailResponse"}}},"description":"Company restored","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.Y29tcGFueS00Mi00\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"409":{"content":{"application/json":{"example":{"error":{"code":"CONFLICT","message":"The requested change conflicts with the current resource state.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["CONFLICT","INVALID_STATE","IDEMPOTENCY_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: CONFLICT, INVALID_STATE, IDEMPOTENCY_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"412":{"content":{"application/json":{"example":{"error":{"code":"VERSION_CONFLICT","message":"The resource changed since it was read.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["VERSION_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: VERSION_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"428":{"content":{"application/json":{"example":{"error":{"code":"PRECONDITION_REQUIRED","message":"If-Match is required for this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["PRECONDITION_REQUIRED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: PRECONDITION_REQUIRED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:write"]}],"summary":"Restore a company","tags":["Companies"],"x-error-profile":"E-ACTION","x-audit-profile":"CRITICAL_CHANGE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request POST \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/companies/42/restore' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN' \\\n  --header 'Idempotency-Key: restoreCompanyV1-20260816-001' \\\n  --header 'If-Match: \"v1.Y29tcGFueS00Mi00\"'"}],"x-idempotency-window-hours":24,"x-rate-limit-class":"ACTION","x-rate-limit-per-minute":60,"x-rate-limit-window-seconds":60,"x-reliability-profile":"ACTION","x-required-scopes":["contacts:write"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/custom-field-definitions":{"get":{"description":"List active public custom-field definitions for companies or people.","operationId":"listCustomFieldDefinitionsV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"in":"query","description":"Opaque cursor returned as nextCursor by the previous page. Do not inspect or construct it.","example":"eyJpZCI6NDIsInNvcnQiOiJ1cGRhdGVkLWRlc2MifQ","name":"cursor","required":false,"schema":{"type":"string","maxLength":512}},{"in":"query","description":"Resource type whose active definitions are returned.","example":"COMPANY","name":"entityType","required":true,"schema":{"type":"string","enum":["COMPANY","PERSON"]}},{"in":"query","description":"Number of items to return.","example":20,"name":"limit","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"items":[{"config":{},"description":"Commercial segment used for reporting.","fieldType":"SINGLE_SELECT","isRequired":false,"key":"account_tier","label":"Account tier","options":[{"color":"green","label":"Growth","value":"growth"},{"color":"blue","label":"Enterprise","value":"enterprise"}],"position":0}],"nextCursor":null},"schema":{"$ref":"#/components/schemas/CustomFieldDefinitionListResponse"}}},"description":"Successful response","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:read"]}],"summary":"List custom-field definitions","tags":["Custom fields"],"x-error-profile":"E-READ","x-audit-profile":"NONE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/custom-field-definitions?entityType=COMPANY&limit=20' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN'"}],"x-rate-limit-class":"READ","x-rate-limit-per-minute":120,"x-rate-limit-window-seconds":60,"x-reliability-profile":"READ","x-required-scopes":["contacts:read"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/people":{"get":{"description":"List a cursor-paginated, data-minimized person collection in one workspace.","operationId":"listPeopleV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"in":"query","description":"Restrict results to people linked to one company ID.","example":42,"name":"companyId","required":false,"schema":{"type":"integer","minimum":1}},{"in":"query","description":"Opaque cursor returned as nextCursor by the previous page. Do not inspect or construct it.","example":"eyJpZCI6NDIsInNvcnQiOiJ1cGRhdGVkLWRlc2MifQ","name":"cursor","required":false,"schema":{"type":"string","maxLength":512}},{"in":"query","description":"Restrict results to one lifecycle stage.","example":"PROSPECT","name":"lifecycleStage","required":false,"schema":{"type":"string","enum":["LEAD","PROSPECT","CUSTOMER","CHURNED"]}},{"in":"query","description":"Number of items to return.","example":20,"name":"limit","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"in":"query","description":"Stable collection ordering used by the cursor.","example":"updated-desc","name":"sort","required":false,"schema":{"default":"updated-desc","type":"string","enum":["updated-desc","name-asc"]}},{"in":"query","description":"Lifecycle state to include in the collection.","example":"active","name":"status","required":false,"schema":{"default":"active","type":"string","enum":["active","archived","all"]}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"items":[{"archivedAt":null,"company":{"id":42,"name":"Acme Nordic"},"department":"Operations","email":"ada@acme-nordic.example","id":84,"lastActivityAt":"2026-08-15T09:30:00.000Z","lifecycleStage":"PROSPECT","linkedinUrl":"https://www.linkedin.com/in/ada-jensen","mobile":"+45 20 11 22 33","name":"Ada Jensen","phone":"+45 33 12 34 56","title":"Operations director","updatedAt":"2026-08-15T09:30:00.000Z","version":"v1.eyJpZCI6ODQsInJlc291cmNlIjoicGVyc29uIiwidmVyc2lvbiI6IjIwMjYtMDgtMTVUMDk6MzA6MDAuMDAwWiJ9"}],"nextCursor":null},"schema":{"$ref":"#/components/schemas/PersonListResponse"}}},"description":"Successful response","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:read"]}],"summary":"List people","tags":["People"],"x-error-profile":"E-READ","x-audit-profile":"NONE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/people?limit=20&status=active' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN'"}],"x-rate-limit-class":"READ","x-rate-limit-per-minute":120,"x-rate-limit-window-seconds":60,"x-reliability-profile":"READ","x-required-scopes":["contacts:read"],"x-visibility":"public"},"post":{"description":"Create one person and optionally link an active company in the same workspace. Metadata and custom fields additionally require Work access.","operationId":"createPersonV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Required idempotency key. Exact retries of the same canonical request replay the original status, body, ETag, Location, and request ID for 24 hours.","example":"createPersonV1-20260816-001","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":255,"minLength":1,"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"companyId":42,"department":"Operations","email":"ada@acme-nordic.example","lifecycleStage":"PROSPECT","name":"Ada Jensen","title":"Operations director"},"schema":{"$ref":"#/components/schemas/PersonCreateRequest"}}},"description":"Stable public profile fields. Owner, address, taxonomy, import, enrichment, and relationship-note controls are not accepted. Maximum 65536 bytes.","required":true},"responses":{"201":{"content":{"application/json":{"example":{"person":{"archivedAt":null,"company":{"id":42,"name":"Acme Nordic"},"customFields":{"preferred_language":"da"},"department":"Operations","description":"Leads operational planning across the Nordic region.","email":"ada@acme-nordic.example","id":84,"lastActivityAt":"2026-08-15T09:30:00.000Z","lifecycleStage":"PROSPECT","linkedinUrl":"https://www.linkedin.com/in/ada-jensen","metadata":{"source":"event-registration"},"mobile":"+45 20 11 22 33","name":"Ada Jensen","ownerUserIds":["user_01J5N9CF9QY8T4M2A7W3R6K1P0"],"phone":"+45 33 12 34 56","title":"Operations director","updatedAt":"2026-08-15T09:30:00.000Z","version":"v1.eyJpZCI6ODQsInJlc291cmNlIjoicGVyc29uIiwidmVyc2lvbiI6IjIwMjYtMDgtMTVUMDk6MzA6MDAuMDAwWiJ9"}},"schema":{"$ref":"#/components/schemas/PersonDetailResponse"}}},"description":"Person created","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.eyJpZCI6ODQsInJlc291cmNlIjoicGVyc29uIiwidmVyc2lvbiI6IjIwMjYtMDgtMTVUMDk6MzA6MDAuMDAwWiJ9\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}},"Location":{"description":"Canonical path of the created resource.","example":"/api/v1/workspaces/acme-nordic/people/84","schema":{"format":"uri-reference","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"409":{"content":{"application/json":{"example":{"error":{"code":"CONFLICT","message":"The requested change conflicts with the current resource state.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["CONFLICT","IDEMPOTENCY_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: CONFLICT, IDEMPOTENCY_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:write"]}],"summary":"Create a person","tags":["People"],"x-error-profile":"E-CREATE","x-audit-profile":"CRITICAL_CHANGE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request POST \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/people' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN' \\\n  --header 'Idempotency-Key: createPersonV1-20260816-001' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"companyId\": 42,\n  \"department\": \"Operations\",\n  \"email\": \"ada@acme-nordic.example\",\n  \"lifecycleStage\": \"PROSPECT\",\n  \"name\": \"Ada Jensen\",\n  \"title\": \"Operations director\"\n}'"}],"x-idempotency-window-hours":24,"x-rate-limit-class":"CREATE","x-rate-limit-per-minute":60,"x-rate-limit-window-seconds":60,"x-reliability-profile":"CREATE","x-required-scopes":["contacts:write"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/people/{id}":{"get":{"description":"Get a bounded person profile and linked company.","operationId":"getPersonV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Stable numeric resource ID.","example":84,"in":"path","name":"id","required":true,"schema":{"minimum":1,"type":"integer"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"person":{"archivedAt":null,"company":{"id":42,"name":"Acme Nordic"},"customFields":{"preferred_language":"da"},"department":"Operations","description":"Leads operational planning across the Nordic region.","email":"ada@acme-nordic.example","id":84,"lastActivityAt":"2026-08-15T09:30:00.000Z","lifecycleStage":"PROSPECT","linkedinUrl":"https://www.linkedin.com/in/ada-jensen","metadata":{"source":"event-registration"},"mobile":"+45 20 11 22 33","name":"Ada Jensen","ownerUserIds":["user_01J5N9CF9QY8T4M2A7W3R6K1P0"],"phone":"+45 33 12 34 56","title":"Operations director","updatedAt":"2026-08-15T09:30:00.000Z","version":"v1.eyJpZCI6ODQsInJlc291cmNlIjoicGVyc29uIiwidmVyc2lvbiI6IjIwMjYtMDgtMTVUMDk6MzA6MDAuMDAwWiJ9"}},"schema":{"$ref":"#/components/schemas/PersonDetailResponse"}}},"description":"Successful response","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.eyJpZCI6ODQsInJlc291cmNlIjoicGVyc29uIiwidmVyc2lvbiI6IjIwMjYtMDgtMTVUMDk6MzA6MDAuMDAwWiJ9\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:read"]}],"summary":"Get a person","tags":["People"],"x-error-profile":"E-READ","x-audit-profile":"NONE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/people/84' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN'"}],"x-rate-limit-class":"READ","x-rate-limit-per-minute":120,"x-rate-limit-window-seconds":60,"x-reliability-profile":"READ","x-required-scopes":["contacts:read"],"x-visibility":"public"},"patch":{"description":"Partially update the approved person profile and active company link. Lifecycle stage, metadata, and custom-field changes additionally require Work access.","operationId":"updatePersonV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Stable numeric resource ID.","example":84,"in":"path","name":"id","required":true,"schema":{"minimum":1,"type":"integer"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Strong ETag from the latest detail or mutation response. A stale value returns 412 VERSION_CONFLICT.","example":"\"v1.cGVyc29uLTg0LTI\"","in":"header","name":"If-Match","required":true,"schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"department":"Commercial operations","metadata":{"source":"event-registration"},"title":"VP of operations"},"schema":{"$ref":"#/components/schemas/PersonPatchRequest"}}},"description":"Omitted fields remain unchanged. A null companyId detaches the current company; metadata replaces the full map; customFields is a typed merge patch. Maximum 65536 bytes.","required":true},"responses":{"200":{"content":{"application/json":{"example":{"person":{"archivedAt":null,"company":{"id":42,"name":"Acme Nordic"},"customFields":{"preferred_language":"da"},"department":"Commercial operations","description":"Leads operational planning across the Nordic region.","email":"ada@acme-nordic.example","id":84,"lastActivityAt":"2026-08-15T09:30:00.000Z","lifecycleStage":"PROSPECT","linkedinUrl":"https://www.linkedin.com/in/ada-jensen","metadata":{"source":"event-registration"},"mobile":"+45 20 11 22 33","name":"Ada Jensen","ownerUserIds":["user_01J5N9CF9QY8T4M2A7W3R6K1P0"],"phone":"+45 33 12 34 56","title":"VP of operations","updatedAt":"2026-08-15T09:30:00.000Z","version":"v1.cGVyc29uLTg0LTI"}},"schema":{"$ref":"#/components/schemas/PersonDetailResponse"}}},"description":"Person updated","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.cGVyc29uLTg0LTI\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"409":{"content":{"application/json":{"example":{"error":{"code":"CONFLICT","message":"The requested change conflicts with the current resource state.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"412":{"content":{"application/json":{"example":{"error":{"code":"VERSION_CONFLICT","message":"The resource changed since it was read.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["VERSION_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: VERSION_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"428":{"content":{"application/json":{"example":{"error":{"code":"PRECONDITION_REQUIRED","message":"If-Match is required for this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["PRECONDITION_REQUIRED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: PRECONDITION_REQUIRED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:write"]}],"summary":"Update a person","tags":["People"],"x-error-profile":"E-WRITE","x-audit-profile":"CRITICAL_CHANGE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request PATCH \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/people/84' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN' \\\n  --header 'If-Match: \"v1.cGVyc29uLTg0LTI\"' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"department\": \"Commercial operations\",\n  \"metadata\": {\n    \"source\": \"event-registration\"\n  },\n  \"title\": \"VP of operations\"\n}'"}],"x-rate-limit-class":"WRITE","x-rate-limit-per-minute":60,"x-rate-limit-window-seconds":60,"x-reliability-profile":"WRITE","x-required-scopes":["contacts:write"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/people/{id}/archive":{"post":{"description":"Soft-archive one active person while retaining its stable ID.","operationId":"archivePersonV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Stable numeric resource ID.","example":84,"in":"path","name":"id","required":true,"schema":{"minimum":1,"type":"integer"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Required idempotency key. Exact retries of the same canonical request replay the original status, body, ETag, Location, and request ID for 24 hours.","example":"archivePersonV1-20260816-001","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":255,"minLength":1,"type":"string"}},{"description":"Strong ETag from the latest detail or mutation response. A stale value returns 412 VERSION_CONFLICT.","example":"\"v1.cGVyc29uLTg0LTM\"","in":"header","name":"If-Match","required":true,"schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"person":{"archivedAt":"2026-08-16T08:30:00.000Z","company":{"id":42,"name":"Acme Nordic"},"customFields":{"preferred_language":"da"},"department":"Operations","description":"Leads operational planning across the Nordic region.","email":"ada@acme-nordic.example","id":84,"lastActivityAt":"2026-08-15T09:30:00.000Z","lifecycleStage":"PROSPECT","linkedinUrl":"https://www.linkedin.com/in/ada-jensen","metadata":{"source":"event-registration"},"mobile":"+45 20 11 22 33","name":"Ada Jensen","ownerUserIds":["user_01J5N9CF9QY8T4M2A7W3R6K1P0"],"phone":"+45 33 12 34 56","title":"Operations director","updatedAt":"2026-08-15T09:30:00.000Z","version":"v1.cGVyc29uLTg0LTM"}},"schema":{"$ref":"#/components/schemas/PersonDetailResponse"}}},"description":"Person archived","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.cGVyc29uLTg0LTM\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"409":{"content":{"application/json":{"example":{"error":{"code":"CONFLICT","message":"The requested change conflicts with the current resource state.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["CONFLICT","INVALID_STATE","IDEMPOTENCY_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: CONFLICT, INVALID_STATE, IDEMPOTENCY_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"412":{"content":{"application/json":{"example":{"error":{"code":"VERSION_CONFLICT","message":"The resource changed since it was read.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["VERSION_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: VERSION_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"428":{"content":{"application/json":{"example":{"error":{"code":"PRECONDITION_REQUIRED","message":"If-Match is required for this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["PRECONDITION_REQUIRED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: PRECONDITION_REQUIRED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:write"]}],"summary":"Archive a person","tags":["People"],"x-error-profile":"E-ACTION","x-audit-profile":"CRITICAL_CHANGE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request POST \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/people/84/archive' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN' \\\n  --header 'Idempotency-Key: archivePersonV1-20260816-001' \\\n  --header 'If-Match: \"v1.cGVyc29uLTg0LTM\"'"}],"x-idempotency-window-hours":24,"x-rate-limit-class":"ACTION","x-rate-limit-per-minute":60,"x-rate-limit-window-seconds":60,"x-reliability-profile":"ACTION","x-required-scopes":["contacts:write"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/people/{id}/restore":{"post":{"description":"Restore one archived person while retaining its stable ID.","operationId":"restorePersonV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Stable numeric resource ID.","example":84,"in":"path","name":"id","required":true,"schema":{"minimum":1,"type":"integer"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Required idempotency key. Exact retries of the same canonical request replay the original status, body, ETag, Location, and request ID for 24 hours.","example":"restorePersonV1-20260816-001","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":255,"minLength":1,"type":"string"}},{"description":"Strong ETag from the latest detail or mutation response. A stale value returns 412 VERSION_CONFLICT.","example":"\"v1.cGVyc29uLTg0LTQ\"","in":"header","name":"If-Match","required":true,"schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"person":{"archivedAt":null,"company":{"id":42,"name":"Acme Nordic"},"customFields":{"preferred_language":"da"},"department":"Operations","description":"Leads operational planning across the Nordic region.","email":"ada@acme-nordic.example","id":84,"lastActivityAt":"2026-08-15T09:30:00.000Z","lifecycleStage":"PROSPECT","linkedinUrl":"https://www.linkedin.com/in/ada-jensen","metadata":{"source":"event-registration"},"mobile":"+45 20 11 22 33","name":"Ada Jensen","ownerUserIds":["user_01J5N9CF9QY8T4M2A7W3R6K1P0"],"phone":"+45 33 12 34 56","title":"Operations director","updatedAt":"2026-08-15T09:30:00.000Z","version":"v1.cGVyc29uLTg0LTQ"}},"schema":{"$ref":"#/components/schemas/PersonDetailResponse"}}},"description":"Person restored","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.cGVyc29uLTg0LTQ\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"409":{"content":{"application/json":{"example":{"error":{"code":"CONFLICT","message":"The requested change conflicts with the current resource state.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["CONFLICT","INVALID_STATE","IDEMPOTENCY_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: CONFLICT, INVALID_STATE, IDEMPOTENCY_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"412":{"content":{"application/json":{"example":{"error":{"code":"VERSION_CONFLICT","message":"The resource changed since it was read.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["VERSION_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: VERSION_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"428":{"content":{"application/json":{"example":{"error":{"code":"PRECONDITION_REQUIRED","message":"If-Match is required for this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["PRECONDITION_REQUIRED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: PRECONDITION_REQUIRED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["contacts:write"]}],"summary":"Restore a person","tags":["People"],"x-error-profile":"E-ACTION","x-audit-profile":"CRITICAL_CHANGE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request POST \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/people/84/restore' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN' \\\n  --header 'Idempotency-Key: restorePersonV1-20260816-001' \\\n  --header 'If-Match: \"v1.cGVyc29uLTg0LTQ\"'"}],"x-idempotency-window-hours":24,"x-rate-limit-class":"ACTION","x-rate-limit-per-minute":60,"x-rate-limit-window-seconds":60,"x-reliability-profile":"ACTION","x-required-scopes":["contacts:write"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/briefings":{"get":{"description":"List a cursor-paginated briefing feed with status, company, and creation-time filters.","operationId":"listBriefingsV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"in":"query","description":"Opaque cursor returned as nextCursor by the previous page. Do not inspect or construct it.","example":"eyJpZCI6NDIsInNvcnQiOiJ1cGRhdGVkLWRlc2MifQ","name":"cursor","required":false,"schema":{"type":"string","maxLength":512}},{"in":"query","description":"Number of items to return.","example":20,"name":"limit","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"in":"query","description":"Restrict results to one company ID.","example":42,"name":"companyId","required":false,"schema":{"type":"integer","minimum":1}},{"in":"query","description":"Include briefings created at or after this timestamp.","example":"2026-08-01T00:00:00.000Z","name":"createdAfter","required":false,"schema":{"type":"string","format":"date-time"}},{"in":"query","description":"Include briefings created at or before this timestamp.","example":"2026-08-31T23:59:59.000Z","name":"createdBefore","required":false,"schema":{"type":"string","format":"date-time"}},{"in":"query","description":"Restrict results to one briefing status.","example":"COMPLETE","name":"status","required":false,"schema":{"type":"string","enum":["PENDING","IN_PROGRESS","COMPLETE","FAILED"]}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"items":[{"company":{"id":42,"name":"Acme Nordic"},"createdAt":"2026-08-16T08:00:00.000Z","excerpt":null,"id":126,"name":"Acme Nordic briefing","status":"PENDING","updatedAt":"2026-08-16T08:00:00.000Z","version":"v1.eyJpZCI6MTI2LCJyZXNvdXJjZSI6ImJyaWVmaW5nIiwidmVyc2lvbiI6IjIwMjYtMDgtMTZUMDg6MDA6MDAuMDAwWiJ9"}],"nextCursor":null},"schema":{"$ref":"#/components/schemas/BriefingListResponse"}}},"description":"Successful response","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["meetings:read"]}],"summary":"List briefings","tags":["Briefings"],"x-error-profile":"E-READ","x-audit-profile":"NONE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/briefings?limit=20&status=COMPLETE' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN'"}],"x-rate-limit-class":"READ","x-rate-limit-per-minute":120,"x-rate-limit-window-seconds":60,"x-reliability-profile":"READ","x-required-scopes":["meetings:read"],"x-visibility":"public"},"post":{"description":"Create a pending briefing for an existing active company and enqueue one generation.","operationId":"createBriefingV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Required idempotency key. Exact retries of the same canonical request replay the original status, body, ETag, Location, and request ID for 24 hours.","example":"createBriefingV1-20260816-001","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":255,"minLength":1,"type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"additionalContext":"Focus on expansion plans and delivery capacity.","companyId":42},"schema":{"$ref":"#/components/schemas/BriefingCreateRequest"}}},"description":"An active workspace company and optional bounded generation context. Maximum 65536 bytes.","required":true},"responses":{"202":{"content":{"application/json":{"example":{"briefing":{"company":{"id":42,"name":"Acme Nordic","organizationNumber":"12345678"},"content":null,"createdAt":"2026-08-16T08:00:00.000Z","id":126,"name":"Acme Nordic briefing","status":"PENDING","updatedAt":"2026-08-16T08:00:00.000Z","version":"v1.eyJpZCI6MTI2LCJyZXNvdXJjZSI6ImJyaWVmaW5nIiwidmVyc2lvbiI6IjIwMjYtMDgtMTZUMDg6MDA6MDAuMDAwWiJ9"}},"schema":{"$ref":"#/components/schemas/BriefingDetailResponse"}}},"description":"Briefing generation accepted","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.eyJpZCI6MTI2LCJyZXNvdXJjZSI6ImJyaWVmaW5nIiwidmVyc2lvbiI6IjIwMjYtMDgtMTZUMDg6MDA6MDAuMDAwWiJ9\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}},"Location":{"description":"Canonical path of the created resource.","example":"/api/v1/workspaces/acme-nordic/briefings/126","schema":{"format":"uri-reference","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"409":{"content":{"application/json":{"example":{"error":{"code":"CONFLICT","message":"The requested change conflicts with the current resource state.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["CONFLICT","IDEMPOTENCY_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: CONFLICT, IDEMPOTENCY_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["meetings:write","contacts:read"]}],"summary":"Create a briefing","tags":["Briefings"],"x-error-profile":"E-CREATE","x-audit-profile":"CRITICAL_CHANGE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request POST \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/briefings' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN' \\\n  --header 'Idempotency-Key: createBriefingV1-20260816-001' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"additionalContext\": \"Focus on expansion plans and delivery capacity.\",\n  \"companyId\": 42\n}'"}],"x-idempotency-window-hours":24,"x-rate-limit-class":"GENERATION","x-rate-limit-per-minute":10,"x-rate-limit-window-seconds":60,"x-reliability-profile":"GENERATION","x-required-scopes":["meetings:write","contacts:read"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/briefings/{id}":{"get":{"description":"Get validated structured briefing content. Pass include=sections to additionally receive the renderer-neutral section projection. Embedded attendee and Work sections are omitted unless the credential also has the corresponding access.","operationId":"getBriefingV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Stable numeric resource ID.","example":126,"in":"path","name":"id","required":true,"schema":{"minimum":1,"type":"integer"}},{"in":"query","description":"Pass `sections` to include the renderer-neutral section projection in the response. Omitted by default so existing strict clients are unaffected.","example":"sections","name":"include","required":false,"schema":{"type":"string","const":"sections"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"briefing":{"company":{"id":42,"name":"Acme Nordic","organizationNumber":"12345678"},"content":null,"createdAt":"2026-08-16T08:00:00.000Z","id":126,"name":"Acme Nordic briefing","status":"PENDING","updatedAt":"2026-08-16T08:00:00.000Z","version":"v1.eyJpZCI6MTI2LCJyZXNvdXJjZSI6ImJyaWVmaW5nIiwidmVyc2lvbiI6IjIwMjYtMDgtMTZUMDg6MDA6MDAuMDAwWiJ9"}},"schema":{"$ref":"#/components/schemas/BriefingDetailResponse"}}},"description":"Successful response","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.eyJpZCI6MTI2LCJyZXNvdXJjZSI6ImJyaWVmaW5nIiwidmVyc2lvbiI6IjIwMjYtMDgtMTZUMDg6MDA6MDAuMDAwWiJ9\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["meetings:read"]}],"summary":"Get a briefing","tags":["Briefings"],"x-error-profile":"E-READ","x-audit-profile":"NONE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/briefings/126?include=sections' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN'"}],"x-rate-limit-class":"READ","x-rate-limit-per-minute":120,"x-rate-limit-window-seconds":60,"x-reliability-profile":"READ","x-required-scopes":["meetings:read"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/summaries":{"get":{"description":"List a cursor-paginated meeting-summary feed with status, company, appointment-time, and evidence-audience filters.","operationId":"listSummariesV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"in":"query","description":"Opaque cursor returned as nextCursor by the previous page. Do not inspect or construct it.","example":"eyJpZCI6NDIsInNvcnQiOiJ1cGRhdGVkLWRlc2MifQ","name":"cursor","required":false,"schema":{"type":"string","maxLength":512}},{"in":"query","description":"Number of items to return.","example":20,"name":"limit","required":false,"schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"in":"query","description":"Include summaries whose effective appointment time is at or after this timestamp.","example":"2026-08-01T00:00:00.000Z","name":"appointmentAfter","required":false,"schema":{"type":"string","format":"date-time"}},{"in":"query","description":"Include summaries whose effective appointment time is at or before this timestamp.","example":"2026-08-31T23:59:59.000Z","name":"appointmentBefore","required":false,"schema":{"type":"string","format":"date-time"}},{"in":"query","description":"Restrict results to one company ID.","example":42,"name":"companyId","required":false,"schema":{"type":"integer","minimum":1}},{"in":"query","description":"Restrict to customer evidence (CUSTOMER) or Floral-internal meetings (INTERNAL).","example":"CUSTOMER","name":"evidenceAudience","required":false,"schema":{"type":"string","enum":["CUSTOMER","INTERNAL"]}},{"in":"query","description":"Restrict results to one summary status.","example":"WAITING_APPROVAL","name":"status","required":false,"schema":{"type":"string","enum":["WAITING","WAITING_APPROVAL","APPROVED","FAILED"]}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"items":[{"appointmentDate":"2026-08-18T09:00:00.000Z","company":{"id":42,"name":"Acme Nordic"},"createdAt":"2026-08-15T10:00:00.000Z","durationSec":2700,"evidenceAudience":"CUSTOMER","excerpt":"The team agreed on the next launch milestones.","id":168,"name":"Quarterly planning","status":"WAITING_APPROVAL","updatedAt":"2026-08-15T10:30:00.000Z","version":"v1.eyJpZCI6MTY4LCJyZXNvdXJjZSI6InN1bW1hcnkiLCJ2ZXJzaW9uIjoiMjAyNi0wOC0xNVQxMDozMDowMC4wMDBaIn0"}],"nextCursor":null},"schema":{"$ref":"#/components/schemas/SummaryListResponse"}}},"description":"Successful response","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["meetings:read"]}],"summary":"List summaries","tags":["Summaries"],"x-error-profile":"E-READ","x-audit-profile":"NONE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/summaries?evidenceAudience=CUSTOMER&limit=20&status=WAITING_APPROVAL' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN'"}],"x-rate-limit-class":"READ","x-rate-limit-per-minute":120,"x-rate-limit-window-seconds":60,"x-reliability-profile":"READ","x-required-scopes":["meetings:read"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/summaries/{id}":{"get":{"description":"Get validated structured meeting-summary content.","operationId":"getSummaryV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Stable numeric resource ID.","example":168,"in":"path","name":"id","required":true,"schema":{"minimum":1,"type":"integer"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"example":{"summary":{"appointmentDate":"2026-08-18T09:00:00.000Z","appointmentSubject":"Quarterly planning","company":{"id":42,"name":"Acme Nordic","organizationNumber":"12345678"},"content":null,"createdAt":"2026-08-15T10:00:00.000Z","durationSec":2700,"evidenceAudience":"CUSTOMER","id":168,"internalNotes":null,"name":"Quarterly planning","status":"WAITING_APPROVAL","updatedAt":"2026-08-15T10:30:00.000Z","version":"v1.eyJpZCI6MTY4LCJyZXNvdXJjZSI6InN1bW1hcnkiLCJ2ZXJzaW9uIjoiMjAyNi0wOC0xNVQxMDozMDowMC4wMDBaIn0"}},"schema":{"$ref":"#/components/schemas/SummaryDetailResponse"}}},"description":"Successful response","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.eyJpZCI6MTY4LCJyZXNvdXJjZSI6InN1bW1hcnkiLCJ2ZXJzaW9uIjoiMjAyNi0wOC0xNVQxMDozMDowMC4wMDBaIn0\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["meetings:read"]}],"summary":"Get a summary","tags":["Summaries"],"x-error-profile":"E-READ","x-audit-profile":"NONE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request GET \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/summaries/168' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN'"}],"x-rate-limit-class":"READ","x-rate-limit-per-minute":120,"x-rate-limit-window-seconds":60,"x-reliability-profile":"READ","x-required-scopes":["meetings:read"],"x-visibility":"public"},"patch":{"description":"Replace only the internal notes of a summary visible to the caller.","operationId":"updateSummaryV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Stable numeric resource ID.","example":168,"in":"path","name":"id","required":true,"schema":{"minimum":1,"type":"integer"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Strong ETag from the latest detail or mutation response. A stale value returns 412 VERSION_CONFLICT.","example":"\"v1.c3VtbWFyeS0xNjgtMg\"","in":"header","name":"If-Match","required":true,"schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"internalNotes":"Confirm the implementation owner before Friday."},"schema":{"$ref":"#/components/schemas/SummaryPatchRequest"}}},"description":"Only internalNotes is accepted. Whitespace-only notes are stored as null. Maximum 65536 bytes.","required":true},"responses":{"200":{"content":{"application/json":{"example":{"summary":{"appointmentDate":"2026-08-18T09:00:00.000Z","appointmentSubject":"Quarterly planning","company":{"id":42,"name":"Acme Nordic","organizationNumber":"12345678"},"content":null,"createdAt":"2026-08-15T10:00:00.000Z","durationSec":2700,"evidenceAudience":"CUSTOMER","id":168,"internalNotes":"Confirm the implementation owner before Friday.","name":"Quarterly planning","status":"WAITING_APPROVAL","updatedAt":"2026-08-15T10:30:00.000Z","version":"v1.c3VtbWFyeS0xNjgtMg"}},"schema":{"$ref":"#/components/schemas/SummaryDetailResponse"}}},"description":"Summary notes updated","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.c3VtbWFyeS0xNjgtMg\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"409":{"content":{"application/json":{"example":{"error":{"code":"CONFLICT","message":"The requested change conflicts with the current resource state.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"412":{"content":{"application/json":{"example":{"error":{"code":"VERSION_CONFLICT","message":"The resource changed since it was read.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["VERSION_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: VERSION_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"428":{"content":{"application/json":{"example":{"error":{"code":"PRECONDITION_REQUIRED","message":"If-Match is required for this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["PRECONDITION_REQUIRED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: PRECONDITION_REQUIRED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["meetings:write"]}],"summary":"Update summary internal notes","tags":["Summaries"],"x-error-profile":"E-WRITE","x-audit-profile":"CRITICAL_CHANGE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request PATCH \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/summaries/168' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN' \\\n  --header 'If-Match: \"v1.c3VtbWFyeS0xNjgtMg\"' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"internalNotes\": \"Confirm the implementation owner before Friday.\"\n}'"}],"x-rate-limit-class":"WRITE","x-rate-limit-per-minute":60,"x-rate-limit-window-seconds":60,"x-reliability-profile":"WRITE","x-required-scopes":["meetings:write"],"x-visibility":"public"}},"/api/v1/workspaces/{workspaceSlug}/summaries/{id}/approve":{"post":{"description":"Approve a caller-created summary that is waiting for approval, optionally replacing public structured content and appointment time.","operationId":"approveSummaryV1","parameters":[{"description":"Slug of the workspace pinned to the credential.","example":"acme-nordic","in":"path","name":"workspaceSlug","required":true,"schema":{"maxLength":100,"minLength":1,"pattern":"^[a-z0-9]+(?:-[a-z0-9]+)*$","type":"string"}},{"description":"Stable numeric resource ID.","example":168,"in":"path","name":"id","required":true,"schema":{"minimum":1,"type":"integer"}},{"description":"Optional caller-generated correlation ID. Floral returns the effective value in X-Request-ID.","example":"550e8400-e29b-41d4-a716-446655440000","in":"header","name":"X-Request-ID","required":false,"schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Required idempotency key. Exact retries of the same canonical request replay the original status, body, ETag, Location, and request ID for 24 hours.","example":"approveSummaryV1-20260816-001","in":"header","name":"Idempotency-Key","required":true,"schema":{"maxLength":255,"minLength":1,"type":"string"}},{"description":"Strong ETag from the latest detail or mutation response. A stale value returns 412 VERSION_CONFLICT.","example":"\"v1.c3VtbWFyeS0xNjgtMw\"","in":"header","name":"If-Match","required":true,"schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}],"requestBody":{"content":{"application/json":{"example":{"appointmentDate":"2026-08-18T09:00:00.000Z","content":{"hvadBlevAftalt":{"aftaler":[{"aftale":"Confirm the launch plan at the next meeting.","ansvarlig":"Customer team","deadline":"Before the next meeting"}]},"hvadBlevDroeftet":{"emner":[{"beskrivelse":"The teams reviewed delivery capacity and launch sequencing.","emne":"Launch planning","rejstAf":"fælles"}]},"opsummering":"The teams aligned on launch milestones and ownership.","titel":"Quarterly planning","todos":{"opgaver":[{"ansvarlig":"Customer team","deadline":"Friday","opgave":"Confirm the implementation owner.","prioritet":"høj"}]}}},"schema":{"$ref":"#/components/schemas/SummaryApproveRequest"}}},"description":"Optional edited structured content and appointment timestamp. Omit the body to approve the current values. Maximum 65536 bytes.","required":false},"responses":{"200":{"content":{"application/json":{"example":{"summary":{"appointmentDate":"2026-08-18T09:00:00.000Z","appointmentSubject":"Quarterly planning","company":{"id":42,"name":"Acme Nordic","organizationNumber":"12345678"},"content":{"context":[],"hvadBlevAftalt":{"aftaler":[{"aftale":"Confirm the launch plan at the next meeting.","ansvarlig":"Customer team","deadline":"Before the next meeting"}]},"hvadBlevDroeftet":{"emner":[{"beskrivelse":"The teams reviewed delivery capacity and launch sequencing.","emne":"Launch planning","rejstAf":"fælles"}]},"opsummering":"The teams aligned on launch milestones and ownership.","titel":"Quarterly planning","todos":{"opgaver":[{"ansvarlig":"Customer team","deadline":"Friday","opgave":"Confirm the implementation owner.","prioritet":"høj"}]}},"createdAt":"2026-08-15T10:00:00.000Z","durationSec":2700,"evidenceAudience":"CUSTOMER","id":168,"internalNotes":null,"name":"Quarterly planning","status":"APPROVED","updatedAt":"2026-08-15T10:30:00.000Z","version":"v1.c3VtbWFyeS0xNjgtMw"}},"schema":{"$ref":"#/components/schemas/SummaryDetailResponse"}}},"description":"Summary approved","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"ETag":{"description":"Opaque version for a subsequent If-Match.","example":"\"v1.c3VtbWFyeS0xNjgtMw\"","schema":{"pattern":"^\"(?:[^\"\\\\]|\\\\.)*\"$","type":"string"}}}},"400":{"content":{"application/json":{"example":{"error":{"code":"INVALID_INPUT","message":"The request contains invalid values.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INVALID_INPUT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INVALID_INPUT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"401":{"content":{"application/json":{"example":{"error":{"code":"UNAUTHENTICATED","message":"A valid bearer credential is required.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["UNAUTHENTICATED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: UNAUTHENTICATED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"WWW-Authenticate":{"description":"Bearer authentication challenge.","example":"Bearer realm=\"floral-api\"","schema":{"type":"string"}}}},"403":{"content":{"application/json":{"example":{"error":{"code":"FORBIDDEN","message":"The credential does not grant this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["FORBIDDEN"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: FORBIDDEN","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"404":{"content":{"application/json":{"example":{"error":{"code":"NOT_FOUND","message":"The resource was not found.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["NOT_FOUND","FEATURE_DISABLED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: NOT_FOUND, FEATURE_DISABLED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"409":{"content":{"application/json":{"example":{"error":{"code":"CONFLICT","message":"The requested change conflicts with the current resource state.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["CONFLICT","INVALID_STATE","IDEMPOTENCY_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: CONFLICT, INVALID_STATE, IDEMPOTENCY_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"412":{"content":{"application/json":{"example":{"error":{"code":"VERSION_CONFLICT","message":"The resource changed since it was read.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["VERSION_CONFLICT"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: VERSION_CONFLICT","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"428":{"content":{"application/json":{"example":{"error":{"code":"PRECONDITION_REQUIRED","message":"If-Match is required for this operation.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["PRECONDITION_REQUIRED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: PRECONDITION_REQUIRED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}},"429":{"content":{"application/json":{"example":{"error":{"code":"RATE_LIMITED","message":"Too many requests. Retry shortly.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["RATE_LIMITED"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: RATE_LIMITED","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}},"Retry-After":{"description":"Seconds until the current limit resets.","schema":{"minimum":1,"type":"integer"}}}},"500":{"content":{"application/json":{"example":{"error":{"code":"INTERNAL_ERROR","message":"An unexpected error occurred.","requestId":"550e8400-e29b-41d4-a716-446655440000"}},"schema":{"allOf":[{"$ref":"#/components/schemas/ApiErrorResponse"}],"properties":{"error":{"properties":{"code":{"enum":["INTERNAL_ERROR"],"type":"string"}},"required":["code"],"type":"object"}},"type":"object"}}},"description":"Stable errors: INTERNAL_ERROR","headers":{"X-Content-Type-Options":{"description":"Always nosniff for JSON API responses.","schema":{"const":"nosniff","type":"string"}},"X-RateLimit-Limit":{"description":"Maximum requests in the current rate-limit window.","schema":{"minimum":1,"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests remaining in the current rate-limit window.","schema":{"minimum":0,"type":"integer"}},"X-Request-ID":{"description":"Stable request or idempotent replay correlation ID.","schema":{"minLength":1,"type":"string"}}}}},"security":[{"bearerAuth":["meetings:write"]}],"summary":"Approve a summary","tags":["Summaries"],"x-error-profile":"E-ACTION","x-audit-profile":"CRITICAL_CHANGE","x-codeSamples":[{"label":"cURL","lang":"Shell","source":"curl --request POST \\\n  --url 'https://app.floral.so/api/v1/workspaces/acme-nordic/summaries/168/approve' \\\n  --header 'Authorization: Bearer $FLORAL_TOKEN' \\\n  --header 'Idempotency-Key: approveSummaryV1-20260816-001' \\\n  --header 'If-Match: \"v1.c3VtbWFyeS0xNjgtMw\"' \\\n  --header 'Content-Type: application/json' \\\n  --data '{\n  \"appointmentDate\": \"2026-08-18T09:00:00.000Z\",\n  \"content\": {\n    \"hvadBlevAftalt\": {\n      \"aftaler\": [\n        {\n          \"aftale\": \"Confirm the launch plan at the next meeting.\",\n          \"ansvarlig\": \"Customer team\",\n          \"deadline\": \"Before the next meeting\"\n        }\n      ]\n    },\n    \"hvadBlevDroeftet\": {\n      \"emner\": [\n        {\n          \"beskrivelse\": \"The teams reviewed delivery capacity and launch sequencing.\",\n          \"emne\": \"Launch planning\",\n          \"rejstAf\": \"fælles\"\n        }\n      ]\n    },\n    \"opsummering\": \"The teams aligned on launch milestones and ownership.\",\n    \"titel\": \"Quarterly planning\",\n    \"todos\": {\n      \"opgaver\": [\n        {\n          \"ansvarlig\": \"Customer team\",\n          \"deadline\": \"Friday\",\n          \"opgave\": \"Confirm the implementation owner.\",\n          \"prioritet\": \"høj\"\n        }\n      ]\n    }\n  }\n}'"}],"x-idempotency-window-hours":24,"x-rate-limit-class":"GENERATION","x-rate-limit-per-minute":10,"x-rate-limit-window-seconds":60,"x-reliability-profile":"GENERATION","x-required-scopes":["meetings:write"],"x-visibility":"public"}}},"servers":[{"description":"Production","url":"https://app.floral.so"}],"tags":[{"description":"Search across active companies and people.","name":"Search"},{"description":"Create, list, inspect, update, archive, and restore companies.","name":"Companies"},{"description":"Create, list, inspect, update, archive, and restore people.","name":"People"},{"description":"Read active public custom-field definitions.","name":"Custom fields"},{"description":"Search normalized Danish company-register facts.","name":"Company registry"},{"description":"Generate, list, and inspect meeting briefings.","name":"Briefings"},{"description":"List, inspect, annotate, and approve meeting summaries.","name":"Summaries"}],"externalDocs":{"description":"Floral developer documentation","url":"https://docs.floral.so"}}