generated: '2026-08-27' method: generated source: openapi/pexafy-api-openapi.json, openapi/pexafy-api-v1-openapi.json description: Recommended x-agentic-access execution contracts, classified heuristically from the OpenAPI. A governance starting point for exposing this API to AI agents — review and bind audience per deployment. See research/curity/agentic-governance/. summary: operations: 37 by_action_class: connected: 27 acting: 10 by_consequence: read: 27 write: 10 human_in_the_loop_required: 0 operations: - path: /api/v1/search/photos method: get operationId: search_photos_api_v1_search_photos_get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/search/photos method: post operationId: search_photos_by_image_api_v1_search_photos_post x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /api/v1/photos/{photo_id} method: get operationId: get_photo_api_v1_photos__photo_id__get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/photos/{photo_id}/similar method: get operationId: photo_similar_api_v1_photos__photo_id__similar_get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/facets/colors method: get operationId: facet_colors_api_v1_facets_colors_get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/facets/sources method: get operationId: facet_sources_api_v1_facets_sources_get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/facets/orientations method: get operationId: facet_orientations_api_v1_facets_orientations_get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/facets/licenses method: get operationId: facet_licenses_api_v1_facets_licenses_get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/facets/photographers/suggest method: get operationId: suggest_photographers_api_v1_facets_photographers_suggest_get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/facets/photographers/{username} method: get operationId: get_photographer_api_v1_facets_photographers__username__get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/collections method: get operationId: list_collections_api_v1_collections_get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/collections method: post operationId: create_collection_api_v1_collections_post x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /api/v1/collections/{collection_id} method: get operationId: get_collection_api_v1_collections__collection_id__get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/collections/{collection_id} method: delete operationId: delete_collection_api_v1_collections__collection_id__delete x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /api/v1/collections/{collection_id}/photos method: post operationId: add_photo_to_collection_api_v1_collections__collection_id__photos_post x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /api/v1/collections/{collection_id}/photos/{photo_id} method: delete operationId: remove_photo_from_collection_api_v1_collections__collection_id__photos__photo_id__delete x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /api/v1/usage method: get operationId: get_usage_api_v1_usage_get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/usage/daily method: get operationId: get_daily_usage_api_v1_usage_daily_get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/usage/monthly method: get operationId: get_monthly_usage_api_v1_usage_monthly_get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /api/v1/usage/by-key method: get operationId: get_usage_by_key_api_v1_usage_by_key_get x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /search/photos method: get operationId: searchPhotos x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /search/photos/by-image method: post operationId: searchPhotosByImage x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /photos/{photo_id} method: get operationId: getPhoto x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /photos/{photo_id}/similar method: get operationId: getSimilarPhotos x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /facets/colors method: get operationId: listColors x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /facets/sources method: get operationId: listSources x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /facets/orientations method: get operationId: listOrientations x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /facets/licenses method: get operationId: listLicenses x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /facets/photographers/suggest method: get operationId: suggestPhotographers x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /facets/photographers/{username} method: get operationId: getPhotographer x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /collections method: get operationId: listCollections x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /collections method: post operationId: createCollection x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /collections/{collection_id} method: get operationId: getCollection x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none - path: /collections/{collection_id} method: delete operationId: deleteCollection x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /collections/{collection_id}/photos method: post operationId: addPhotoToCollection x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /collections/{collection_id}/photos/{photo_id} method: delete operationId: removePhotoFromCollection x-agentic-access: action-class: acting consequence: write subject: required audience: null token: max-ttl: 900 escalation: human-in-the-loop: conditional triggers: - abnormal - high-value audit: required - path: /usage method: get operationId: getUsage x-agentic-access: action-class: connected consequence: read subject: optional token: max-ttl: 3600 audit: none