> For the complete documentation index, see [llms.txt](https://api-docs.helloaviary.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://api-docs.helloaviary.ai/models.md).

# Models

## The Meta object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"Meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid","description":"Unique ID for this request. Echoed in the `X-Request-ID` response\nheader. Send this back to support to debug a specific call.\n"}}}}}}
```

## The PageInfo object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"PageInfo":{"type":"object","required":["limit"],"properties":{"limit":{"type":"integer"},"next_cursor":{"type":"string","description":"Pass back as `?cursor=` to get the next page. Absent on the last page."}}}}}}
```

## The ListMeta object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ListMeta":{"type":"object","required":["request_id","page"],"properties":{"request_id":{"type":"string","format":"uuid"},"page":{"$ref":"#/components/schemas/PageInfo"}}},"PageInfo":{"type":"object","required":["limit"],"properties":{"limit":{"type":"integer"},"next_cursor":{"type":"string","description":"Pass back as `?cursor=` to get the next page. Absent on the last page."}}}}}}
```

## The ErrorCode object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ErrorCode":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","conflict","internal_error","field_not_editable","call_already_started"]}}}}
```

## The ErrorEnvelope object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ErrorEnvelope":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"$ref":"#/components/schemas/ErrorCode"},"message":{"type":"string"},"request_id":{"type":"string","format":"uuid"}}}}},"ErrorCode":{"type":"string","enum":["bad_request","unauthorized","forbidden","not_found","conflict","internal_error","field_not_editable","call_already_started"]}}}}
```

## The UseCaseExternal object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"UseCaseExternal":{"type":"object","required":["id","external_id","ab_test_enabled","multi_entity","send_blank_files","frozen","rcd_enabled","created_at","updated_at"],"description":"External projection of a use case. Excludes raw config blobs, prompt\nextensions, internal infra paths, and Teams routing details.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"use_case_name":{"type":"string","nullable":true},"status":{"type":"string","nullable":true,"description":"voice_agent_life_cycle enum value (string)."},"voice_agent_name":{"type":"string","nullable":true},"config_file":{"type":"string","nullable":true},"config_file_b":{"type":"string","nullable":true},"ab_test_enabled":{"type":"boolean"},"campaign_type":{"type":"string","nullable":true},"current_calls_status":{"type":"string","nullable":true},"multi_entity":{"type":"boolean"},"send_blank_files":{"type":"boolean"},"frozen":{"type":"boolean"},"is_text":{"type":"boolean","nullable":true},"rcd_enabled":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The UseCaseInternal object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"UseCaseInternal":{"type":"object","description":"Full internal projection of a use case, including raw live_config JSONB\nand prompt_extension. Internal scope only.\n","required":["id","external_id","ab_test_enabled","multi_entity","send_blank_files","frozen","prompt_extension","rcd_enabled","created_at","updated_at"],"properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"client_id":{"type":"integer","format":"int64","nullable":true},"organization_id":{"type":"string","nullable":true},"use_case_name":{"type":"string","nullable":true},"status":{"type":"string","nullable":true,"description":"voice_agent_life_cycle enum value (string)"},"config_file":{"type":"string","nullable":true},"config_file_b":{"type":"string","nullable":true},"ab_test_enabled":{"type":"boolean"},"voice_agent_name":{"type":"string","nullable":true},"teams_representative_ids":{"type":"string","nullable":true},"teams_bot_type":{"type":"string","nullable":true},"direct_contact_email":{"type":"string","nullable":true},"output_file_sql":{"type":"string","nullable":true},"product_req_doc":{"type":"string","nullable":true},"campaign_type":{"type":"string","nullable":true},"current_calls_status":{"type":"string","nullable":true},"output_bucket_name":{"type":"string","nullable":true},"template":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"multi_entity":{"type":"boolean"},"send_blank_files":{"type":"boolean"},"frozen":{"type":"boolean"},"is_text":{"type":"boolean","nullable":true},"prompt_extension":{"type":"string"},"rcd_enabled":{"type":"boolean"},"live_config":{"nullable":true,"description":"Raw config JSONB"},"live_config_b":{"nullable":true,"description":"Raw B-variant config JSONB"}}}}}}
```

## The Organization object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"Organization":{"type":"object","required":["id","name","bucket_name","domain_name","use_telnyx","has_teams_integration","created_at","updated_at","client_id"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"bucket_name":{"type":"string"},"domain_name":{"type":"string"},"aoss_endpoint":{"type":"string","nullable":true},"is_saml":{"type":"boolean","nullable":true},"aoss_collection_arn":{"type":"string","nullable":true},"connection_name":{"type":"string","nullable":true},"email_domain":{"type":"string","nullable":true},"use_telnyx":{"type":"boolean"},"description":{"type":"string","nullable":true},"has_teams_integration":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"client_id":{"type":"integer","format":"int64"}}}}}}
```

## The UseCaseExternalResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"UseCaseExternalResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/UseCaseExternal"},"meta":{"$ref":"#/components/schemas/Meta"}}},"UseCaseExternal":{"type":"object","required":["id","external_id","ab_test_enabled","multi_entity","send_blank_files","frozen","rcd_enabled","created_at","updated_at"],"description":"External projection of a use case. Excludes raw config blobs, prompt\nextensions, internal infra paths, and Teams routing details.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"use_case_name":{"type":"string","nullable":true},"status":{"type":"string","nullable":true,"description":"voice_agent_life_cycle enum value (string)."},"voice_agent_name":{"type":"string","nullable":true},"config_file":{"type":"string","nullable":true},"config_file_b":{"type":"string","nullable":true},"ab_test_enabled":{"type":"boolean"},"campaign_type":{"type":"string","nullable":true},"current_calls_status":{"type":"string","nullable":true},"multi_entity":{"type":"boolean"},"send_blank_files":{"type":"boolean"},"frozen":{"type":"boolean"},"is_text":{"type":"boolean","nullable":true},"rcd_enabled":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid","description":"Unique ID for this request. Echoed in the `X-Request-ID` response\nheader. Send this back to support to debug a specific call.\n"}}}}}}
```

## The UseCaseInternalResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"UseCaseInternalResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["use_case"],"properties":{"use_case":{"$ref":"#/components/schemas/UseCaseInternal"},"organization":{"allOf":[{"$ref":"#/components/schemas/Organization"}],"nullable":true}}},"meta":{"$ref":"#/components/schemas/Meta"}}},"UseCaseInternal":{"type":"object","description":"Full internal projection of a use case, including raw live_config JSONB\nand prompt_extension. Internal scope only.\n","required":["id","external_id","ab_test_enabled","multi_entity","send_blank_files","frozen","prompt_extension","rcd_enabled","created_at","updated_at"],"properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"client_id":{"type":"integer","format":"int64","nullable":true},"organization_id":{"type":"string","nullable":true},"use_case_name":{"type":"string","nullable":true},"status":{"type":"string","nullable":true,"description":"voice_agent_life_cycle enum value (string)"},"config_file":{"type":"string","nullable":true},"config_file_b":{"type":"string","nullable":true},"ab_test_enabled":{"type":"boolean"},"voice_agent_name":{"type":"string","nullable":true},"teams_representative_ids":{"type":"string","nullable":true},"teams_bot_type":{"type":"string","nullable":true},"direct_contact_email":{"type":"string","nullable":true},"output_file_sql":{"type":"string","nullable":true},"product_req_doc":{"type":"string","nullable":true},"campaign_type":{"type":"string","nullable":true},"current_calls_status":{"type":"string","nullable":true},"output_bucket_name":{"type":"string","nullable":true},"template":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"multi_entity":{"type":"boolean"},"send_blank_files":{"type":"boolean"},"frozen":{"type":"boolean"},"is_text":{"type":"boolean","nullable":true},"prompt_extension":{"type":"string"},"rcd_enabled":{"type":"boolean"},"live_config":{"nullable":true,"description":"Raw config JSONB"},"live_config_b":{"nullable":true,"description":"Raw B-variant config JSONB"}}},"Organization":{"type":"object","required":["id","name","bucket_name","domain_name","use_telnyx","has_teams_integration","created_at","updated_at","client_id"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"bucket_name":{"type":"string"},"domain_name":{"type":"string"},"aoss_endpoint":{"type":"string","nullable":true},"is_saml":{"type":"boolean","nullable":true},"aoss_collection_arn":{"type":"string","nullable":true},"connection_name":{"type":"string","nullable":true},"email_domain":{"type":"string","nullable":true},"use_telnyx":{"type":"boolean"},"description":{"type":"string","nullable":true},"has_teams_integration":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"client_id":{"type":"integer","format":"int64"}}},"Meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid","description":"Unique ID for this request. Echoed in the `X-Request-ID` response\nheader. Send this back to support to debug a specific call.\n"}}}}}}
```

## The UseCaseListResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"UseCaseListResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/UseCaseInternal"}},"meta":{"$ref":"#/components/schemas/ListMeta"}}},"UseCaseInternal":{"type":"object","description":"Full internal projection of a use case, including raw live_config JSONB\nand prompt_extension. Internal scope only.\n","required":["id","external_id","ab_test_enabled","multi_entity","send_blank_files","frozen","prompt_extension","rcd_enabled","created_at","updated_at"],"properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"client_id":{"type":"integer","format":"int64","nullable":true},"organization_id":{"type":"string","nullable":true},"use_case_name":{"type":"string","nullable":true},"status":{"type":"string","nullable":true,"description":"voice_agent_life_cycle enum value (string)"},"config_file":{"type":"string","nullable":true},"config_file_b":{"type":"string","nullable":true},"ab_test_enabled":{"type":"boolean"},"voice_agent_name":{"type":"string","nullable":true},"teams_representative_ids":{"type":"string","nullable":true},"teams_bot_type":{"type":"string","nullable":true},"direct_contact_email":{"type":"string","nullable":true},"output_file_sql":{"type":"string","nullable":true},"product_req_doc":{"type":"string","nullable":true},"campaign_type":{"type":"string","nullable":true},"current_calls_status":{"type":"string","nullable":true},"output_bucket_name":{"type":"string","nullable":true},"template":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"multi_entity":{"type":"boolean"},"send_blank_files":{"type":"boolean"},"frozen":{"type":"boolean"},"is_text":{"type":"boolean","nullable":true},"prompt_extension":{"type":"string"},"rcd_enabled":{"type":"boolean"},"live_config":{"nullable":true,"description":"Raw config JSONB"},"live_config_b":{"nullable":true,"description":"Raw B-variant config JSONB"}}},"ListMeta":{"type":"object","required":["request_id","page"],"properties":{"request_id":{"type":"string","format":"uuid"},"page":{"$ref":"#/components/schemas/PageInfo"}}},"PageInfo":{"type":"object","required":["limit"],"properties":{"limit":{"type":"integer"},"next_cursor":{"type":"string","description":"Pass back as `?cursor=` to get the next page. Absent on the last page."}}}}}}
```

## The UseCasePatchRequest object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"UseCasePatchRequest":{"type":"object","description":"Allowlist for internal PATCH. Sending any field outside this set returns\n400 with `code: field_not_editable`. Empty body returns 400.\n","properties":{"use_case_name":{"type":"string","nullable":true},"config_file":{"type":"string","nullable":true},"status":{"type":"string","description":"Must be a valid voice_agent_life_cycle enum value."},"voice_agent_name":{"type":"string","nullable":true},"teams_representative_ids":{"type":"string","nullable":true},"rcd_enabled":{"type":"boolean"}}}}}}
```

## The CallAuditorExternal object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"CallAuditorExternal":{"type":"object","description":"Locked allowlist of auditor fields exposed to external callers (§2.2.1\nof the build plan). Any field outside this set is internal-only —\nnew fields land here only after explicit approval.\n","properties":{"true_connected":{"type":"boolean","nullable":true},"passed_intro":{"type":"boolean","nullable":true},"agent_spoke_at_all":{"type":"boolean","nullable":true},"app_errors":{"type":"boolean","nullable":true},"agent_stopped_responding":{"type":"boolean","nullable":true},"member_frustration":{"type":"string","nullable":true},"roundup":{"type":"string","nullable":true},"dnc":{"type":"boolean","nullable":true,"description":"Customer-level Do-Not-Call flag from the auditor (NOT dnc_org)."},"complete_conversation":{"type":"boolean","nullable":true},"choppy_score":{"type":"integer","nullable":true},"wrong_number":{"type":"boolean","nullable":true},"illogical_score":{"type":"integer","nullable":true},"identified_language":{"type":"string","nullable":true},"language_barrier":{"type":"boolean","nullable":true},"contact_sentiment":{"type":"string","nullable":true},"voicemail_box_full":{"type":"boolean","nullable":true},"ran_into_call_screener":{"type":"boolean","nullable":true},"connection_issues":{"type":"boolean","nullable":true},"overall_outcome_label":{"type":"string","nullable":true},"unauthorized_promise":{"type":"boolean","nullable":true},"compliance_risk_flag":{"type":"boolean","nullable":true}}}}}}
```

## The CallExternal object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"CallExternal":{"type":"object","required":["id","external_id","environment","created_at","updated_at"],"description":"External projection of a call. Excludes telephony-internal fields\n(twilio_sid, vcon_uuid, pid), raw transcripts, raw grade JSONB, A/B\ntesting internals, and soft-delete metadata.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"use_case_id":{"type":"integer","format":"int64","nullable":true},"customer_id":{"type":"integer","format":"int64","nullable":true},"call_attempt_date":{"type":"string","format":"date-time","nullable":true,"description":"Date the call is scheduled to happen (DATE column in DB, returned\nas RFC3339 with 00:00:00Z component). Editability rule is keyed\noff this field; see §3 of the build plan.\n"},"actual_call_date":{"type":"string","format":"date-time","nullable":true},"call_attempt_number":{"type":"integer","nullable":true},"call_attempt_time":{"type":"integer","nullable":true},"call_length":{"type":"number","format":"double","nullable":true},"escalated":{"type":"boolean","nullable":true},"successful":{"type":"boolean","nullable":true},"connected":{"type":"boolean","nullable":true},"screening_call":{"type":"boolean","nullable":true},"attempted_call":{"type":"boolean","nullable":true},"call_recording_link":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"bot_voice_gender":{"type":"string","nullable":true},"is_rescheduled":{"type":"boolean","nullable":true},"rescheduled_time":{"type":"string","format":"date-time","nullable":true},"inbound":{"type":"boolean","nullable":true},"pii_redacted_transcript":{"nullable":true,"description":"PII-redacted transcript JSONB. Shape depends on the upstream pipeline."},"pii_redacted_audio":{"type":"string","nullable":true},"environment":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"auditor":{"allOf":[{"$ref":"#/components/schemas/CallAuditorExternal"}],"nullable":true,"description":"Null until the auditor row has been written for this call."}}},"CallAuditorExternal":{"type":"object","description":"Locked allowlist of auditor fields exposed to external callers (§2.2.1\nof the build plan). Any field outside this set is internal-only —\nnew fields land here only after explicit approval.\n","properties":{"true_connected":{"type":"boolean","nullable":true},"passed_intro":{"type":"boolean","nullable":true},"agent_spoke_at_all":{"type":"boolean","nullable":true},"app_errors":{"type":"boolean","nullable":true},"agent_stopped_responding":{"type":"boolean","nullable":true},"member_frustration":{"type":"string","nullable":true},"roundup":{"type":"string","nullable":true},"dnc":{"type":"boolean","nullable":true,"description":"Customer-level Do-Not-Call flag from the auditor (NOT dnc_org)."},"complete_conversation":{"type":"boolean","nullable":true},"choppy_score":{"type":"integer","nullable":true},"wrong_number":{"type":"boolean","nullable":true},"illogical_score":{"type":"integer","nullable":true},"identified_language":{"type":"string","nullable":true},"language_barrier":{"type":"boolean","nullable":true},"contact_sentiment":{"type":"string","nullable":true},"voicemail_box_full":{"type":"boolean","nullable":true},"ran_into_call_screener":{"type":"boolean","nullable":true},"connection_issues":{"type":"boolean","nullable":true},"overall_outcome_label":{"type":"string","nullable":true},"unauthorized_promise":{"type":"boolean","nullable":true},"compliance_risk_flag":{"type":"boolean","nullable":true}}}}}}
```

## The CallInternal object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"CallInternal":{"type":"object","required":["id","external_id","environment","organization_id","created_at","updated_at"],"description":"Full internal projection of a call — every column on the calls table.\nIncludes telephony-internal fields, raw grade/transcripts JSONB, and\nsoft-delete metadata.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"client_id":{"type":"integer","format":"int64","nullable":true},"use_case_id":{"type":"integer","format":"int64","nullable":true},"customer_id":{"type":"integer","format":"int64","nullable":true},"call_attempt_date":{"type":"string","format":"date-time","nullable":true},"actual_call_date":{"type":"string","format":"date-time","nullable":true},"call_attempt_number":{"type":"integer","nullable":true},"twilio_sid":{"type":"string","nullable":true},"call_length":{"type":"number","format":"double","nullable":true},"escalated":{"type":"boolean","nullable":true},"successful":{"type":"boolean","nullable":true},"connected":{"type":"boolean","nullable":true},"screening_call":{"type":"boolean","nullable":true},"attempted_call":{"type":"boolean","nullable":true},"call_recording_link":{"type":"string","nullable":true},"grade":{"nullable":true,"description":"Raw grading JSONB"},"reason":{"type":"string","nullable":true},"bot_voice_gender":{"type":"string","nullable":true},"pid":{"type":"string","nullable":true},"is_rescheduled":{"type":"boolean","nullable":true},"rescheduled_time":{"type":"string","format":"date-time","nullable":true},"inbound":{"type":"boolean","nullable":true},"vcon_uuid":{"type":"string","nullable":true},"call_attempt_time":{"type":"integer","nullable":true},"transcripts":{"nullable":true,"description":"Raw transcript JSONB"},"pii_redacted_transcript":{"nullable":true},"pii_redacted_audio":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"deleted_at":{"type":"string","format":"date-time","nullable":true},"environment":{"type":"string"},"organization_id":{"type":"string"},"config_variant":{"type":"string","nullable":true},"config_file_used":{"type":"string","nullable":true}}}}}}
```

## The CallAuditorInternal object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"CallAuditorInternal":{"type":"object","required":["id","external_id","client_id","customer_id","call_id","organization_id","created_at","updated_at"],"description":"Full internal projection of a calls_auditor row.","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"client_id":{"type":"integer","format":"int64"},"use_case_id":{"type":"integer","format":"int64","nullable":true},"customer_id":{"type":"integer","format":"int64"},"call_id":{"type":"integer","format":"int64"},"reasoning":{"type":"string","nullable":true},"agent_spoke_of_programs":{"type":"boolean","nullable":true},"true_connected":{"type":"boolean","nullable":true},"passed_intro":{"type":"boolean","nullable":true},"aviary_success":{"type":"boolean","nullable":true},"notes":{"type":"string","nullable":true},"on_call_issue":{"type":"string","nullable":true},"marked_connected_actually_voicemail":{"type":"boolean","nullable":true},"marked_voicemail_actually_connected":{"type":"boolean","nullable":true},"agent_spoke_at_all":{"type":"boolean","nullable":true},"app_errors":{"type":"boolean","nullable":true},"agent_stopped_responding":{"type":"boolean","nullable":true},"member_asked_to_speak_to_human":{"type":"boolean","nullable":true},"waveform_pattern":{"type":"string","nullable":true},"waveform_reason":{"type":"string","nullable":true},"agent_friendly":{"type":"boolean","nullable":true},"repetition_score":{"type":"string","nullable":true},"member_frustration":{"type":"string","nullable":true},"roundup":{"type":"string","nullable":true},"dnc":{"type":"boolean","nullable":true},"avg_response_time":{"type":"number","format":"double","nullable":true},"complete_conversation":{"type":"boolean","nullable":true},"actually_voicemail":{"type":"boolean","nullable":true},"persuasion_score":{"type":"integer","nullable":true},"suspicious_of_ai":{"type":"boolean","nullable":true},"asked_question":{"type":"boolean","nullable":true},"question_summary":{"type":"string","nullable":true},"background_noise_score":{"type":"integer","nullable":true},"choppy_score":{"type":"integer","nullable":true},"agent_did_not_answer_q":{"type":"boolean","nullable":true},"dnc_org":{"type":"boolean","nullable":true},"wrong_number":{"type":"boolean","nullable":true},"compliance_risk_flag":{"type":"boolean","nullable":true},"unauthorized_promise":{"type":"boolean","nullable":true},"overall_outcome_label":{"type":"string","nullable":true},"connection_issues":{"type":"boolean","nullable":true},"ran_into_call_screener":{"type":"boolean","nullable":true},"voicemail_box_full":{"type":"boolean","nullable":true},"contact_sentiment":{"type":"string","nullable":true},"language_barrier":{"type":"boolean","nullable":true},"identified_language":{"type":"string","nullable":true},"needs_review":{"type":"boolean","nullable":true},"needs_review_reason":{"type":"string","nullable":true},"illogical_score":{"type":"integer","nullable":true},"compliance":{"nullable":true,"description":"Raw compliance JSONB"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"organization_id":{"type":"string"}}}}}}
```

## The CallExternalResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"CallExternalResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/CallExternal"},"meta":{"$ref":"#/components/schemas/Meta"}}},"CallExternal":{"type":"object","required":["id","external_id","environment","created_at","updated_at"],"description":"External projection of a call. Excludes telephony-internal fields\n(twilio_sid, vcon_uuid, pid), raw transcripts, raw grade JSONB, A/B\ntesting internals, and soft-delete metadata.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"use_case_id":{"type":"integer","format":"int64","nullable":true},"customer_id":{"type":"integer","format":"int64","nullable":true},"call_attempt_date":{"type":"string","format":"date-time","nullable":true,"description":"Date the call is scheduled to happen (DATE column in DB, returned\nas RFC3339 with 00:00:00Z component). Editability rule is keyed\noff this field; see §3 of the build plan.\n"},"actual_call_date":{"type":"string","format":"date-time","nullable":true},"call_attempt_number":{"type":"integer","nullable":true},"call_attempt_time":{"type":"integer","nullable":true},"call_length":{"type":"number","format":"double","nullable":true},"escalated":{"type":"boolean","nullable":true},"successful":{"type":"boolean","nullable":true},"connected":{"type":"boolean","nullable":true},"screening_call":{"type":"boolean","nullable":true},"attempted_call":{"type":"boolean","nullable":true},"call_recording_link":{"type":"string","nullable":true},"reason":{"type":"string","nullable":true},"bot_voice_gender":{"type":"string","nullable":true},"is_rescheduled":{"type":"boolean","nullable":true},"rescheduled_time":{"type":"string","format":"date-time","nullable":true},"inbound":{"type":"boolean","nullable":true},"pii_redacted_transcript":{"nullable":true,"description":"PII-redacted transcript JSONB. Shape depends on the upstream pipeline."},"pii_redacted_audio":{"type":"string","nullable":true},"environment":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"auditor":{"allOf":[{"$ref":"#/components/schemas/CallAuditorExternal"}],"nullable":true,"description":"Null until the auditor row has been written for this call."}}},"CallAuditorExternal":{"type":"object","description":"Locked allowlist of auditor fields exposed to external callers (§2.2.1\nof the build plan). Any field outside this set is internal-only —\nnew fields land here only after explicit approval.\n","properties":{"true_connected":{"type":"boolean","nullable":true},"passed_intro":{"type":"boolean","nullable":true},"agent_spoke_at_all":{"type":"boolean","nullable":true},"app_errors":{"type":"boolean","nullable":true},"agent_stopped_responding":{"type":"boolean","nullable":true},"member_frustration":{"type":"string","nullable":true},"roundup":{"type":"string","nullable":true},"dnc":{"type":"boolean","nullable":true,"description":"Customer-level Do-Not-Call flag from the auditor (NOT dnc_org)."},"complete_conversation":{"type":"boolean","nullable":true},"choppy_score":{"type":"integer","nullable":true},"wrong_number":{"type":"boolean","nullable":true},"illogical_score":{"type":"integer","nullable":true},"identified_language":{"type":"string","nullable":true},"language_barrier":{"type":"boolean","nullable":true},"contact_sentiment":{"type":"string","nullable":true},"voicemail_box_full":{"type":"boolean","nullable":true},"ran_into_call_screener":{"type":"boolean","nullable":true},"connection_issues":{"type":"boolean","nullable":true},"overall_outcome_label":{"type":"string","nullable":true},"unauthorized_promise":{"type":"boolean","nullable":true},"compliance_risk_flag":{"type":"boolean","nullable":true}}},"Meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid","description":"Unique ID for this request. Echoed in the `X-Request-ID` response\nheader. Send this back to support to debug a specific call.\n"}}}}}}
```

## The CallInternalResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"CallInternalResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"object","required":["call"],"properties":{"call":{"$ref":"#/components/schemas/CallInternal"},"auditor":{"allOf":[{"$ref":"#/components/schemas/CallAuditorInternal"}],"nullable":true}}},"meta":{"$ref":"#/components/schemas/Meta"}}},"CallInternal":{"type":"object","required":["id","external_id","environment","organization_id","created_at","updated_at"],"description":"Full internal projection of a call — every column on the calls table.\nIncludes telephony-internal fields, raw grade/transcripts JSONB, and\nsoft-delete metadata.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"client_id":{"type":"integer","format":"int64","nullable":true},"use_case_id":{"type":"integer","format":"int64","nullable":true},"customer_id":{"type":"integer","format":"int64","nullable":true},"call_attempt_date":{"type":"string","format":"date-time","nullable":true},"actual_call_date":{"type":"string","format":"date-time","nullable":true},"call_attempt_number":{"type":"integer","nullable":true},"twilio_sid":{"type":"string","nullable":true},"call_length":{"type":"number","format":"double","nullable":true},"escalated":{"type":"boolean","nullable":true},"successful":{"type":"boolean","nullable":true},"connected":{"type":"boolean","nullable":true},"screening_call":{"type":"boolean","nullable":true},"attempted_call":{"type":"boolean","nullable":true},"call_recording_link":{"type":"string","nullable":true},"grade":{"nullable":true,"description":"Raw grading JSONB"},"reason":{"type":"string","nullable":true},"bot_voice_gender":{"type":"string","nullable":true},"pid":{"type":"string","nullable":true},"is_rescheduled":{"type":"boolean","nullable":true},"rescheduled_time":{"type":"string","format":"date-time","nullable":true},"inbound":{"type":"boolean","nullable":true},"vcon_uuid":{"type":"string","nullable":true},"call_attempt_time":{"type":"integer","nullable":true},"transcripts":{"nullable":true,"description":"Raw transcript JSONB"},"pii_redacted_transcript":{"nullable":true},"pii_redacted_audio":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"deleted_at":{"type":"string","format":"date-time","nullable":true},"environment":{"type":"string"},"organization_id":{"type":"string"},"config_variant":{"type":"string","nullable":true},"config_file_used":{"type":"string","nullable":true}}},"CallAuditorInternal":{"type":"object","required":["id","external_id","client_id","customer_id","call_id","organization_id","created_at","updated_at"],"description":"Full internal projection of a calls_auditor row.","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"client_id":{"type":"integer","format":"int64"},"use_case_id":{"type":"integer","format":"int64","nullable":true},"customer_id":{"type":"integer","format":"int64"},"call_id":{"type":"integer","format":"int64"},"reasoning":{"type":"string","nullable":true},"agent_spoke_of_programs":{"type":"boolean","nullable":true},"true_connected":{"type":"boolean","nullable":true},"passed_intro":{"type":"boolean","nullable":true},"aviary_success":{"type":"boolean","nullable":true},"notes":{"type":"string","nullable":true},"on_call_issue":{"type":"string","nullable":true},"marked_connected_actually_voicemail":{"type":"boolean","nullable":true},"marked_voicemail_actually_connected":{"type":"boolean","nullable":true},"agent_spoke_at_all":{"type":"boolean","nullable":true},"app_errors":{"type":"boolean","nullable":true},"agent_stopped_responding":{"type":"boolean","nullable":true},"member_asked_to_speak_to_human":{"type":"boolean","nullable":true},"waveform_pattern":{"type":"string","nullable":true},"waveform_reason":{"type":"string","nullable":true},"agent_friendly":{"type":"boolean","nullable":true},"repetition_score":{"type":"string","nullable":true},"member_frustration":{"type":"string","nullable":true},"roundup":{"type":"string","nullable":true},"dnc":{"type":"boolean","nullable":true},"avg_response_time":{"type":"number","format":"double","nullable":true},"complete_conversation":{"type":"boolean","nullable":true},"actually_voicemail":{"type":"boolean","nullable":true},"persuasion_score":{"type":"integer","nullable":true},"suspicious_of_ai":{"type":"boolean","nullable":true},"asked_question":{"type":"boolean","nullable":true},"question_summary":{"type":"string","nullable":true},"background_noise_score":{"type":"integer","nullable":true},"choppy_score":{"type":"integer","nullable":true},"agent_did_not_answer_q":{"type":"boolean","nullable":true},"dnc_org":{"type":"boolean","nullable":true},"wrong_number":{"type":"boolean","nullable":true},"compliance_risk_flag":{"type":"boolean","nullable":true},"unauthorized_promise":{"type":"boolean","nullable":true},"overall_outcome_label":{"type":"string","nullable":true},"connection_issues":{"type":"boolean","nullable":true},"ran_into_call_screener":{"type":"boolean","nullable":true},"voicemail_box_full":{"type":"boolean","nullable":true},"contact_sentiment":{"type":"string","nullable":true},"language_barrier":{"type":"boolean","nullable":true},"identified_language":{"type":"string","nullable":true},"needs_review":{"type":"boolean","nullable":true},"needs_review_reason":{"type":"string","nullable":true},"illogical_score":{"type":"integer","nullable":true},"compliance":{"nullable":true,"description":"Raw compliance JSONB"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"organization_id":{"type":"string"}}},"Meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid","description":"Unique ID for this request. Echoed in the `X-Request-ID` response\nheader. Send this back to support to debug a specific call.\n"}}}}}}
```

## The CallListResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"CallListResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/CallInternal"}},"meta":{"$ref":"#/components/schemas/ListMeta"}}},"CallInternal":{"type":"object","required":["id","external_id","environment","organization_id","created_at","updated_at"],"description":"Full internal projection of a call — every column on the calls table.\nIncludes telephony-internal fields, raw grade/transcripts JSONB, and\nsoft-delete metadata.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"client_id":{"type":"integer","format":"int64","nullable":true},"use_case_id":{"type":"integer","format":"int64","nullable":true},"customer_id":{"type":"integer","format":"int64","nullable":true},"call_attempt_date":{"type":"string","format":"date-time","nullable":true},"actual_call_date":{"type":"string","format":"date-time","nullable":true},"call_attempt_number":{"type":"integer","nullable":true},"twilio_sid":{"type":"string","nullable":true},"call_length":{"type":"number","format":"double","nullable":true},"escalated":{"type":"boolean","nullable":true},"successful":{"type":"boolean","nullable":true},"connected":{"type":"boolean","nullable":true},"screening_call":{"type":"boolean","nullable":true},"attempted_call":{"type":"boolean","nullable":true},"call_recording_link":{"type":"string","nullable":true},"grade":{"nullable":true,"description":"Raw grading JSONB"},"reason":{"type":"string","nullable":true},"bot_voice_gender":{"type":"string","nullable":true},"pid":{"type":"string","nullable":true},"is_rescheduled":{"type":"boolean","nullable":true},"rescheduled_time":{"type":"string","format":"date-time","nullable":true},"inbound":{"type":"boolean","nullable":true},"vcon_uuid":{"type":"string","nullable":true},"call_attempt_time":{"type":"integer","nullable":true},"transcripts":{"nullable":true,"description":"Raw transcript JSONB"},"pii_redacted_transcript":{"nullable":true},"pii_redacted_audio":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"deleted_at":{"type":"string","format":"date-time","nullable":true},"environment":{"type":"string"},"organization_id":{"type":"string"},"config_variant":{"type":"string","nullable":true},"config_file_used":{"type":"string","nullable":true}}},"ListMeta":{"type":"object","required":["request_id","page"],"properties":{"request_id":{"type":"string","format":"uuid"},"page":{"$ref":"#/components/schemas/PageInfo"}}},"PageInfo":{"type":"object","required":["limit"],"properties":{"limit":{"type":"integer"},"next_cursor":{"type":"string","description":"Pass back as `?cursor=` to get the next page. Absent on the last page."}}}}}}
```

## The CallPatchRequest object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"CallPatchRequest":{"type":"object","required":["call_attempt_date"],"description":"External PATCH allowlist (§3.1): only `call_attempt_date` is editable.\nAny other field returns 400 `field_not_editable`. Sending an explicit\nnull returns 400 — to clear the schedule, DELETE the call instead.\nThe call must also be in a \"scheduled\" state (§3); otherwise 409\n`call_already_started`.\n","properties":{"call_attempt_date":{"type":"string","description":"New scheduled date. Accepts either YYYY-MM-DD (preferred — matches\nthe underlying DATE column) or full RFC3339.\n"}}}}}}
```

## The CustomerExternal object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"CustomerExternal":{"type":"object","required":["id","external_id","allow_multiple_calls_per_day","data","created_at","updated_at"],"description":"External customer projection. The dynamic columns from `customer_data`\nare decoded through the per-(client_id, use_case_id) mapping and\nreturned under `data`. Reserved customer keys (id, first_name, etc.)\nlive at the top level so they can never collide with mapping keys.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"use_case_id":{"type":"integer","format":"int32","nullable":true},"first_name":{"type":"string","nullable":true},"last_name":{"type":"string","nullable":true},"phone_number":{"type":"string","nullable":true},"state":{"type":"string","nullable":true,"description":"2-letter state code."},"do_not_call":{"type":"boolean","nullable":true},"do_not_call_date_requested":{"type":"string","format":"date-time","nullable":true},"allow_multiple_calls_per_day":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"description":"Friendly-keyed dynamic data for this customer. Keys come from\n`customer_data_mapping.string_column_N_name` for the customer's\n(client_id, use_case_id). Empty/zero string and date cells are\nomitted; numeric zeroes are kept (a real \"0\" balance is a valid\nvalue).\n"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The CustomerExternalResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"CustomerExternalResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/CustomerExternal"},"meta":{"$ref":"#/components/schemas/Meta"}}},"CustomerExternal":{"type":"object","required":["id","external_id","allow_multiple_calls_per_day","data","created_at","updated_at"],"description":"External customer projection. The dynamic columns from `customer_data`\nare decoded through the per-(client_id, use_case_id) mapping and\nreturned under `data`. Reserved customer keys (id, first_name, etc.)\nlive at the top level so they can never collide with mapping keys.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"use_case_id":{"type":"integer","format":"int32","nullable":true},"first_name":{"type":"string","nullable":true},"last_name":{"type":"string","nullable":true},"phone_number":{"type":"string","nullable":true},"state":{"type":"string","nullable":true,"description":"2-letter state code."},"do_not_call":{"type":"boolean","nullable":true},"do_not_call_date_requested":{"type":"string","format":"date-time","nullable":true},"allow_multiple_calls_per_day":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"description":"Friendly-keyed dynamic data for this customer. Keys come from\n`customer_data_mapping.string_column_N_name` for the customer's\n(client_id, use_case_id). Empty/zero string and date cells are\nomitted; numeric zeroes are kept (a real \"0\" balance is a valid\nvalue).\n"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid","description":"Unique ID for this request. Echoed in the `X-Request-ID` response\nheader. Send this back to support to debug a specific call.\n"}}}}}}
```

## The CustomerInternalResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"CustomerInternalResponse":{"type":"object","required":["data","meta"],"description":"Raw internal projection — every column on `customers` plus the latest\nraw `customer_data` row. The dynamic columns are NOT decoded; this\nendpoint is for debugging ingestion.\n","properties":{"data":{"type":"object","required":["customer"],"properties":{"customer":{"type":"object","additionalProperties":true,"description":"Full row from `customers`."},"customer_data":{"type":"object","additionalProperties":true,"nullable":true,"description":"Latest raw row from `customer_data`, or null if none exists yet."}}},"meta":{"$ref":"#/components/schemas/Meta"}}},"Meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid","description":"Unique ID for this request. Echoed in the `X-Request-ID` response\nheader. Send this back to support to debug a specific call.\n"}}}}}}
```

## The CustomerCreateRequest object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"CustomerCreateRequest":{"type":"object","required":["use_case_id"],"description":"Body for POST /v1/customers.\n\n`client_id` is intentionally absent — it's resolved from the API key.\n`data` carries the friendly-keyed dynamic columns; reserved customer\nkeys (first_name, phone_number, etc.) must be at the top level (and\nwill be rejected if nested inside `data`).\n","properties":{"use_case_id":{"type":"integer","format":"int64"},"first_name":{"type":"string"},"last_name":{"type":"string"},"phone_number":{"type":"string"},"state":{"type":"string"},"do_not_call":{"type":"boolean"},"allow_multiple_calls_per_day":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"description":"Friendly-keyed dynamic columns matching the existing customer_data_mapping for this (client_id, use_case_id)."}}}}}}
```

## The CustomerPatchRequest object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"CustomerPatchRequest":{"type":"object","description":"Body for PATCH /v1/customers/:id. Empty body returns 400. Unknown\ntop-level keys return 400 `field_not_editable`. Friendly keys inside\n`data` that aren't in the mapping return 400 `field_not_editable`.\n","properties":{"first_name":{"type":"string","nullable":true},"last_name":{"type":"string","nullable":true},"phone_number":{"type":"string","nullable":true},"state":{"type":"string","nullable":true},"do_not_call":{"type":"boolean","nullable":true},"allow_multiple_calls_per_day":{"type":"boolean"},"data":{"type":"object","additionalProperties":true,"description":"Mapping-aware partial update of the latest customer_data row.\nSending an explicit null for a key is silently skipped — varchar\ncolumns can't be reset to empty via PATCH (use DELETE + recreate\nfor that flow if needed).\n"}}}}}}
```

## The CallMetricsResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"CallMetricsResponse":{"type":"object","required":["data","meta"],"description":"Internal-only call observability data. The `data` object echoes every\ncolumn on `call_metrics` keyed by snake_case column name. Most\nnumeric columns are nullable — null means \"not measured for this\ncall\" rather than zero.\n","properties":{"data":{"type":"object","additionalProperties":true,"description":"Raw `call_metrics` row keyed by column name."},"meta":{"$ref":"#/components/schemas/Meta"}}},"Meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid","description":"Unique ID for this request. Echoed in the `X-Request-ID` response\nheader. Send this back to support to debug a specific call.\n"}}}}}}
```

## The IntegrationExternal object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"IntegrationExternal":{"type":"object","required":["id","external_id","integration_id","name","display_name","created_at","updated_at"],"description":"External integration projection — connector identity only. The\n`config` JSONB is intentionally excluded because it holds vendor\ncredentials.\n","properties":{"id":{"type":"integer","format":"int64","description":"client_integrations.id"},"external_id":{"type":"string","format":"uuid"},"integration_id":{"type":"integer","format":"int64","description":"FK into the integrations catalog."},"name":{"type":"string","description":"Stable machine name (e.g. \"envisant\")."},"display_name":{"type":"string"},"description":{"type":"string","nullable":true},"logo_url":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The IntegrationInternal object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"IntegrationInternal":{"type":"object","required":["id","external_id","client_id","integration_id","name","display_name","created_at","updated_at"],"description":"Full internal integration row including the `config` JSONB. Use\nwith care — `config` typically contains API tokens.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"client_id":{"type":"integer","format":"int64"},"integration_id":{"type":"integer","format":"int64"},"organization_id":{"type":"string","nullable":true},"name":{"type":"string"},"display_name":{"type":"string"},"description":{"type":"string","nullable":true},"logo_url":{"type":"string","nullable":true},"config":{"description":"Free-form JSONB credentials/configuration for this connection.","type":"object","additionalProperties":true,"nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The IntegrationExternalListResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"IntegrationExternalListResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IntegrationExternal"}},"meta":{"$ref":"#/components/schemas/ListMeta"}}},"IntegrationExternal":{"type":"object","required":["id","external_id","integration_id","name","display_name","created_at","updated_at"],"description":"External integration projection — connector identity only. The\n`config` JSONB is intentionally excluded because it holds vendor\ncredentials.\n","properties":{"id":{"type":"integer","format":"int64","description":"client_integrations.id"},"external_id":{"type":"string","format":"uuid"},"integration_id":{"type":"integer","format":"int64","description":"FK into the integrations catalog."},"name":{"type":"string","description":"Stable machine name (e.g. \"envisant\")."},"display_name":{"type":"string"},"description":{"type":"string","nullable":true},"logo_url":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"ListMeta":{"type":"object","required":["request_id","page"],"properties":{"request_id":{"type":"string","format":"uuid"},"page":{"$ref":"#/components/schemas/PageInfo"}}},"PageInfo":{"type":"object","required":["limit"],"properties":{"limit":{"type":"integer"},"next_cursor":{"type":"string","description":"Pass back as `?cursor=` to get the next page. Absent on the last page."}}}}}}
```

## The IntegrationInternalListResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"IntegrationInternalListResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/IntegrationInternal"}},"meta":{"$ref":"#/components/schemas/ListMeta"}}},"IntegrationInternal":{"type":"object","required":["id","external_id","client_id","integration_id","name","display_name","created_at","updated_at"],"description":"Full internal integration row including the `config` JSONB. Use\nwith care — `config` typically contains API tokens.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"client_id":{"type":"integer","format":"int64"},"integration_id":{"type":"integer","format":"int64"},"organization_id":{"type":"string","nullable":true},"name":{"type":"string"},"display_name":{"type":"string"},"description":{"type":"string","nullable":true},"logo_url":{"type":"string","nullable":true},"config":{"description":"Free-form JSONB credentials/configuration for this connection.","type":"object","additionalProperties":true,"nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"ListMeta":{"type":"object","required":["request_id","page"],"properties":{"request_id":{"type":"string","format":"uuid"},"page":{"$ref":"#/components/schemas/PageInfo"}}},"PageInfo":{"type":"object","required":["limit"],"properties":{"limit":{"type":"integer"},"next_cursor":{"type":"string","description":"Pass back as `?cursor=` to get the next page. Absent on the last page."}}}}}}
```

## The ActionLogExternal object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ActionLogExternal":{"type":"object","required":["id","external_id","call_id","action_name","action_type","status","executed_at"],"description":"External slim projection of an action_logs row. Excludes\n`input_params_snapshot` and `output_result` because they can hold\nrendered customer PII or vendor API payloads.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"call_id":{"type":"integer","format":"int64"},"action_name":{"type":"string"},"action_type":{"type":"string"},"status":{"type":"string","description":"e.g. \"succeeded\", \"failed\", \"skipped\"."},"executed_at":{"type":"string","format":"date-time"},"error_message":{"type":"string","nullable":true}}}}}}
```

## The ActionLogInternal object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ActionLogInternal":{"type":"object","required":["id","external_id","call_id","client_id","use_case_id","action_name","action_type","status","executed_at","created_at","updated_at"],"description":"Full action_logs row. `input_params_snapshot` and `output_result`\nare passed through as raw JSON so internal tooling can inspect\nwhatever the action handler stored.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"call_id":{"type":"integer","format":"int64"},"client_id":{"type":"integer","format":"int64"},"use_case_id":{"type":"integer","format":"int64"},"customer_id":{"type":"string","nullable":true},"action_attachment_id":{"type":"integer","format":"int64","nullable":true},"configured_action_id":{"type":"integer","format":"int64","nullable":true},"action_name":{"type":"string"},"action_type":{"type":"string"},"status":{"type":"string"},"executed_at":{"type":"string","format":"date-time"},"input_params_snapshot":{"nullable":true,"description":"Free-form JSONB snapshot of the action's input params at run time."},"output_result":{"nullable":true,"description":"Free-form JSONB result returned by the action handler."},"error_message":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The ActionLogExternalListResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ActionLogExternalListResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ActionLogExternal"}},"meta":{"$ref":"#/components/schemas/ListMeta"}}},"ActionLogExternal":{"type":"object","required":["id","external_id","call_id","action_name","action_type","status","executed_at"],"description":"External slim projection of an action_logs row. Excludes\n`input_params_snapshot` and `output_result` because they can hold\nrendered customer PII or vendor API payloads.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"call_id":{"type":"integer","format":"int64"},"action_name":{"type":"string"},"action_type":{"type":"string"},"status":{"type":"string","description":"e.g. \"succeeded\", \"failed\", \"skipped\"."},"executed_at":{"type":"string","format":"date-time"},"error_message":{"type":"string","nullable":true}}},"ListMeta":{"type":"object","required":["request_id","page"],"properties":{"request_id":{"type":"string","format":"uuid"},"page":{"$ref":"#/components/schemas/PageInfo"}}},"PageInfo":{"type":"object","required":["limit"],"properties":{"limit":{"type":"integer"},"next_cursor":{"type":"string","description":"Pass back as `?cursor=` to get the next page. Absent on the last page."}}}}}}
```

## The ActionLogInternalListResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ActionLogInternalListResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ActionLogInternal"}},"meta":{"$ref":"#/components/schemas/ListMeta"}}},"ActionLogInternal":{"type":"object","required":["id","external_id","call_id","client_id","use_case_id","action_name","action_type","status","executed_at","created_at","updated_at"],"description":"Full action_logs row. `input_params_snapshot` and `output_result`\nare passed through as raw JSON so internal tooling can inspect\nwhatever the action handler stored.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"call_id":{"type":"integer","format":"int64"},"client_id":{"type":"integer","format":"int64"},"use_case_id":{"type":"integer","format":"int64"},"customer_id":{"type":"string","nullable":true},"action_attachment_id":{"type":"integer","format":"int64","nullable":true},"configured_action_id":{"type":"integer","format":"int64","nullable":true},"action_name":{"type":"string"},"action_type":{"type":"string"},"status":{"type":"string"},"executed_at":{"type":"string","format":"date-time"},"input_params_snapshot":{"nullable":true,"description":"Free-form JSONB snapshot of the action's input params at run time."},"output_result":{"nullable":true,"description":"Free-form JSONB result returned by the action handler."},"error_message":{"type":"string","nullable":true},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"ListMeta":{"type":"object","required":["request_id","page"],"properties":{"request_id":{"type":"string","format":"uuid"},"page":{"$ref":"#/components/schemas/PageInfo"}}},"PageInfo":{"type":"object","required":["limit"],"properties":{"limit":{"type":"integer"},"next_cursor":{"type":"string","description":"Pass back as `?cursor=` to get the next page. Absent on the last page."}}}}}}
```

## The ActionDefinitionInternal object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ActionDefinitionInternal":{"type":"object","required":["id","external_id","action_name","display_name","type","category","integration_required"],"description":"Trimmed `action_definitions` projection returned alongside a\nconfigured action when `?include=definition` is set on the GET.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"action_name":{"type":"string"},"display_name":{"type":"string"},"type":{"type":"string"},"category":{"type":"string"},"description":{"type":"string","nullable":true},"summary":{"type":"string","nullable":true},"output_variable_name":{"type":"string","nullable":true},"integration_required":{"type":"boolean"},"integration_id":{"type":"integer","format":"int64","nullable":true},"params_schema":{"nullable":true,"description":"JSON Schema document used to validate action_params on POST/PATCH."}}}}}}
```

## The ConfiguredActionInternal object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ConfiguredActionInternal":{"type":"object","required":["id","external_id","client_id","action_definition_id","name","status","is_post_call","action_params","created_at","updated_at"],"description":"Full internal projection of a `configured_actions` row.","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"client_id":{"type":"integer","format":"int64"},"action_definition_id":{"type":"integer","format":"int64"},"name":{"type":"string"},"status":{"type":"string","description":"e.g. \"draft\", \"live\", \"paused\"."},"description":{"type":"string","nullable":true},"is_post_call":{"type":"boolean"},"monitor_required":{"type":"string","nullable":true},"value_required":{"type":"boolean","nullable":true},"action_params":{"nullable":true,"description":"Free-form JSONB that must satisfy the linked action_definitions.params_schema."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"action_definition":{"allOf":[{"$ref":"#/components/schemas/ActionDefinitionInternal"}],"nullable":true,"description":"Hydrated only when `?include=definition` is passed on the GET."}}},"ActionDefinitionInternal":{"type":"object","required":["id","external_id","action_name","display_name","type","category","integration_required"],"description":"Trimmed `action_definitions` projection returned alongside a\nconfigured action when `?include=definition` is set on the GET.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"action_name":{"type":"string"},"display_name":{"type":"string"},"type":{"type":"string"},"category":{"type":"string"},"description":{"type":"string","nullable":true},"summary":{"type":"string","nullable":true},"output_variable_name":{"type":"string","nullable":true},"integration_required":{"type":"boolean"},"integration_id":{"type":"integer","format":"int64","nullable":true},"params_schema":{"nullable":true,"description":"JSON Schema document used to validate action_params on POST/PATCH."}}}}}}
```

## The ConfiguredActionInternalResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ConfiguredActionInternalResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/ConfiguredActionInternal"},"meta":{"$ref":"#/components/schemas/Meta"}}},"ConfiguredActionInternal":{"type":"object","required":["id","external_id","client_id","action_definition_id","name","status","is_post_call","action_params","created_at","updated_at"],"description":"Full internal projection of a `configured_actions` row.","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"client_id":{"type":"integer","format":"int64"},"action_definition_id":{"type":"integer","format":"int64"},"name":{"type":"string"},"status":{"type":"string","description":"e.g. \"draft\", \"live\", \"paused\"."},"description":{"type":"string","nullable":true},"is_post_call":{"type":"boolean"},"monitor_required":{"type":"string","nullable":true},"value_required":{"type":"boolean","nullable":true},"action_params":{"nullable":true,"description":"Free-form JSONB that must satisfy the linked action_definitions.params_schema."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"action_definition":{"allOf":[{"$ref":"#/components/schemas/ActionDefinitionInternal"}],"nullable":true,"description":"Hydrated only when `?include=definition` is passed on the GET."}}},"ActionDefinitionInternal":{"type":"object","required":["id","external_id","action_name","display_name","type","category","integration_required"],"description":"Trimmed `action_definitions` projection returned alongside a\nconfigured action when `?include=definition` is set on the GET.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"action_name":{"type":"string"},"display_name":{"type":"string"},"type":{"type":"string"},"category":{"type":"string"},"description":{"type":"string","nullable":true},"summary":{"type":"string","nullable":true},"output_variable_name":{"type":"string","nullable":true},"integration_required":{"type":"boolean"},"integration_id":{"type":"integer","format":"int64","nullable":true},"params_schema":{"nullable":true,"description":"JSON Schema document used to validate action_params on POST/PATCH."}}},"Meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid","description":"Unique ID for this request. Echoed in the `X-Request-ID` response\nheader. Send this back to support to debug a specific call.\n"}}}}}}
```

## The ConfiguredActionInternalListResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ConfiguredActionInternalListResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ConfiguredActionInternal"}},"meta":{"$ref":"#/components/schemas/ListMeta"}}},"ConfiguredActionInternal":{"type":"object","required":["id","external_id","client_id","action_definition_id","name","status","is_post_call","action_params","created_at","updated_at"],"description":"Full internal projection of a `configured_actions` row.","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"client_id":{"type":"integer","format":"int64"},"action_definition_id":{"type":"integer","format":"int64"},"name":{"type":"string"},"status":{"type":"string","description":"e.g. \"draft\", \"live\", \"paused\"."},"description":{"type":"string","nullable":true},"is_post_call":{"type":"boolean"},"monitor_required":{"type":"string","nullable":true},"value_required":{"type":"boolean","nullable":true},"action_params":{"nullable":true,"description":"Free-form JSONB that must satisfy the linked action_definitions.params_schema."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"},"action_definition":{"allOf":[{"$ref":"#/components/schemas/ActionDefinitionInternal"}],"nullable":true,"description":"Hydrated only when `?include=definition` is passed on the GET."}}},"ActionDefinitionInternal":{"type":"object","required":["id","external_id","action_name","display_name","type","category","integration_required"],"description":"Trimmed `action_definitions` projection returned alongside a\nconfigured action when `?include=definition` is set on the GET.\n","properties":{"id":{"type":"integer","format":"int64"},"external_id":{"type":"string","format":"uuid"},"action_name":{"type":"string"},"display_name":{"type":"string"},"type":{"type":"string"},"category":{"type":"string"},"description":{"type":"string","nullable":true},"summary":{"type":"string","nullable":true},"output_variable_name":{"type":"string","nullable":true},"integration_required":{"type":"boolean"},"integration_id":{"type":"integer","format":"int64","nullable":true},"params_schema":{"nullable":true,"description":"JSON Schema document used to validate action_params on POST/PATCH."}}},"ListMeta":{"type":"object","required":["request_id","page"],"properties":{"request_id":{"type":"string","format":"uuid"},"page":{"$ref":"#/components/schemas/PageInfo"}}},"PageInfo":{"type":"object","required":["limit"],"properties":{"limit":{"type":"integer"},"next_cursor":{"type":"string","description":"Pass back as `?cursor=` to get the next page. Absent on the last page."}}}}}}
```

## The ConfiguredActionCreateRequest object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ConfiguredActionCreateRequest":{"type":"object","required":["client_id","action_definition_id","name","action_params"],"description":"Body for POST /internal/v1/actions. `action_params` must satisfy\nthe target action_definition's `params_schema`. Any field-level\nvalidation errors are reported with code `invalid_action_params`.\n","properties":{"client_id":{"type":"integer","format":"int64"},"action_definition_id":{"type":"integer","format":"int64"},"name":{"type":"string"},"action_params":{"description":"Free-form JSON that will be validated against params_schema."},"status":{"type":"string","default":"draft"},"description":{"type":"string","nullable":true},"is_post_call":{"type":"boolean","default":false},"monitor_required":{"type":"string","nullable":true},"value_required":{"type":"boolean","nullable":true}}}}}}
```

## The ConfiguredActionPatchRequest object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ConfiguredActionPatchRequest":{"type":"object","description":"Body for PATCH /internal/v1/actions/:id. Empty body returns 400.\nUnknown top-level keys return 400 `field_not_editable`. Touching\neither `action_params` OR `action_definition_id` re-validates the\nparams against the (possibly new) definition.\n","properties":{"name":{"type":"string"},"status":{"type":"string"},"description":{"type":"string","nullable":true},"action_definition_id":{"type":"integer","format":"int64"},"action_params":{"description":"Free-form JSON that will be validated against the (possibly new) params_schema."},"is_post_call":{"type":"boolean"},"monitor_required":{"type":"string","nullable":true},"value_required":{"type":"boolean","nullable":true}}}}}}
```

## The SchedulingRule object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"SchedulingRule":{"type":"object","required":["id","use_case_id","timezone","holiday_handling","pattern","priority","enabled","number_concurrent","created_at","updated_at"],"description":"A Cron++ scheduling rule. The `pattern` field is a JSON document\nfollowing the cronpp shape — see operator/cronpp/types.go. Soft\ndelete flips `enabled` to `false`; the engine treats disabled\nrules as if they didn't exist.\n","properties":{"id":{"type":"integer","format":"int64"},"use_case_id":{"type":"integer","format":"int64"},"start_date":{"type":"string","format":"date-time","nullable":true},"end_date":{"type":"string","format":"date-time","nullable":true},"timezone":{"type":"string"},"holiday_calendar":{"type":"string","nullable":true},"holiday_handling":{"type":"string","description":"One of \"exclude\", \"include_only\", \"ignore\"."},"pattern":{"description":"cronpp-shape pattern — see operator/cronpp/types.go."},"priority":{"type":"integer"},"enabled":{"type":"boolean"},"number_concurrent":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}}}}}
```

## The SchedulingRuleResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"SchedulingRuleResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/SchedulingRule"},"meta":{"$ref":"#/components/schemas/Meta"}}},"SchedulingRule":{"type":"object","required":["id","use_case_id","timezone","holiday_handling","pattern","priority","enabled","number_concurrent","created_at","updated_at"],"description":"A Cron++ scheduling rule. The `pattern` field is a JSON document\nfollowing the cronpp shape — see operator/cronpp/types.go. Soft\ndelete flips `enabled` to `false`; the engine treats disabled\nrules as if they didn't exist.\n","properties":{"id":{"type":"integer","format":"int64"},"use_case_id":{"type":"integer","format":"int64"},"start_date":{"type":"string","format":"date-time","nullable":true},"end_date":{"type":"string","format":"date-time","nullable":true},"timezone":{"type":"string"},"holiday_calendar":{"type":"string","nullable":true},"holiday_handling":{"type":"string","description":"One of \"exclude\", \"include_only\", \"ignore\"."},"pattern":{"description":"cronpp-shape pattern — see operator/cronpp/types.go."},"priority":{"type":"integer"},"enabled":{"type":"boolean"},"number_concurrent":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid","description":"Unique ID for this request. Echoed in the `X-Request-ID` response\nheader. Send this back to support to debug a specific call.\n"}}}}}}
```

## The SchedulingRuleListResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"SchedulingRuleListResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SchedulingRule"}},"meta":{"$ref":"#/components/schemas/Meta"}}},"SchedulingRule":{"type":"object","required":["id","use_case_id","timezone","holiday_handling","pattern","priority","enabled","number_concurrent","created_at","updated_at"],"description":"A Cron++ scheduling rule. The `pattern` field is a JSON document\nfollowing the cronpp shape — see operator/cronpp/types.go. Soft\ndelete flips `enabled` to `false`; the engine treats disabled\nrules as if they didn't exist.\n","properties":{"id":{"type":"integer","format":"int64"},"use_case_id":{"type":"integer","format":"int64"},"start_date":{"type":"string","format":"date-time","nullable":true},"end_date":{"type":"string","format":"date-time","nullable":true},"timezone":{"type":"string"},"holiday_calendar":{"type":"string","nullable":true},"holiday_handling":{"type":"string","description":"One of \"exclude\", \"include_only\", \"ignore\"."},"pattern":{"description":"cronpp-shape pattern — see operator/cronpp/types.go."},"priority":{"type":"integer"},"enabled":{"type":"boolean"},"number_concurrent":{"type":"integer"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid","description":"Unique ID for this request. Echoed in the `X-Request-ID` response\nheader. Send this back to support to debug a specific call.\n"}}}}}}
```

## The SchedulingRuleCreateRequest object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"SchedulingRuleCreateRequest":{"type":"object","required":["use_case_id","pattern"],"description":"Body for POST /v1/scheduling-rules and POST\n/internal/v1/scheduling-rules. External callers must own the\ntarget use case (resolved from API key); internal callers are\ntrusted to pass any use_case_id.\n","properties":{"use_case_id":{"type":"integer","format":"int64"},"start_date":{"type":"string","format":"date-time","nullable":true},"end_date":{"type":"string","format":"date-time","nullable":true},"timezone":{"type":"string","default":"UTC"},"holiday_calendar":{"type":"string","nullable":true},"holiday_handling":{"type":"string","default":"exclude"},"pattern":{"description":"cronpp-shape pattern. Validated server-side; bad shapes return 400."},"priority":{"type":"integer"},"number_concurrent":{"type":"integer","default":1}}}}}}
```

## The SchedulingRulePatchRequest object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"SchedulingRulePatchRequest":{"type":"object","description":"Body for PATCH /v1/scheduling-rules/:id. Empty body returns 400.\nUnknown top-level keys return 400 `field_not_editable`. The\nexternal variant rejects `enabled` (use DELETE for soft delete);\nthe internal variant accepts it so a soft-deleted rule can be\nreactivated.\n","properties":{"start_date":{"type":"string","format":"date-time","nullable":true},"end_date":{"type":"string","format":"date-time","nullable":true},"timezone":{"type":"string"},"holiday_calendar":{"type":"string","nullable":true},"holiday_handling":{"type":"string"},"pattern":{"description":"cronpp-shape pattern. Re-validated on every PATCH that touches this field."},"priority":{"type":"integer"},"number_concurrent":{"type":"integer"},"enabled":{"type":"boolean","description":"Internal-only. External callers should use DELETE to disable a rule."}}}}}}
```

## The PauseExternalRequest object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"PauseExternalRequest":{"type":"object","description":"Body for POST /v1/calls/actions/{pause,unpause}. `client_id` is\nrejected here — external callers' client_id is inferred from\nthe API key. Empty body is allowed (pauses all of the client's\nactive use cases for today).\n","properties":{"use_case_id":{"type":"integer","format":"int64","nullable":true},"perma":{"type":"boolean","default":false,"description":"When true, also disables every scheduling rule for the client's active use cases (pause) or re-enables them (unpause)."}}}}}}
```

## The PauseInternalRequest object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"PauseInternalRequest":{"type":"object","required":["client_id"],"description":"Body for POST /internal/v1/calls/actions/{pause,unpause}.\n`client_id` is required because internal env-keys aren't tied\nto a single client.\n","properties":{"client_id":{"type":"integer","format":"int64"},"use_case_id":{"type":"integer","format":"int64","nullable":true},"perma":{"type":"boolean","default":false}}}}}}
```

## The PauseResponseBody object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"PauseResponseBody":{"type":"object","required":["calls_updated","use_cases_updated","scheduling_rules_updated","perma"],"description":"Counts of rows touched by the pause/unpause operation. Useful\nfor operator dashboards — silently returning {} would lose\nobservability.\n","properties":{"calls_updated":{"type":"integer","format":"int64"},"use_cases_updated":{"type":"integer","format":"int64"},"scheduling_rules_updated":{"type":"integer","format":"int64"},"perma":{"type":"boolean"}}}}}}
```

## The PauseResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"PauseResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/PauseResponseBody"},"meta":{"$ref":"#/components/schemas/Meta"}}},"PauseResponseBody":{"type":"object","required":["calls_updated","use_cases_updated","scheduling_rules_updated","perma"],"description":"Counts of rows touched by the pause/unpause operation. Useful\nfor operator dashboards — silently returning {} would lose\nobservability.\n","properties":{"calls_updated":{"type":"integer","format":"int64"},"use_cases_updated":{"type":"integer","format":"int64"},"scheduling_rules_updated":{"type":"integer","format":"int64"},"perma":{"type":"boolean"}}},"Meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid","description":"Unique ID for this request. Echoed in the `X-Request-ID` response\nheader. Send this back to support to debug a specific call.\n"}}}}}}
```

## The FreezeInternalRequest object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"FreezeInternalRequest":{"type":"object","required":["client_id"],"description":"Body for internal freeze/unfreeze. The use_case_id comes from\nthe URL; client_id is required so the UPDATE is scoped tightly\nand a fat-fingered request can't freeze a different client's\nuse case that happens to share the id.\n","properties":{"client_id":{"type":"integer","format":"int64"}}}}}}
```

## The FreezeResponseBody object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"FreezeResponseBody":{"type":"object","required":["use_case_id","frozen","use_cases_updated"],"properties":{"use_case_id":{"type":"integer","format":"int64"},"frozen":{"type":"boolean"},"use_cases_updated":{"type":"integer","format":"int64","description":"Rows touched by the UPDATE. 0 means the use case was already in the requested state or did not exist for this client."}}}}}}
```

## The FreezeResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"FreezeResponse":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/FreezeResponseBody"},"meta":{"$ref":"#/components/schemas/Meta"}}},"FreezeResponseBody":{"type":"object","required":["use_case_id","frozen","use_cases_updated"],"properties":{"use_case_id":{"type":"integer","format":"int64"},"frozen":{"type":"boolean"},"use_cases_updated":{"type":"integer","format":"int64","description":"Rows touched by the UPDATE. 0 means the use case was already in the requested state or did not exist for this client."}}},"Meta":{"type":"object","required":["request_id"],"properties":{"request_id":{"type":"string","format":"uuid","description":"Unique ID for this request. Echoed in the `X-Request-ID` response\nheader. Send this back to support to debug a specific call.\n"}}}}}}
```

## The ErrorResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ErrorResponse":{"type":"object","required":["message"],"description":"Legacy clientApi error shape. Distinct from `ErrorEnvelope` —\nthe legacy routes return a flat `{message, error?}` payload\nwithout a stable code or request_id.\n","properties":{"message":{"type":"string","description":"Error message"},"error":{"type":"string","description":"Detailed error information"}}}}}}
```

## The ColumnMapping object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"ColumnMapping":{"type":"object","required":["useCaseName","columnValues"],"properties":{"useCaseName":{"type":"string","nullable":true,"description":"The name of the use case"},"columnValues":{"type":"array","items":{"type":"string"},"description":"Array of column name mappings for this use case"}}}}}}
```

## The GetMappingResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"GetMappingResponse":{"type":"object","required":["message","clientName","listOfUseCaseNamesAndValues"],"properties":{"message":{"type":"string"},"clientName":{"type":"string","description":"The client name associated with the API key"},"listOfUseCaseNamesAndValues":{"type":"array","items":{"$ref":"#/components/schemas/ColumnMapping"}}}},"ColumnMapping":{"type":"object","required":["useCaseName","columnValues"],"properties":{"useCaseName":{"type":"string","nullable":true,"description":"The name of the use case"},"columnValues":{"type":"array","items":{"type":"string"},"description":"Array of column name mappings for this use case"}}}}}}
```

## The AllowMultipleCallsPerDayProperty object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"AllowMultipleCallsPerDayProperty":{"type":"boolean","description":"When true, relaxes same-day and related outbound frequency limits for this customer (multiple qualifying runs per day; a short cooldown may still apply).\nOmit the field or send JSON null: the existing database value is left unchanged for customers that already exist; for new customers the column defaults to false.\nWhen explicitly false, stores false.\n"}}}}
```

## The SingleAccountCallStartRequest object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"SingleAccountCallStartRequest":{"oneOf":[{"type":"object","required":["clientName","useCaseName"],"properties":{"clientName":{"type":"string","description":"The name of the client"},"useCaseName":{"type":"string","description":"The name of the use case"},"allow_multiple_calls_per_day":{"$ref":"#/components/schemas/AllowMultipleCallsPerDayProperty"},"additionalProperties":{"type":"string","description":"Additional fields that match the column mappings for the use case"}},"description":"Single record format - customer fields are provided directly in the request body"},{"type":"object","required":["clientName","useCaseName","records"],"properties":{"clientName":{"type":"string","description":"The name of the client"},"useCaseName":{"type":"string","description":"The name of the use case"},"records":{"type":"array","minItems":1,"description":"Array of customer records for the same contact (one outbound call can reference all records); each object includes fields matching the column mappings for the use case","items":{"type":"object","properties":{"allow_multiple_calls_per_day":{"$ref":"#/components/schemas/AllowMultipleCallsPerDayProperty"}},"additionalProperties":{"type":"string"}}}},"description":"Multiple records format - customer records are provided in a \"records\" array (same contact, multiple data rows)"}]},"AllowMultipleCallsPerDayProperty":{"type":"boolean","description":"When true, relaxes same-day and related outbound frequency limits for this customer (multiple qualifying runs per day; a short cooldown may still apply).\nOmit the field or send JSON null: the existing database value is left unchanged for customers that already exist; for new customers the column defaults to false.\nWhen explicitly false, stores false.\n"}}}}
```

## The SingleAccountCallStartResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"SingleAccountCallStartResponse":{"type":"object","required":["message","callIDs","count"],"properties":{"message":{"type":"string"},"callIDs":{"type":"array","items":{"type":"integer","format":"int64"},"description":"Array of unique identifiers for the call records that were created"},"count":{"type":"integer","description":"The number of call records created"},"callID":{"type":"integer","format":"int64","description":"The unique identifier of the call record (included for backward compatibility when only one record is processed)"}}}}}}
```

## The GetOutputFileResponse object

```json
{"openapi":"3.0.3","info":{"title":"Aviary v1 API (merged — Osprey v1 + legacy clientApi)","version":"1.0.0"},"components":{"schemas":{"GetOutputFileResponse":{"type":"object","required":["message","csvData"],"properties":{"message":{"type":"string"},"csvData":{"type":"array","items":{"type":"object","additionalProperties":{"type":"string"}},"description":"Array of objects where each object represents a row of data with column names as keys"}}}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://api-docs.helloaviary.ai/models.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
