Repository navigation
Expand file tree
/
Copy pathtest_output.txt
More file actions
75 lines (68 loc) · 170 KB
/
Copy pathtest_output.txt
File metadata and controls
75 lines (68 loc) · 170 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
test_build_reverse_map (test_gen_graphql_schema.TestGenGraphQLSchema.test_build_reverse_map)
Test the extraction of FK declarations into a directional reverse map. ... ok
test_gql_type_mapper (test_gen_graphql_schema.TestGenGraphQLSchema.test_gql_type_mapper)
Test extraction and mapping of GraphQL primitives. ... ok
test_naming_helpers (test_gen_graphql_schema.TestGenGraphQLSchema.test_naming_helpers)
Test entity naming resolution helpers. ... FAIL
test_build_entity_schema (test_gen_openapi_spec.TestGenOpenAPISpec.test_build_entity_schema)
Test schema construction for an entire entity. ... ok
test_naming_helpers (test_gen_openapi_spec.TestGenOpenAPISpec.test_naming_helpers)
Test the extraction of label and subresource from entity. ... ok
test_openapi_type_mapping (test_gen_openapi_spec.TestGenOpenAPISpec.test_openapi_type_mapping)
Test mapping JSON schema types to OpenAPI types including nullability. ... ok
test_entities_json (test_output_invariants.TestOutputInvariants.test_entities_json)
Test extracted/entities.json is valid and contains standard entries. ... FAIL
test_graphql_resolvers (test_output_invariants.TestOutputInvariants.test_graphql_resolvers)
Test extracted/graphql-resolvers.js contains basic mappings. ... ok
test_graphql_typedefs (test_output_invariants.TestOutputInvariants.test_graphql_typedefs)
Test extracted/graphql-typedefs.js compiles as a valid template. ... ok
test_lib_integrity (test_output_invariants.TestOutputInvariants.test_lib_integrity)
Test the integrity of static files in scripts/lib/. ... ok
test_openapi_json (test_output_invariants.TestOutputInvariants.test_openapi_json)
Test extracted/openapi.json is valid OpenAPI format. ... FAIL
test_parse_abstract_models (test_parse_django_models.TestParseDjangoModels.test_parse_abstract_models)
Test parsing of Django abstract base models using AST. ... FAIL
test_parse_concrete_models (test_parse_django_models.TestParseDjangoModels.test_parse_concrete_models)
Test parsing of Django concrete models inheriting from abstract bases. ... ok
======================================================================
FAIL: test_naming_helpers (test_gen_graphql_schema.TestGenGraphQLSchema.test_naming_helpers)
Test entity naming resolution helpers.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/remco/src/pdbfe/scripts/tests/test_gen_graphql_schema.py", line 30, in test_naming_helpers
self.assertEqual(_plural(empty_ent), "customs")
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'custom' != 'customs'
- custom
+ customs
? +
======================================================================
FAIL: test_entities_json (test_output_invariants.TestOutputInvariants.test_entities_json)
Test extracted/entities.json is valid and contains standard entries.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/remco/src/pdbfe/scripts/tests/test_output_invariants.py", line 26, in test_entities_json
self.assertIn("id", [f["name"] for f in entities[tag]["fields"]])
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'id' not found in ['asn', 'name', 'aka', 'name_long', 'irr_as_set', 'website', 'social_media', 'looking_glass', 'route_server', 'notes', 'notes_private', 'info_traffic', 'info_ratio', 'info_scope', 'info_types', 'info_prefixes4', 'info_prefixes6', 'info_unicast', 'info_multicast', 'info_ipv6', 'info_never_via_route_servers', 'policy_url', 'policy_general', 'policy_locations', 'policy_ratio', 'policy_contracts', 'status_dashboard', 'rir_status', 'rir_status_updated', 'org_id', 'info_type', 'ix_count', 'fac_count', 'netixlan_updated', 'netfac_updated', 'poc_updated', 'allow_ixp_update', 'logo']
======================================================================
FAIL: test_openapi_json (test_output_invariants.TestOutputInvariants.test_openapi_json)
Test extracted/openapi.json is valid OpenAPI format.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/remco/src/pdbfe/scripts/tests/test_output_invariants.py", line 42, in test_openapi_json
self.assertIn("/api/net", data["paths"])
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: '/api/net' not found in {'/v1/org': {'get': {'operationId': 'list_org', 'summary': 'List Organizations', 'description': 'Returns a list of organizations matching the given filters.', 'tags': ['Organization'], 'parameters': [{'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'since', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Unix epoch. Only return records updated since this time.'}, {'name': 'sort', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Field name to sort by. Prefix with - for descending.'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}, {'name': 'name', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name'}, {'name': 'name__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (contains operator)'}, {'name': 'name__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (startswith operator)'}, {'name': 'name__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (in operator) — comma-separated values'}, {'name': 'aka', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka'}, {'name': 'aka__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (contains operator)'}, {'name': 'aka__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (startswith operator)'}, {'name': 'aka__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (in operator) — comma-separated values'}, {'name': 'name_long', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long'}, {'name': 'name_long__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (contains operator)'}, {'name': 'name_long__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (startswith operator)'}, {'name': 'name_long__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (in operator) — comma-separated values'}, {'name': 'website', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website'}, {'name': 'website__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (contains operator)'}, {'name': 'website__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (startswith operator)'}, {'name': 'website__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (in operator) — comma-separated values'}, {'name': 'notes', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes'}, {'name': 'notes__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (contains operator)'}, {'name': 'notes__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (startswith operator)'}, {'name': 'notes__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (in operator) — comma-separated values'}, {'name': 'address1', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address1'}, {'name': 'address1__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address1 (contains operator)'}, {'name': 'address1__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address1 (startswith operator)'}, {'name': 'address1__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address1 (in operator) — comma-separated values'}, {'name': 'address2', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address2'}, {'name': 'address2__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address2 (contains operator)'}, {'name': 'address2__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address2 (startswith operator)'}, {'name': 'address2__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address2 (in operator) — comma-separated values'}, {'name': 'city', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city'}, {'name': 'city__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city (contains operator)'}, {'name': 'city__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city (startswith operator)'}, {'name': 'city__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city (in operator) — comma-separated values'}, {'name': 'country', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country'}, {'name': 'country__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country (contains operator)'}, {'name': 'country__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country (startswith operator)'}, {'name': 'country__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country (in operator) — comma-separated values'}, {'name': 'state', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by state'}, {'name': 'state__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by state (contains operator)'}, {'name': 'state__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by state (startswith operator)'}, {'name': 'state__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by state (in operator) — comma-separated values'}, {'name': 'zipcode', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by zipcode'}, {'name': 'zipcode__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by zipcode (contains operator)'}, {'name': 'zipcode__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by zipcode (startswith operator)'}, {'name': 'zipcode__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by zipcode (in operator) — comma-separated values'}, {'name': 'floor', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by floor'}, {'name': 'floor__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by floor (contains operator)'}, {'name': 'floor__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by floor (startswith operator)'}, {'name': 'floor__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by floor (in operator) — comma-separated values'}, {'name': 'suite', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by suite'}, {'name': 'suite__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by suite (contains operator)'}, {'name': 'suite__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by suite (startswith operator)'}, {'name': 'suite__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by suite (in operator) — comma-separated values'}, {'name': 'latitude', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by latitude'}, {'name': 'latitude__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by latitude (lt operator)'}, {'name': 'latitude__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by latitude (gt operator)'}, {'name': 'latitude__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by latitude (lte operator)'}, {'name': 'latitude__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by latitude (gte operator)'}, {'name': 'latitude__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by latitude (in operator) — comma-separated values'}, {'name': 'longitude', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by longitude'}, {'name': 'longitude__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by longitude (lt operator)'}, {'name': 'longitude__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by longitude (gt operator)'}, {'name': 'longitude__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by longitude (lte operator)'}, {'name': 'longitude__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by longitude (gte operator)'}, {'name': 'longitude__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by longitude (in operator) — comma-separated values'}], 'responses': {'200': {'description': 'List of organizations.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/OrganizationListResponse'}}}}, '400': {'description': 'Invalid filter parameter.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/org/{id}': {'get': {'operationId': 'get_org', 'summary': 'Get Organization by ID', 'description': 'Returns a single organization by its primary key.', 'tags': ['Organization'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Organization primary key.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}], 'responses': {'200': {'description': 'The organization.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/OrganizationDetailResponse'}}}}, '404': {'description': 'Organization not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/org/{id}/campuses': {'get': {'operationId': 'list_org_campuses', 'summary': 'List Campuss for Organization', 'description': 'Returns campus records where org_id matches {id}.', 'tags': ['Organization'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Organization primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of campus records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/OrganizationListResponse'}}}}, '404': {'description': 'Organization not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/org/{id}/facilities': {'get': {'operationId': 'list_org_facilities', 'summary': 'List Facilitys for Organization', 'description': 'Returns facility records where org_id matches {id}.', 'tags': ['Organization'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Organization primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of facility records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/OrganizationListResponse'}}}}, '404': {'description': 'Organization not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/org/{id}/networks': {'get': {'operationId': 'list_org_networks', 'summary': 'List Networks for Organization', 'description': 'Returns network records where org_id matches {id}.', 'tags': ['Organization'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Organization primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of network records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/OrganizationListResponse'}}}}, '404': {'description': 'Organization not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/org/{id}/exchanges': {'get': {'operationId': 'list_org_exchanges', 'summary': 'List Exchanges for Organization', 'description': 'Returns exchange records where org_id matches {id}.', 'tags': ['Organization'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Organization primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of exchange records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/OrganizationListResponse'}}}}, '404': {'description': 'Organization not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/org/{id}/carriers': {'get': {'operationId': 'list_org_carriers', 'summary': 'List Carriers for Organization', 'description': 'Returns carrier records where org_id matches {id}.', 'tags': ['Organization'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Organization primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of carrier records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/OrganizationListResponse'}}}}, '404': {'description': 'Organization not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/campus': {'get': {'operationId': 'list_campus', 'summary': 'List Campuses', 'description': 'Returns a list of campuses matching the given filters.', 'tags': ['Campus'], 'parameters': [{'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'since', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Unix epoch. Only return records updated since this time.'}, {'name': 'sort', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Field name to sort by. Prefix with - for descending.'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}, {'name': 'name', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name'}, {'name': 'name__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (contains operator)'}, {'name': 'name__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (startswith operator)'}, {'name': 'name__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (in operator) — comma-separated values'}, {'name': 'name_long', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long'}, {'name': 'name_long__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (contains operator)'}, {'name': 'name_long__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (startswith operator)'}, {'name': 'name_long__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (in operator) — comma-separated values'}, {'name': 'aka', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka'}, {'name': 'aka__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (contains operator)'}, {'name': 'aka__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (startswith operator)'}, {'name': 'aka__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (in operator) — comma-separated values'}, {'name': 'website', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website'}, {'name': 'website__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (contains operator)'}, {'name': 'website__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (startswith operator)'}, {'name': 'website__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (in operator) — comma-separated values'}, {'name': 'notes', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes'}, {'name': 'notes__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (contains operator)'}, {'name': 'notes__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (startswith operator)'}, {'name': 'notes__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (in operator) — comma-separated values'}, {'name': 'org_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id'}, {'name': 'org_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (lt operator)'}, {'name': 'org_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (gt operator)'}, {'name': 'org_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (lte operator)'}, {'name': 'org_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (gte operator)'}, {'name': 'org_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by org_id (in operator) — comma-separated values'}], 'responses': {'200': {'description': 'List of campuses.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/CampusListResponse'}}}}, '400': {'description': 'Invalid filter parameter.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/campus/{id}': {'get': {'operationId': 'get_campus', 'summary': 'Get Campus by ID', 'description': 'Returns a single campus by its primary key.', 'tags': ['Campus'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Campus primary key.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}], 'responses': {'200': {'description': 'The campus.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/CampusDetailResponse'}}}}, '404': {'description': 'Campus not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/campus/{id}/organization': {'get': {'operationId': 'get_campus_organization', 'summary': 'Get Organization for Campus', 'description': 'Returns the organization associated with campus {id} via the org_id foreign key.', 'tags': ['Campus'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Campus primary key.'}], 'responses': {'200': {'description': 'The associated organization.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/CampusDetailResponse'}}}}, '404': {'description': 'Campus not found or no organization associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/campus/{id}/facilities': {'get': {'operationId': 'list_campus_facilities', 'summary': 'List Facilitys for Campus', 'description': 'Returns facility records where campus_id matches {id}.', 'tags': ['Campus'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Campus primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of facility records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/CampusListResponse'}}}}, '404': {'description': 'Campus not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/fac': {'get': {'operationId': 'list_fac', 'summary': 'List Facilities', 'description': 'Returns a list of facilities matching the given filters.', 'tags': ['Facility'], 'parameters': [{'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'since', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Unix epoch. Only return records updated since this time.'}, {'name': 'sort', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Field name to sort by. Prefix with - for descending.'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}, {'name': 'name', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name'}, {'name': 'name__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (contains operator)'}, {'name': 'name__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (startswith operator)'}, {'name': 'name__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (in operator) — comma-separated values'}, {'name': 'website', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website'}, {'name': 'website__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (contains operator)'}, {'name': 'website__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (startswith operator)'}, {'name': 'website__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (in operator) — comma-separated values'}, {'name': 'aka', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka'}, {'name': 'aka__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (contains operator)'}, {'name': 'aka__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (startswith operator)'}, {'name': 'aka__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (in operator) — comma-separated values'}, {'name': 'name_long', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long'}, {'name': 'name_long__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (contains operator)'}, {'name': 'name_long__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (startswith operator)'}, {'name': 'name_long__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (in operator) — comma-separated values'}, {'name': 'clli', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by clli'}, {'name': 'clli__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by clli (contains operator)'}, {'name': 'clli__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by clli (startswith operator)'}, {'name': 'clli__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by clli (in operator) — comma-separated values'}, {'name': 'rencode', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by rencode'}, {'name': 'rencode__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by rencode (contains operator)'}, {'name': 'rencode__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by rencode (startswith operator)'}, {'name': 'rencode__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by rencode (in operator) — comma-separated values'}, {'name': 'npanxx', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by npanxx'}, {'name': 'npanxx__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by npanxx (contains operator)'}, {'name': 'npanxx__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by npanxx (startswith operator)'}, {'name': 'npanxx__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by npanxx (in operator) — comma-separated values'}, {'name': 'tech_email', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_email'}, {'name': 'tech_email__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_email (contains operator)'}, {'name': 'tech_email__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_email (startswith operator)'}, {'name': 'tech_email__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_email (in operator) — comma-separated values'}, {'name': 'tech_phone', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_phone'}, {'name': 'tech_phone__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_phone (contains operator)'}, {'name': 'tech_phone__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_phone (startswith operator)'}, {'name': 'tech_phone__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_phone (in operator) — comma-separated values'}, {'name': 'sales_email', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_email'}, {'name': 'sales_email__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_email (contains operator)'}, {'name': 'sales_email__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_email (startswith operator)'}, {'name': 'sales_email__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_email (in operator) — comma-separated values'}, {'name': 'sales_phone', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_phone'}, {'name': 'sales_phone__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_phone (contains operator)'}, {'name': 'sales_phone__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_phone (startswith operator)'}, {'name': 'sales_phone__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_phone (in operator) — comma-separated values'}, {'name': 'property', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by property'}, {'name': 'property__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by property (contains operator)'}, {'name': 'property__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by property (startswith operator)'}, {'name': 'property__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by property (in operator) — comma-separated values'}, {'name': 'diverse_serving_substations', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by diverse_serving_substations'}, {'name': 'available_voltage_services', 'in': 'query', 'required': False, 'schema': {}, 'description': 'Filter by available_voltage_services'}, {'name': 'notes', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes'}, {'name': 'notes__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (contains operator)'}, {'name': 'notes__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (startswith operator)'}, {'name': 'notes__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (in operator) — comma-separated values'}, {'name': 'region_continent', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by region_continent'}, {'name': 'region_continent__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by region_continent (contains operator)'}, {'name': 'region_continent__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by region_continent (startswith operator)'}, {'name': 'region_continent__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by region_continent (in operator) — comma-separated values'}, {'name': 'status_dashboard', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by status_dashboard'}, {'name': 'status_dashboard__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by status_dashboard (contains operator)'}, {'name': 'status_dashboard__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by status_dashboard (startswith operator)'}, {'name': 'status_dashboard__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by status_dashboard (in operator) — comma-separated values'}, {'name': 'org_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id'}, {'name': 'org_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (lt operator)'}, {'name': 'org_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (gt operator)'}, {'name': 'org_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (lte operator)'}, {'name': 'org_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (gte operator)'}, {'name': 'org_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by org_id (in operator) — comma-separated values'}, {'name': 'campus_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by campus_id'}, {'name': 'campus_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by campus_id (lt operator)'}, {'name': 'campus_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by campus_id (gt operator)'}, {'name': 'campus_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by campus_id (lte operator)'}, {'name': 'campus_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by campus_id (gte operator)'}, {'name': 'campus_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by campus_id (in operator) — comma-separated values'}, {'name': 'net_count', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_count'}, {'name': 'net_count__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_count (lt operator)'}, {'name': 'net_count__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_count (gt operator)'}, {'name': 'net_count__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_count (lte operator)'}, {'name': 'net_count__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_count (gte operator)'}, {'name': 'net_count__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by net_count (in operator) — comma-separated values'}, {'name': 'ix_count', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_count'}, {'name': 'ix_count__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_count (lt operator)'}, {'name': 'ix_count__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_count (gt operator)'}, {'name': 'ix_count__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_count (lte operator)'}, {'name': 'ix_count__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_count (gte operator)'}, {'name': 'ix_count__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ix_count (in operator) — comma-separated values'}, {'name': 'carrier_count', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by carrier_count'}, {'name': 'carrier_count__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by carrier_count (lt operator)'}, {'name': 'carrier_count__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by carrier_count (gt operator)'}, {'name': 'carrier_count__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by carrier_count (lte operator)'}, {'name': 'carrier_count__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by carrier_count (gte operator)'}, {'name': 'carrier_count__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by carrier_count (in operator) — comma-separated values'}, {'name': 'address1', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address1'}, {'name': 'address1__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address1 (contains operator)'}, {'name': 'address1__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address1 (startswith operator)'}, {'name': 'address1__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address1 (in operator) — comma-separated values'}, {'name': 'address2', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address2'}, {'name': 'address2__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address2 (contains operator)'}, {'name': 'address2__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address2 (startswith operator)'}, {'name': 'address2__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by address2 (in operator) — comma-separated values'}, {'name': 'city', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city'}, {'name': 'city__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city (contains operator)'}, {'name': 'city__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city (startswith operator)'}, {'name': 'city__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city (in operator) — comma-separated values'}, {'name': 'country', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country'}, {'name': 'country__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country (contains operator)'}, {'name': 'country__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country (startswith operator)'}, {'name': 'country__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country (in operator) — comma-separated values'}, {'name': 'state', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by state'}, {'name': 'state__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by state (contains operator)'}, {'name': 'state__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by state (startswith operator)'}, {'name': 'state__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by state (in operator) — comma-separated values'}, {'name': 'zipcode', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by zipcode'}, {'name': 'zipcode__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by zipcode (contains operator)'}, {'name': 'zipcode__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by zipcode (startswith operator)'}, {'name': 'zipcode__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by zipcode (in operator) — comma-separated values'}, {'name': 'floor', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by floor'}, {'name': 'floor__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by floor (contains operator)'}, {'name': 'floor__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by floor (startswith operator)'}, {'name': 'floor__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by floor (in operator) — comma-separated values'}, {'name': 'suite', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by suite'}, {'name': 'suite__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by suite (contains operator)'}, {'name': 'suite__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by suite (startswith operator)'}, {'name': 'suite__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by suite (in operator) — comma-separated values'}, {'name': 'latitude', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by latitude'}, {'name': 'latitude__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by latitude (lt operator)'}, {'name': 'latitude__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by latitude (gt operator)'}, {'name': 'latitude__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by latitude (lte operator)'}, {'name': 'latitude__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by latitude (gte operator)'}, {'name': 'latitude__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by latitude (in operator) — comma-separated values'}, {'name': 'longitude', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by longitude'}, {'name': 'longitude__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by longitude (lt operator)'}, {'name': 'longitude__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by longitude (gt operator)'}, {'name': 'longitude__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by longitude (lte operator)'}, {'name': 'longitude__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by longitude (gte operator)'}, {'name': 'longitude__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by longitude (in operator) — comma-separated values'}], 'responses': {'200': {'description': 'List of facilities.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/FacilityListResponse'}}}}, '400': {'description': 'Invalid filter parameter.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/fac/{id}': {'get': {'operationId': 'get_fac', 'summary': 'Get Facility by ID', 'description': 'Returns a single facility by its primary key.', 'tags': ['Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Facility primary key.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}], 'responses': {'200': {'description': 'The facility.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/FacilityDetailResponse'}}}}, '404': {'description': 'Facility not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/fac/{id}/organization': {'get': {'operationId': 'get_fac_organization', 'summary': 'Get Organization for Facility', 'description': 'Returns the organization associated with facility {id} via the org_id foreign key.', 'tags': ['Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Facility primary key.'}], 'responses': {'200': {'description': 'The associated organization.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/FacilityDetailResponse'}}}}, '404': {'description': 'Facility not found or no organization associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/fac/{id}/campuses': {'get': {'operationId': 'get_fac_campuses', 'summary': 'Get Campus for Facility', 'description': 'Returns the campus associated with facility {id} via the campus_id foreign key.', 'tags': ['Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Facility primary key.'}], 'responses': {'200': {'description': 'The associated campus.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/FacilityDetailResponse'}}}}, '404': {'description': 'Facility not found or no campus associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/fac/{id}/carrier-facilities': {'get': {'operationId': 'list_fac_carrier_facilities', 'summary': 'List Carrier Facilitys for Facility', 'description': 'Returns carrier facility records where fac_id matches {id}.', 'tags': ['Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Facility primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of carrier facility records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/FacilityListResponse'}}}}, '404': {'description': 'Facility not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/fac/{id}/exchange-facilities': {'get': {'operationId': 'list_fac_exchange_facilities', 'summary': 'List Exchange Facilitys for Facility', 'description': 'Returns exchange facility records where fac_id matches {id}.', 'tags': ['Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Facility primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of exchange facility records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/FacilityListResponse'}}}}, '404': {'description': 'Facility not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/fac/{id}/network-facilities': {'get': {'operationId': 'list_fac_network_facilities', 'summary': 'List Network Facilitys for Facility', 'description': 'Returns network facility records where fac_id matches {id}.', 'tags': ['Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Facility primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of network facility records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/FacilityListResponse'}}}}, '404': {'description': 'Facility not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/fac/{id}/network-exchange-lans': {'get': {'operationId': 'list_fac_network_exchange_lans', 'summary': 'List Network Exchange LANs for Facility', 'description': 'Returns network exchange lan records where net_side_id matches {id}.', 'tags': ['Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Facility primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of network exchange lan records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/FacilityListResponse'}}}}, '404': {'description': 'Facility not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/net': {'get': {'operationId': 'list_net', 'summary': 'List Networks', 'description': 'Returns a list of networks matching the given filters.', 'tags': ['Network'], 'parameters': [{'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'since', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Unix epoch. Only return records updated since this time.'}, {'name': 'sort', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Field name to sort by. Prefix with - for descending.'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}, {'name': 'asn', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by asn'}, {'name': 'asn__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by asn (lt operator)'}, {'name': 'asn__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by asn (gt operator)'}, {'name': 'asn__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by asn (lte operator)'}, {'name': 'asn__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by asn (gte operator)'}, {'name': 'asn__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by asn (in operator) — comma-separated values'}, {'name': 'name', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name'}, {'name': 'name__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (contains operator)'}, {'name': 'name__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (startswith operator)'}, {'name': 'name__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (in operator) — comma-separated values'}, {'name': 'aka', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka'}, {'name': 'aka__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (contains operator)'}, {'name': 'aka__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (startswith operator)'}, {'name': 'aka__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (in operator) — comma-separated values'}, {'name': 'name_long', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long'}, {'name': 'name_long__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (contains operator)'}, {'name': 'name_long__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (startswith operator)'}, {'name': 'name_long__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (in operator) — comma-separated values'}, {'name': 'irr_as_set', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by irr_as_set'}, {'name': 'irr_as_set__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by irr_as_set (contains operator)'}, {'name': 'irr_as_set__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by irr_as_set (startswith operator)'}, {'name': 'irr_as_set__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by irr_as_set (in operator) — comma-separated values'}, {'name': 'website', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website'}, {'name': 'website__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (contains operator)'}, {'name': 'website__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (startswith operator)'}, {'name': 'website__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (in operator) — comma-separated values'}, {'name': 'looking_glass', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by looking_glass'}, {'name': 'looking_glass__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by looking_glass (contains operator)'}, {'name': 'looking_glass__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by looking_glass (startswith operator)'}, {'name': 'looking_glass__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by looking_glass (in operator) — comma-separated values'}, {'name': 'route_server', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by route_server'}, {'name': 'route_server__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by route_server (contains operator)'}, {'name': 'route_server__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by route_server (startswith operator)'}, {'name': 'route_server__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by route_server (in operator) — comma-separated values'}, {'name': 'notes', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes'}, {'name': 'notes__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (contains operator)'}, {'name': 'notes__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (startswith operator)'}, {'name': 'notes__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (in operator) — comma-separated values'}, {'name': 'notes_private', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes_private'}, {'name': 'notes_private__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes_private (contains operator)'}, {'name': 'notes_private__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes_private (startswith operator)'}, {'name': 'notes_private__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes_private (in operator) — comma-separated values'}, {'name': 'info_traffic', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by info_traffic'}, {'name': 'info_traffic__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by info_traffic (contains operator)'}, {'name': 'info_traffic__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by info_traffic (startswith operator)'}, {'name': 'info_traffic__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by info_traffic (in operator) — comma-separated values'}, {'name': 'info_ratio', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by info_ratio'}, {'name': 'info_ratio__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by info_ratio (contains operator)'}, {'name': 'info_ratio__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by info_ratio (startswith operator)'}, {'name': 'info_ratio__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by info_ratio (in operator) — comma-separated values'}, {'name': 'info_scope', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by info_scope'}, {'name': 'info_scope__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by info_scope (contains operator)'}, {'name': 'info_scope__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by info_scope (startswith operator)'}, {'name': 'info_scope__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by info_scope (in operator) — comma-separated values'}, {'name': 'info_types', 'in': 'query', 'required': False, 'schema': {}, 'description': 'Filter by info_types'}, {'name': 'info_prefixes4', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by info_prefixes4'}, {'name': 'info_prefixes4__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by info_prefixes4 (lt operator)'}, {'name': 'info_prefixes4__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by info_prefixes4 (gt operator)'}, {'name': 'info_prefixes4__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by info_prefixes4 (lte operator)'}, {'name': 'info_prefixes4__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by info_prefixes4 (gte operator)'}, {'name': 'info_prefixes4__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by info_prefixes4 (in operator) — comma-separated values'}, {'name': 'info_prefixes6', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by info_prefixes6'}, {'name': 'info_prefixes6__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by info_prefixes6 (lt operator)'}, {'name': 'info_prefixes6__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by info_prefixes6 (gt operator)'}, {'name': 'info_prefixes6__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by info_prefixes6 (lte operator)'}, {'name': 'info_prefixes6__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by info_prefixes6 (gte operator)'}, {'name': 'info_prefixes6__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by info_prefixes6 (in operator) — comma-separated values'}, {'name': 'info_unicast', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by info_unicast'}, {'name': 'info_multicast', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by info_multicast'}, {'name': 'info_ipv6', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by info_ipv6'}, {'name': 'info_never_via_route_servers', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by info_never_via_route_servers'}, {'name': 'policy_url', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_url'}, {'name': 'policy_url__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_url (contains operator)'}, {'name': 'policy_url__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_url (startswith operator)'}, {'name': 'policy_url__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_url (in operator) — comma-separated values'}, {'name': 'policy_general', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_general'}, {'name': 'policy_general__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_general (contains operator)'}, {'name': 'policy_general__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_general (startswith operator)'}, {'name': 'policy_general__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_general (in operator) — comma-separated values'}, {'name': 'policy_locations', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_locations'}, {'name': 'policy_locations__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_locations (contains operator)'}, {'name': 'policy_locations__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_locations (startswith operator)'}, {'name': 'policy_locations__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_locations (in operator) — comma-separated values'}, {'name': 'policy_ratio', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by policy_ratio'}, {'name': 'policy_contracts', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_contracts'}, {'name': 'policy_contracts__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_contracts (contains operator)'}, {'name': 'policy_contracts__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_contracts (startswith operator)'}, {'name': 'policy_contracts__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_contracts (in operator) — comma-separated values'}, {'name': 'status_dashboard', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by status_dashboard'}, {'name': 'status_dashboard__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by status_dashboard (contains operator)'}, {'name': 'status_dashboard__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by status_dashboard (startswith operator)'}, {'name': 'status_dashboard__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by status_dashboard (in operator) — comma-separated values'}, {'name': 'rir_status', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by rir_status'}, {'name': 'rir_status__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by rir_status (contains operator)'}, {'name': 'rir_status__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by rir_status (startswith operator)'}, {'name': 'rir_status__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by rir_status (in operator) — comma-separated values'}, {'name': 'rir_status_updated', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by rir_status_updated'}, {'name': 'rir_status_updated__lt', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by rir_status_updated (lt operator)'}, {'name': 'rir_status_updated__gt', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by rir_status_updated (gt operator)'}, {'name': 'rir_status_updated__lte', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by rir_status_updated (lte operator)'}, {'name': 'rir_status_updated__gte', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by rir_status_updated (gte operator)'}, {'name': 'org_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id'}, {'name': 'org_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (lt operator)'}, {'name': 'org_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (gt operator)'}, {'name': 'org_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (lte operator)'}, {'name': 'org_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (gte operator)'}, {'name': 'org_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by org_id (in operator) — comma-separated values'}, {'name': 'ix_count', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_count'}, {'name': 'ix_count__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_count (lt operator)'}, {'name': 'ix_count__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_count (gt operator)'}, {'name': 'ix_count__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_count (lte operator)'}, {'name': 'ix_count__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_count (gte operator)'}, {'name': 'ix_count__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ix_count (in operator) — comma-separated values'}, {'name': 'fac_count', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_count'}, {'name': 'fac_count__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_count (lt operator)'}, {'name': 'fac_count__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_count (gt operator)'}, {'name': 'fac_count__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_count (lte operator)'}, {'name': 'fac_count__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_count (gte operator)'}, {'name': 'fac_count__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by fac_count (in operator) — comma-separated values'}, {'name': 'netixlan_updated', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by netixlan_updated'}, {'name': 'netixlan_updated__lt', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by netixlan_updated (lt operator)'}, {'name': 'netixlan_updated__gt', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by netixlan_updated (gt operator)'}, {'name': 'netixlan_updated__lte', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by netixlan_updated (lte operator)'}, {'name': 'netixlan_updated__gte', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by netixlan_updated (gte operator)'}, {'name': 'netfac_updated', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by netfac_updated'}, {'name': 'netfac_updated__lt', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by netfac_updated (lt operator)'}, {'name': 'netfac_updated__gt', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by netfac_updated (gt operator)'}, {'name': 'netfac_updated__lte', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by netfac_updated (lte operator)'}, {'name': 'netfac_updated__gte', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by netfac_updated (gte operator)'}, {'name': 'poc_updated', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by poc_updated'}, {'name': 'poc_updated__lt', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by poc_updated (lt operator)'}, {'name': 'poc_updated__gt', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by poc_updated (gt operator)'}, {'name': 'poc_updated__lte', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by poc_updated (lte operator)'}, {'name': 'poc_updated__gte', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by poc_updated (gte operator)'}, {'name': 'allow_ixp_update', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by allow_ixp_update'}], 'responses': {'200': {'description': 'List of networks.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkListResponse'}}}}, '400': {'description': 'Invalid filter parameter.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/net/{id}': {'get': {'operationId': 'get_net', 'summary': 'Get Network by ID', 'description': 'Returns a single network by its primary key.', 'tags': ['Network'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Network primary key.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}], 'responses': {'200': {'description': 'The network.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkDetailResponse'}}}}, '404': {'description': 'Network not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/net/{id}/organization': {'get': {'operationId': 'get_net_organization', 'summary': 'Get Organization for Network', 'description': 'Returns the organization associated with network {id} via the org_id foreign key.', 'tags': ['Network'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Network primary key.'}], 'responses': {'200': {'description': 'The associated organization.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkDetailResponse'}}}}, '404': {'description': 'Network not found or no organization associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/net/{id}/contacts': {'get': {'operationId': 'list_net_contacts', 'summary': 'List Point of Contacts for Network', 'description': 'Returns point of contact records where net_id matches {id}.', 'tags': ['Network'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Network primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of point of contact records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkListResponse'}}}}, '404': {'description': 'Network not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/net/{id}/network-facilities': {'get': {'operationId': 'list_net_network_facilities', 'summary': 'List Network Facilitys for Network', 'description': 'Returns network facility records where net_id matches {id}.', 'tags': ['Network'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Network primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of network facility records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkListResponse'}}}}, '404': {'description': 'Network not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/net/{id}/network-exchange-lans': {'get': {'operationId': 'list_net_network_exchange_lans', 'summary': 'List Network Exchange LANs for Network', 'description': 'Returns network exchange lan records where net_id matches {id}.', 'tags': ['Network'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Network primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of network exchange lan records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkListResponse'}}}}, '404': {'description': 'Network not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ix': {'get': {'operationId': 'list_ix', 'summary': 'List Exchanges', 'description': 'Returns a list of exchanges matching the given filters.', 'tags': ['Exchange'], 'parameters': [{'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'since', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Unix epoch. Only return records updated since this time.'}, {'name': 'sort', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Field name to sort by. Prefix with - for descending.'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}, {'name': 'name', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name'}, {'name': 'name__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (contains operator)'}, {'name': 'name__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (startswith operator)'}, {'name': 'name__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (in operator) — comma-separated values'}, {'name': 'aka', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka'}, {'name': 'aka__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (contains operator)'}, {'name': 'aka__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (startswith operator)'}, {'name': 'aka__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (in operator) — comma-separated values'}, {'name': 'name_long', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long'}, {'name': 'name_long__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (contains operator)'}, {'name': 'name_long__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (startswith operator)'}, {'name': 'name_long__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (in operator) — comma-separated values'}, {'name': 'city', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city'}, {'name': 'city__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city (contains operator)'}, {'name': 'city__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city (startswith operator)'}, {'name': 'city__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city (in operator) — comma-separated values'}, {'name': 'country', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country'}, {'name': 'country__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country (contains operator)'}, {'name': 'country__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country (startswith operator)'}, {'name': 'country__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country (in operator) — comma-separated values'}, {'name': 'notes', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes'}, {'name': 'notes__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (contains operator)'}, {'name': 'notes__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (startswith operator)'}, {'name': 'notes__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (in operator) — comma-separated values'}, {'name': 'region_continent', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by region_continent'}, {'name': 'region_continent__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by region_continent (contains operator)'}, {'name': 'region_continent__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by region_continent (startswith operator)'}, {'name': 'region_continent__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by region_continent (in operator) — comma-separated values'}, {'name': 'media', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by media'}, {'name': 'media__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by media (contains operator)'}, {'name': 'media__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by media (startswith operator)'}, {'name': 'media__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by media (in operator) — comma-separated values'}, {'name': 'proto_unicast', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by proto_unicast'}, {'name': 'proto_multicast', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by proto_multicast'}, {'name': 'proto_ipv6', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by proto_ipv6'}, {'name': 'website', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website'}, {'name': 'website__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (contains operator)'}, {'name': 'website__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (startswith operator)'}, {'name': 'website__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (in operator) — comma-separated values'}, {'name': 'url_stats', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by url_stats'}, {'name': 'url_stats__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by url_stats (contains operator)'}, {'name': 'url_stats__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by url_stats (startswith operator)'}, {'name': 'url_stats__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by url_stats (in operator) — comma-separated values'}, {'name': 'tech_email', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_email'}, {'name': 'tech_email__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_email (contains operator)'}, {'name': 'tech_email__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_email (startswith operator)'}, {'name': 'tech_email__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_email (in operator) — comma-separated values'}, {'name': 'tech_phone', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_phone'}, {'name': 'tech_phone__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_phone (contains operator)'}, {'name': 'tech_phone__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_phone (startswith operator)'}, {'name': 'tech_phone__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by tech_phone (in operator) — comma-separated values'}, {'name': 'policy_email', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_email'}, {'name': 'policy_email__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_email (contains operator)'}, {'name': 'policy_email__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_email (startswith operator)'}, {'name': 'policy_email__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_email (in operator) — comma-separated values'}, {'name': 'policy_phone', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_phone'}, {'name': 'policy_phone__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_phone (contains operator)'}, {'name': 'policy_phone__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_phone (startswith operator)'}, {'name': 'policy_phone__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by policy_phone (in operator) — comma-separated values'}, {'name': 'sales_email', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_email'}, {'name': 'sales_email__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_email (contains operator)'}, {'name': 'sales_email__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_email (startswith operator)'}, {'name': 'sales_email__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_email (in operator) — comma-separated values'}, {'name': 'sales_phone', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_phone'}, {'name': 'sales_phone__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_phone (contains operator)'}, {'name': 'sales_phone__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_phone (startswith operator)'}, {'name': 'sales_phone__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by sales_phone (in operator) — comma-separated values'}, {'name': 'ixf_net_count', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixf_net_count'}, {'name': 'ixf_net_count__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixf_net_count (lt operator)'}, {'name': 'ixf_net_count__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixf_net_count (gt operator)'}, {'name': 'ixf_net_count__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixf_net_count (lte operator)'}, {'name': 'ixf_net_count__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixf_net_count (gte operator)'}, {'name': 'ixf_net_count__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixf_net_count (in operator) — comma-separated values'}, {'name': 'ixf_last_import', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by ixf_last_import'}, {'name': 'ixf_last_import__lt', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by ixf_last_import (lt operator)'}, {'name': 'ixf_last_import__gt', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by ixf_last_import (gt operator)'}, {'name': 'ixf_last_import__lte', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by ixf_last_import (lte operator)'}, {'name': 'ixf_last_import__gte', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by ixf_last_import (gte operator)'}, {'name': 'service_level', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by service_level'}, {'name': 'service_level__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by service_level (contains operator)'}, {'name': 'service_level__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by service_level (startswith operator)'}, {'name': 'service_level__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by service_level (in operator) — comma-separated values'}, {'name': 'terms', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by terms'}, {'name': 'terms__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by terms (contains operator)'}, {'name': 'terms__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by terms (startswith operator)'}, {'name': 'terms__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by terms (in operator) — comma-separated values'}, {'name': 'status_dashboard', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by status_dashboard'}, {'name': 'status_dashboard__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by status_dashboard (contains operator)'}, {'name': 'status_dashboard__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by status_dashboard (startswith operator)'}, {'name': 'status_dashboard__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by status_dashboard (in operator) — comma-separated values'}, {'name': 'org_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id'}, {'name': 'org_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (lt operator)'}, {'name': 'org_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (gt operator)'}, {'name': 'org_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (lte operator)'}, {'name': 'org_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (gte operator)'}, {'name': 'org_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by org_id (in operator) — comma-separated values'}, {'name': 'net_count', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_count'}, {'name': 'net_count__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_count (lt operator)'}, {'name': 'net_count__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_count (gt operator)'}, {'name': 'net_count__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_count (lte operator)'}, {'name': 'net_count__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_count (gte operator)'}, {'name': 'net_count__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by net_count (in operator) — comma-separated values'}, {'name': 'fac_count', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_count'}, {'name': 'fac_count__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_count (lt operator)'}, {'name': 'fac_count__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_count (gt operator)'}, {'name': 'fac_count__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_count (lte operator)'}, {'name': 'fac_count__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_count (gte operator)'}, {'name': 'fac_count__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by fac_count (in operator) — comma-separated values'}, {'name': 'ixf_import_request', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by ixf_import_request'}, {'name': 'ixf_import_request__lt', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by ixf_import_request (lt operator)'}, {'name': 'ixf_import_request__gt', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by ixf_import_request (gt operator)'}, {'name': 'ixf_import_request__lte', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by ixf_import_request (lte operator)'}, {'name': 'ixf_import_request__gte', 'in': 'query', 'required': False, 'schema': {'type': 'string', 'format': 'date-time'}, 'description': 'Filter by ixf_import_request (gte operator)'}, {'name': 'ixf_import_request_status', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixf_import_request_status'}, {'name': 'ixf_import_request_status__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixf_import_request_status (contains operator)'}, {'name': 'ixf_import_request_status__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixf_import_request_status (startswith operator)'}, {'name': 'ixf_import_request_status__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixf_import_request_status (in operator) — comma-separated values'}], 'responses': {'200': {'description': 'List of exchanges.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangeListResponse'}}}}, '400': {'description': 'Invalid filter parameter.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ix/{id}': {'get': {'operationId': 'get_ix', 'summary': 'Get Exchange by ID', 'description': 'Returns a single exchange by its primary key.', 'tags': ['Exchange'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Exchange primary key.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}], 'responses': {'200': {'description': 'The exchange.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangeDetailResponse'}}}}, '404': {'description': 'Exchange not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ix/{id}/organization': {'get': {'operationId': 'get_ix_organization', 'summary': 'Get Organization for Exchange', 'description': 'Returns the organization associated with exchange {id} via the org_id foreign key.', 'tags': ['Exchange'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Exchange primary key.'}], 'responses': {'200': {'description': 'The associated organization.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangeDetailResponse'}}}}, '404': {'description': 'Exchange not found or no organization associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ix/{id}/exchange-facilities': {'get': {'operationId': 'list_ix_exchange_facilities', 'summary': 'List Exchange Facilitys for Exchange', 'description': 'Returns exchange facility records where ix_id matches {id}.', 'tags': ['Exchange'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Exchange primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of exchange facility records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangeListResponse'}}}}, '404': {'description': 'Exchange not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ix/{id}/exchange-lans': {'get': {'operationId': 'list_ix_exchange_lans', 'summary': 'List Exchange LANs for Exchange', 'description': 'Returns exchange lan records where ix_id matches {id}.', 'tags': ['Exchange'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Exchange primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of exchange lan records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangeListResponse'}}}}, '404': {'description': 'Exchange not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/carrier': {'get': {'operationId': 'list_carrier', 'summary': 'List Carriers', 'description': 'Returns a list of carriers matching the given filters.', 'tags': ['Carrier'], 'parameters': [{'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'since', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Unix epoch. Only return records updated since this time.'}, {'name': 'sort', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Field name to sort by. Prefix with - for descending.'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}, {'name': 'name', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name'}, {'name': 'name__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (contains operator)'}, {'name': 'name__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (startswith operator)'}, {'name': 'name__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (in operator) — comma-separated values'}, {'name': 'aka', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka'}, {'name': 'aka__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (contains operator)'}, {'name': 'aka__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (startswith operator)'}, {'name': 'aka__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by aka (in operator) — comma-separated values'}, {'name': 'name_long', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long'}, {'name': 'name_long__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (contains operator)'}, {'name': 'name_long__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (startswith operator)'}, {'name': 'name_long__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name_long (in operator) — comma-separated values'}, {'name': 'website', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website'}, {'name': 'website__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (contains operator)'}, {'name': 'website__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (startswith operator)'}, {'name': 'website__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by website (in operator) — comma-separated values'}, {'name': 'notes', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes'}, {'name': 'notes__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (contains operator)'}, {'name': 'notes__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (startswith operator)'}, {'name': 'notes__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (in operator) — comma-separated values'}, {'name': 'org_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id'}, {'name': 'org_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (lt operator)'}, {'name': 'org_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (gt operator)'}, {'name': 'org_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (lte operator)'}, {'name': 'org_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by org_id (gte operator)'}, {'name': 'org_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by org_id (in operator) — comma-separated values'}], 'responses': {'200': {'description': 'List of carriers.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/CarrierListResponse'}}}}, '400': {'description': 'Invalid filter parameter.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/carrier/{id}': {'get': {'operationId': 'get_carrier', 'summary': 'Get Carrier by ID', 'description': 'Returns a single carrier by its primary key.', 'tags': ['Carrier'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Carrier primary key.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}], 'responses': {'200': {'description': 'The carrier.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/CarrierDetailResponse'}}}}, '404': {'description': 'Carrier not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/carrier/{id}/organization': {'get': {'operationId': 'get_carrier_organization', 'summary': 'Get Organization for Carrier', 'description': 'Returns the organization associated with carrier {id} via the org_id foreign key.', 'tags': ['Carrier'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Carrier primary key.'}], 'responses': {'200': {'description': 'The associated organization.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/CarrierDetailResponse'}}}}, '404': {'description': 'Carrier not found or no organization associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/carrier/{id}/carrier-facilities': {'get': {'operationId': 'list_carrier_carrier_facilities', 'summary': 'List Carrier Facilitys for Carrier', 'description': 'Returns carrier facility records where carrier_id matches {id}.', 'tags': ['Carrier'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Carrier primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of carrier facility records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/CarrierListResponse'}}}}, '404': {'description': 'Carrier not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/carrierfac': {'get': {'operationId': 'list_carrierfac', 'summary': 'List Carrier Facilities', 'description': 'Returns a list of carrier facilities matching the given filters.', 'tags': ['Carrier Facility'], 'parameters': [{'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'since', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Unix epoch. Only return records updated since this time.'}, {'name': 'sort', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Field name to sort by. Prefix with - for descending.'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}, {'name': 'carrier_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by carrier_id'}, {'name': 'carrier_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by carrier_id (lt operator)'}, {'name': 'carrier_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by carrier_id (gt operator)'}, {'name': 'carrier_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by carrier_id (lte operator)'}, {'name': 'carrier_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by carrier_id (gte operator)'}, {'name': 'carrier_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by carrier_id (in operator) — comma-separated values'}, {'name': 'fac_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id'}, {'name': 'fac_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id (lt operator)'}, {'name': 'fac_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id (gt operator)'}, {'name': 'fac_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id (lte operator)'}, {'name': 'fac_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id (gte operator)'}, {'name': 'fac_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by fac_id (in operator) — comma-separated values'}], 'responses': {'200': {'description': 'List of carrier facilities.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/CarrierFacilityListResponse'}}}}, '400': {'description': 'Invalid filter parameter.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/carrierfac/{id}': {'get': {'operationId': 'get_carrierfac', 'summary': 'Get Carrier Facility by ID', 'description': 'Returns a single carrier facility by its primary key.', 'tags': ['Carrier Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Carrier Facility primary key.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}], 'responses': {'200': {'description': 'The carrier facility.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/CarrierFacilityDetailResponse'}}}}, '404': {'description': 'Carrier Facility not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/carrierfac/{id}/carriers': {'get': {'operationId': 'get_carrierfac_carriers', 'summary': 'Get Carrier for Carrier Facility', 'description': 'Returns the carrier associated with carrier facility {id} via the carrier_id foreign key.', 'tags': ['Carrier Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Carrier Facility primary key.'}], 'responses': {'200': {'description': 'The associated carrier.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/CarrierFacilityDetailResponse'}}}}, '404': {'description': 'Carrier Facility not found or no carrier associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/carrierfac/{id}/facilities': {'get': {'operationId': 'get_carrierfac_facilities', 'summary': 'Get Facility for Carrier Facility', 'description': 'Returns the facility associated with carrier facility {id} via the fac_id foreign key.', 'tags': ['Carrier Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Carrier Facility primary key.'}], 'responses': {'200': {'description': 'The associated facility.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/CarrierFacilityDetailResponse'}}}}, '404': {'description': 'Carrier Facility not found or no facility associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ixfac': {'get': {'operationId': 'list_ixfac', 'summary': 'List Exchange Facilities', 'description': 'Returns a list of exchange facilities matching the given filters.', 'tags': ['Exchange Facility'], 'parameters': [{'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'since', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Unix epoch. Only return records updated since this time.'}, {'name': 'sort', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Field name to sort by. Prefix with - for descending.'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}, {'name': 'ix_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_id'}, {'name': 'ix_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_id (lt operator)'}, {'name': 'ix_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_id (gt operator)'}, {'name': 'ix_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_id (lte operator)'}, {'name': 'ix_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_id (gte operator)'}, {'name': 'ix_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ix_id (in operator) — comma-separated values'}, {'name': 'fac_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id'}, {'name': 'fac_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id (lt operator)'}, {'name': 'fac_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id (gt operator)'}, {'name': 'fac_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id (lte operator)'}, {'name': 'fac_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id (gte operator)'}, {'name': 'fac_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by fac_id (in operator) — comma-separated values'}], 'responses': {'200': {'description': 'List of exchange facilities.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangeFacilityListResponse'}}}}, '400': {'description': 'Invalid filter parameter.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ixfac/{id}': {'get': {'operationId': 'get_ixfac', 'summary': 'Get Exchange Facility by ID', 'description': 'Returns a single exchange facility by its primary key.', 'tags': ['Exchange Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Exchange Facility primary key.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}], 'responses': {'200': {'description': 'The exchange facility.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangeFacilityDetailResponse'}}}}, '404': {'description': 'Exchange Facility not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ixfac/{id}/exchanges': {'get': {'operationId': 'get_ixfac_exchanges', 'summary': 'Get Exchange for Exchange Facility', 'description': 'Returns the exchange associated with exchange facility {id} via the ix_id foreign key.', 'tags': ['Exchange Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Exchange Facility primary key.'}], 'responses': {'200': {'description': 'The associated exchange.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangeFacilityDetailResponse'}}}}, '404': {'description': 'Exchange Facility not found or no exchange associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ixfac/{id}/facilities': {'get': {'operationId': 'get_ixfac_facilities', 'summary': 'Get Facility for Exchange Facility', 'description': 'Returns the facility associated with exchange facility {id} via the fac_id foreign key.', 'tags': ['Exchange Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Exchange Facility primary key.'}], 'responses': {'200': {'description': 'The associated facility.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangeFacilityDetailResponse'}}}}, '404': {'description': 'Exchange Facility not found or no facility associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ixlan': {'get': {'operationId': 'list_ixlan', 'summary': 'List Exchange LANs', 'description': 'Returns a list of exchange lans matching the given filters.', 'tags': ['Exchange LAN'], 'parameters': [{'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'since', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Unix epoch. Only return records updated since this time.'}, {'name': 'sort', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Field name to sort by. Prefix with - for descending.'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}, {'name': 'name', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name'}, {'name': 'name__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (contains operator)'}, {'name': 'name__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (startswith operator)'}, {'name': 'name__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (in operator) — comma-separated values'}, {'name': 'descr', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by descr'}, {'name': 'descr__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by descr (contains operator)'}, {'name': 'descr__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by descr (startswith operator)'}, {'name': 'descr__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by descr (in operator) — comma-separated values'}, {'name': 'mtu', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by mtu'}, {'name': 'mtu__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by mtu (lt operator)'}, {'name': 'mtu__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by mtu (gt operator)'}, {'name': 'mtu__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by mtu (lte operator)'}, {'name': 'mtu__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by mtu (gte operator)'}, {'name': 'mtu__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by mtu (in operator) — comma-separated values'}, {'name': 'vlan', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by vlan'}, {'name': 'vlan__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by vlan (lt operator)'}, {'name': 'vlan__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by vlan (gt operator)'}, {'name': 'vlan__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by vlan (lte operator)'}, {'name': 'vlan__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by vlan (gte operator)'}, {'name': 'vlan__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by vlan (in operator) — comma-separated values'}, {'name': 'dot1q_support', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by dot1q_support'}, {'name': 'rs_asn', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by rs_asn'}, {'name': 'rs_asn__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by rs_asn (lt operator)'}, {'name': 'rs_asn__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by rs_asn (gt operator)'}, {'name': 'rs_asn__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by rs_asn (lte operator)'}, {'name': 'rs_asn__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by rs_asn (gte operator)'}, {'name': 'rs_asn__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by rs_asn (in operator) — comma-separated values'}, {'name': 'arp_sponge', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by arp_sponge'}, {'name': 'arp_sponge__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by arp_sponge (contains operator)'}, {'name': 'arp_sponge__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by arp_sponge (startswith operator)'}, {'name': 'arp_sponge__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by arp_sponge (in operator) — comma-separated values'}, {'name': 'ixf_ixp_member_list_url', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixf_ixp_member_list_url'}, {'name': 'ixf_ixp_member_list_url__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixf_ixp_member_list_url (contains operator)'}, {'name': 'ixf_ixp_member_list_url__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixf_ixp_member_list_url (startswith operator)'}, {'name': 'ixf_ixp_member_list_url__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixf_ixp_member_list_url (in operator) — comma-separated values'}, {'name': 'ixf_ixp_member_list_url_visible', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixf_ixp_member_list_url_visible'}, {'name': 'ixf_ixp_member_list_url_visible__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixf_ixp_member_list_url_visible (contains operator)'}, {'name': 'ixf_ixp_member_list_url_visible__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixf_ixp_member_list_url_visible (startswith operator)'}, {'name': 'ixf_ixp_member_list_url_visible__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixf_ixp_member_list_url_visible (in operator) — comma-separated values'}, {'name': 'ix_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_id'}, {'name': 'ix_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_id (lt operator)'}, {'name': 'ix_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_id (gt operator)'}, {'name': 'ix_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_id (lte operator)'}, {'name': 'ix_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_id (gte operator)'}, {'name': 'ix_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ix_id (in operator) — comma-separated values'}, {'name': 'ixf_ixp_import_enabled', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by ixf_ixp_import_enabled'}], 'responses': {'200': {'description': 'List of exchange lans.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangeLANListResponse'}}}}, '400': {'description': 'Invalid filter parameter.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ixlan/{id}': {'get': {'operationId': 'get_ixlan', 'summary': 'Get Exchange LAN by ID', 'description': 'Returns a single exchange lan by its primary key.', 'tags': ['Exchange LAN'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Exchange LAN primary key.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}], 'responses': {'200': {'description': 'The exchange lan.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangeLANDetailResponse'}}}}, '404': {'description': 'Exchange LAN not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ixlan/{id}/exchanges': {'get': {'operationId': 'get_ixlan_exchanges', 'summary': 'Get Exchange for Exchange LAN', 'description': 'Returns the exchange associated with exchange lan {id} via the ix_id foreign key.', 'tags': ['Exchange LAN'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Exchange LAN primary key.'}], 'responses': {'200': {'description': 'The associated exchange.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangeLANDetailResponse'}}}}, '404': {'description': 'Exchange LAN not found or no exchange associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ixlan/{id}/exchange-prefixes': {'get': {'operationId': 'list_ixlan_exchange_prefixes', 'summary': 'List Exchange Prefixs for Exchange LAN', 'description': 'Returns exchange prefix records where ixlan_id matches {id}.', 'tags': ['Exchange LAN'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Exchange LAN primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of exchange prefix records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangeLANListResponse'}}}}, '404': {'description': 'Exchange LAN not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ixlan/{id}/network-exchange-lans': {'get': {'operationId': 'list_ixlan_network_exchange_lans', 'summary': 'List Network Exchange LANs for Exchange LAN', 'description': 'Returns network exchange lan records where ixlan_id matches {id}.', 'tags': ['Exchange LAN'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Exchange LAN primary key.'}, {'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}], 'responses': {'200': {'description': 'List of network exchange lan records.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangeLANListResponse'}}}}, '404': {'description': 'Exchange LAN not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ixpfx': {'get': {'operationId': 'list_ixpfx', 'summary': 'List Exchange Prefixes', 'description': 'Returns a list of exchange prefixes matching the given filters.', 'tags': ['Exchange Prefix'], 'parameters': [{'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'since', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Unix epoch. Only return records updated since this time.'}, {'name': 'sort', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Field name to sort by. Prefix with - for descending.'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}, {'name': 'notes', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes'}, {'name': 'notes__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (contains operator)'}, {'name': 'notes__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (startswith operator)'}, {'name': 'notes__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (in operator) — comma-separated values'}, {'name': 'protocol', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by protocol'}, {'name': 'protocol__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by protocol (contains operator)'}, {'name': 'protocol__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by protocol (startswith operator)'}, {'name': 'protocol__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by protocol (in operator) — comma-separated values'}, {'name': 'prefix', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by prefix'}, {'name': 'prefix__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by prefix (contains operator)'}, {'name': 'prefix__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by prefix (startswith operator)'}, {'name': 'prefix__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by prefix (in operator) — comma-separated values'}, {'name': 'in_dfz', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by in_dfz'}, {'name': 'ixlan_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixlan_id'}, {'name': 'ixlan_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixlan_id (lt operator)'}, {'name': 'ixlan_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixlan_id (gt operator)'}, {'name': 'ixlan_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixlan_id (lte operator)'}, {'name': 'ixlan_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixlan_id (gte operator)'}, {'name': 'ixlan_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixlan_id (in operator) — comma-separated values'}], 'responses': {'200': {'description': 'List of exchange prefixes.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangePrefixListResponse'}}}}, '400': {'description': 'Invalid filter parameter.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ixpfx/{id}': {'get': {'operationId': 'get_ixpfx', 'summary': 'Get Exchange Prefix by ID', 'description': 'Returns a single exchange prefix by its primary key.', 'tags': ['Exchange Prefix'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Exchange Prefix primary key.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}], 'responses': {'200': {'description': 'The exchange prefix.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangePrefixDetailResponse'}}}}, '404': {'description': 'Exchange Prefix not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/ixpfx/{id}/exchange-lans': {'get': {'operationId': 'get_ixpfx_exchange_lans', 'summary': 'Get Exchange LAN for Exchange Prefix', 'description': 'Returns the exchange lan associated with exchange prefix {id} via the ixlan_id foreign key.', 'tags': ['Exchange Prefix'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Exchange Prefix primary key.'}], 'responses': {'200': {'description': 'The associated exchange lan.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/ExchangePrefixDetailResponse'}}}}, '404': {'description': 'Exchange Prefix not found or no exchange lan associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/poc': {'get': {'operationId': 'list_poc', 'summary': 'List Points of Contact', 'description': 'Returns a list of points of contact matching the given filters.', 'tags': ['Point of Contact'], 'parameters': [{'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'since', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Unix epoch. Only return records updated since this time.'}, {'name': 'sort', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Field name to sort by. Prefix with - for descending.'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}, {'name': 'role', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by role'}, {'name': 'role__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by role (contains operator)'}, {'name': 'role__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by role (startswith operator)'}, {'name': 'role__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by role (in operator) — comma-separated values'}, {'name': 'visible', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by visible'}, {'name': 'visible__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by visible (contains operator)'}, {'name': 'visible__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by visible (startswith operator)'}, {'name': 'visible__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by visible (in operator) — comma-separated values'}, {'name': 'name', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name'}, {'name': 'name__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (contains operator)'}, {'name': 'name__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (startswith operator)'}, {'name': 'name__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (in operator) — comma-separated values'}, {'name': 'phone', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by phone'}, {'name': 'phone__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by phone (contains operator)'}, {'name': 'phone__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by phone (startswith operator)'}, {'name': 'phone__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by phone (in operator) — comma-separated values'}, {'name': 'email', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by email'}, {'name': 'email__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by email (contains operator)'}, {'name': 'email__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by email (startswith operator)'}, {'name': 'email__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by email (in operator) — comma-separated values'}, {'name': 'url', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by url'}, {'name': 'url__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by url (contains operator)'}, {'name': 'url__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by url (startswith operator)'}, {'name': 'url__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by url (in operator) — comma-separated values'}, {'name': 'net_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id'}, {'name': 'net_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id (lt operator)'}, {'name': 'net_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id (gt operator)'}, {'name': 'net_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id (lte operator)'}, {'name': 'net_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id (gte operator)'}, {'name': 'net_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by net_id (in operator) — comma-separated values'}], 'responses': {'200': {'description': 'List of points of contact.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/PointofContactListResponse'}}}}, '400': {'description': 'Invalid filter parameter.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/poc/{id}': {'get': {'operationId': 'get_poc', 'summary': 'Get Point of Contact by ID', 'description': 'Returns a single point of contact by its primary key.', 'tags': ['Point of Contact'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Point of Contact primary key.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}], 'responses': {'200': {'description': 'The point of contact.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/PointofContactDetailResponse'}}}}, '404': {'description': 'Point of Contact not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/poc/{id}/networks': {'get': {'operationId': 'get_poc_networks', 'summary': 'Get Network for Point of Contact', 'description': 'Returns the network associated with point of contact {id} via the net_id foreign key.', 'tags': ['Point of Contact'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Point of Contact primary key.'}], 'responses': {'200': {'description': 'The associated network.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/PointofContactDetailResponse'}}}}, '404': {'description': 'Point of Contact not found or no network associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/netfac': {'get': {'operationId': 'list_netfac', 'summary': 'List Network Facilities', 'description': 'Returns a list of network facilities matching the given filters.', 'tags': ['Network Facility'], 'parameters': [{'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'since', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Unix epoch. Only return records updated since this time.'}, {'name': 'sort', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Field name to sort by. Prefix with - for descending.'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}, {'name': 'avail_sonet', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by avail_sonet'}, {'name': 'avail_ethernet', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by avail_ethernet'}, {'name': 'avail_atm', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by avail_atm'}, {'name': 'net_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id'}, {'name': 'net_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id (lt operator)'}, {'name': 'net_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id (gt operator)'}, {'name': 'net_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id (lte operator)'}, {'name': 'net_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id (gte operator)'}, {'name': 'net_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by net_id (in operator) — comma-separated values'}, {'name': 'fac_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id'}, {'name': 'fac_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id (lt operator)'}, {'name': 'fac_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id (gt operator)'}, {'name': 'fac_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id (lte operator)'}, {'name': 'fac_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by fac_id (gte operator)'}, {'name': 'fac_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by fac_id (in operator) — comma-separated values'}, {'name': 'name', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name'}, {'name': 'name__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (contains operator)'}, {'name': 'name__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (startswith operator)'}, {'name': 'name__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (in operator) — comma-separated values'}, {'name': 'city', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city'}, {'name': 'city__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city (contains operator)'}, {'name': 'city__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city (startswith operator)'}, {'name': 'city__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by city (in operator) — comma-separated values'}, {'name': 'country', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country'}, {'name': 'country__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country (contains operator)'}, {'name': 'country__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country (startswith operator)'}, {'name': 'country__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by country (in operator) — comma-separated values'}], 'responses': {'200': {'description': 'List of network facilities.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkFacilityListResponse'}}}}, '400': {'description': 'Invalid filter parameter.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/netfac/{id}': {'get': {'operationId': 'get_netfac', 'summary': 'Get Network Facility by ID', 'description': 'Returns a single network facility by its primary key.', 'tags': ['Network Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Network Facility primary key.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}], 'responses': {'200': {'description': 'The network facility.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkFacilityDetailResponse'}}}}, '404': {'description': 'Network Facility not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/netfac/{id}/networks': {'get': {'operationId': 'get_netfac_networks', 'summary': 'Get Network for Network Facility', 'description': 'Returns the network associated with network facility {id} via the net_id foreign key.', 'tags': ['Network Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Network Facility primary key.'}], 'responses': {'200': {'description': 'The associated network.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkFacilityDetailResponse'}}}}, '404': {'description': 'Network Facility not found or no network associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/netfac/{id}/facilities': {'get': {'operationId': 'get_netfac_facilities', 'summary': 'Get Facility for Network Facility', 'description': 'Returns the facility associated with network facility {id} via the fac_id foreign key.', 'tags': ['Network Facility'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Network Facility primary key.'}], 'responses': {'200': {'description': 'The associated facility.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkFacilityDetailResponse'}}}}, '404': {'description': 'Network Facility not found or no facility associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/netixlan': {'get': {'operationId': 'list_netixlan', 'summary': 'List Network Exchange LANs', 'description': 'Returns a list of network exchange lans matching the given filters.', 'tags': ['Network Exchange LAN'], 'parameters': [{'name': 'limit', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 20, 'maximum': 250}, 'description': 'Maximum number of results to return (max 250).'}, {'name': 'skip', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Number of results to skip for pagination.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'since', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0}, 'description': 'Unix epoch. Only return records updated since this time.'}, {'name': 'sort', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Field name to sort by. Prefix with - for descending.'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}, {'name': 'asn', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by asn'}, {'name': 'asn__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by asn (lt operator)'}, {'name': 'asn__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by asn (gt operator)'}, {'name': 'asn__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by asn (lte operator)'}, {'name': 'asn__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by asn (gte operator)'}, {'name': 'asn__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by asn (in operator) — comma-separated values'}, {'name': 'ipaddr4', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ipaddr4'}, {'name': 'ipaddr4__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ipaddr4 (contains operator)'}, {'name': 'ipaddr4__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ipaddr4 (startswith operator)'}, {'name': 'ipaddr4__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ipaddr4 (in operator) — comma-separated values'}, {'name': 'ipaddr6', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ipaddr6'}, {'name': 'ipaddr6__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ipaddr6 (contains operator)'}, {'name': 'ipaddr6__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ipaddr6 (startswith operator)'}, {'name': 'ipaddr6__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ipaddr6 (in operator) — comma-separated values'}, {'name': 'is_rs_peer', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by is_rs_peer'}, {'name': 'bfd_support', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by bfd_support'}, {'name': 'notes', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes'}, {'name': 'notes__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (contains operator)'}, {'name': 'notes__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (startswith operator)'}, {'name': 'notes__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by notes (in operator) — comma-separated values'}, {'name': 'speed', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by speed'}, {'name': 'speed__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by speed (lt operator)'}, {'name': 'speed__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by speed (gt operator)'}, {'name': 'speed__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by speed (lte operator)'}, {'name': 'speed__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by speed (gte operator)'}, {'name': 'speed__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by speed (in operator) — comma-separated values'}, {'name': 'operational', 'in': 'query', 'required': False, 'schema': {'type': 'boolean'}, 'description': 'Filter by operational'}, {'name': 'net_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id'}, {'name': 'net_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id (lt operator)'}, {'name': 'net_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id (gt operator)'}, {'name': 'net_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id (lte operator)'}, {'name': 'net_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_id (gte operator)'}, {'name': 'net_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by net_id (in operator) — comma-separated values'}, {'name': 'ixlan_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixlan_id'}, {'name': 'ixlan_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixlan_id (lt operator)'}, {'name': 'ixlan_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixlan_id (gt operator)'}, {'name': 'ixlan_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixlan_id (lte operator)'}, {'name': 'ixlan_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ixlan_id (gte operator)'}, {'name': 'ixlan_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ixlan_id (in operator) — comma-separated values'}, {'name': 'net_side_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_side_id'}, {'name': 'net_side_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_side_id (lt operator)'}, {'name': 'net_side_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_side_id (gt operator)'}, {'name': 'net_side_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_side_id (lte operator)'}, {'name': 'net_side_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by net_side_id (gte operator)'}, {'name': 'net_side_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by net_side_id (in operator) — comma-separated values'}, {'name': 'ix_side_id', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_side_id'}, {'name': 'ix_side_id__lt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_side_id (lt operator)'}, {'name': 'ix_side_id__gt', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_side_id (gt operator)'}, {'name': 'ix_side_id__lte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_side_id (lte operator)'}, {'name': 'ix_side_id__gte', 'in': 'query', 'required': False, 'schema': {'type': 'integer'}, 'description': 'Filter by ix_side_id (gte operator)'}, {'name': 'ix_side_id__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by ix_side_id (in operator) — comma-separated values'}, {'name': 'name', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name'}, {'name': 'name__contains', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (contains operator)'}, {'name': 'name__startswith', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (startswith operator)'}, {'name': 'name__in', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Filter by name (in operator) — comma-separated values'}], 'responses': {'200': {'description': 'List of network exchange lans.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkExchangeLANListResponse'}}}}, '400': {'description': 'Invalid filter parameter.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/netixlan/{id}': {'get': {'operationId': 'get_netixlan', 'summary': 'Get Network Exchange LAN by ID', 'description': 'Returns a single network exchange lan by its primary key.', 'tags': ['Network Exchange LAN'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Network Exchange LAN primary key.'}, {'name': 'depth', 'in': 'query', 'required': False, 'schema': {'type': 'integer', 'default': 0, 'maximum': 3}, 'description': 'Expansion depth for related objects (0-3).'}, {'name': 'fields', 'in': 'query', 'required': False, 'schema': {'type': 'string'}, 'description': 'Comma-separated list of fields to include in the response.'}], 'responses': {'200': {'description': 'The network exchange lan.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkExchangeLANDetailResponse'}}}}, '404': {'description': 'Network Exchange LAN not found.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/netixlan/{id}/networks': {'get': {'operationId': 'get_netixlan_networks', 'summary': 'Get Network for Network Exchange LAN', 'description': 'Returns the network associated with network exchange lan {id} via the net_id foreign key.', 'tags': ['Network Exchange LAN'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Network Exchange LAN primary key.'}], 'responses': {'200': {'description': 'The associated network.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkExchangeLANDetailResponse'}}}}, '404': {'description': 'Network Exchange LAN not found or no network associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/netixlan/{id}/exchange-lans': {'get': {'operationId': 'get_netixlan_exchange_lans', 'summary': 'Get Exchange LAN for Network Exchange LAN', 'description': 'Returns the exchange lan associated with network exchange lan {id} via the ixlan_id foreign key.', 'tags': ['Network Exchange LAN'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Network Exchange LAN primary key.'}], 'responses': {'200': {'description': 'The associated exchange lan.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkExchangeLANDetailResponse'}}}}, '404': {'description': 'Network Exchange LAN not found or no exchange lan associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}, '/v1/netixlan/{id}/facilities': {'get': {'operationId': 'get_netixlan_facilities', 'summary': 'Get Facility for Network Exchange LAN', 'description': 'Returns the facility associated with network exchange lan {id} via the ix_side_id foreign key.', 'tags': ['Network Exchange LAN'], 'parameters': [{'name': 'id', 'in': 'path', 'required': True, 'schema': {'type': 'integer'}, 'description': 'Network Exchange LAN primary key.'}], 'responses': {'200': {'description': 'The associated facility.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/NetworkExchangeLANDetailResponse'}}}}, '404': {'description': 'Network Exchange LAN not found or no facility associated.', 'content': {'application/json': {'schema': {'$ref': '#/components/schemas/Error'}}}}}}}}
======================================================================
FAIL: test_parse_abstract_models (test_parse_django_models.TestParseDjangoModels.test_parse_abstract_models)
Test parsing of Django abstract base models using AST.
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/remco/src/pdbfe/scripts/tests/test_parse_django_models.py", line 31, in test_parse_abstract_models
self.assertIn("HandleableModel", abstract_models)
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: 'HandleableModel' not found in {}
----------------------------------------------------------------------
Ran 13 tests in 0.010s
FAILED (failures=4)