{"openapi":"3.1.0","info":{"title":"FORGE Developer API \u2014 isolated preview","version":"0.1.0-preview"},"paths":{"/api/developer/v1/openapi.json":{"get":{"operationId":"forge_get_api_contract","x-forge-required-scope":"forge.read","x-forge-side-effect":"read-only","security":[{"bearer":[]}],"responses":{"200":{"description":"Authorized result; validation may be INCOMPLETE"},"400":{"description":"Invalid contract"},"401":{"description":"Invalid or missing access token"},"403":{"description":"Current permission denied"},"404":{"description":"Not found in caller scope"},"409":{"description":"Revision or idempotency conflict"},"429":{"description":"Principal quota exceeded"}}}},"/api/developer/v1/context":{"get":{"operationId":"forge_get_context","x-forge-required-scope":"forge.read","x-forge-side-effect":"read-only","security":[{"bearer":[]}],"responses":{"200":{"description":"Authorized result; validation may be INCOMPLETE"},"400":{"description":"Invalid contract"},"401":{"description":"Invalid or missing access token"},"403":{"description":"Current permission denied"},"404":{"description":"Not found in caller scope"},"409":{"description":"Revision or idempotency conflict"},"429":{"description":"Principal quota exceeded"}}}},"/api/developer/v1/processes":{"get":{"operationId":"forge_list_processes","x-forge-required-scope":"forge.read","x-forge-side-effect":"read-only","security":[{"bearer":[]}],"responses":{"200":{"description":"Authorized result; validation may be INCOMPLETE"},"400":{"description":"Invalid contract"},"401":{"description":"Invalid or missing access token"},"403":{"description":"Current permission denied"},"404":{"description":"Not found in caller scope"},"409":{"description":"Revision or idempotency conflict"},"429":{"description":"Principal quota exceeded"}}},"post":{"operationId":"forge_create_process_draft","x-forge-required-scope":"forge.draft","x-forge-side-effect":"draft-only; audited","security":[{"bearer":[]}],"responses":{"200":{"description":"Authorized result; validation may be INCOMPLETE"},"400":{"description":"Invalid contract"},"401":{"description":"Invalid or missing access token"},"403":{"description":"Current permission denied"},"404":{"description":"Not found in caller scope"},"409":{"description":"Revision or idempotency conflict"},"429":{"description":"Principal quota exceeded"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"processId":{"type":"string"},"displayName":{"type":"string"}},"required":["processId","displayName"]}}}}}},"/api/developer/v1/processes/{id}":{"get":{"operationId":"forge_get_process","x-forge-required-scope":"forge.read","x-forge-side-effect":"read-only","security":[{"bearer":[]}],"responses":{"200":{"description":"Authorized result; validation may be INCOMPLETE"},"400":{"description":"Invalid contract"},"401":{"description":"Invalid or missing access token"},"403":{"description":"Current permission denied"},"404":{"description":"Not found in caller scope"},"409":{"description":"Revision or idempotency conflict"},"429":{"description":"Principal quota exceeded"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}]}},"/api/developer/v1/capabilities":{"get":{"operationId":"forge_list_capabilities","x-forge-required-scope":"forge.read","x-forge-side-effect":"read-only","security":[{"bearer":[]}],"responses":{"200":{"description":"Authorized result; validation may be INCOMPLETE"},"400":{"description":"Invalid contract"},"401":{"description":"Invalid or missing access token"},"403":{"description":"Current permission denied"},"404":{"description":"Not found in caller scope"},"409":{"description":"Revision or idempotency conflict"},"429":{"description":"Principal quota exceeded"}}}},"/api/developer/v1/processes/{id}/blocks":{"post":{"operationId":"forge_add_process_block","x-forge-required-scope":"forge.draft","x-forge-side-effect":"draft-only; audited","security":[{"bearer":[]}],"responses":{"200":{"description":"Authorized result; validation may be INCOMPLETE"},"400":{"description":"Invalid contract"},"401":{"description":"Invalid or missing access token"},"403":{"description":"Current permission denied"},"404":{"description":"Not found in caller scope"},"409":{"description":"Revision or idempotency conflict"},"429":{"description":"Principal quota exceeded"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expectedRevision":{"type":["string","integer"],"pattern":"^-?(?:0|[1-9]\\d*)$"},"block":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"typeId":{"type":"string"},"version":{"type":"string"},"name":{"type":"string"},"policy":{"type":"string","enum":["REQUIRED","BEST_EFFORT","OPTIONAL","VERIFICATION","TERMINAL"]},"configuration":{"type":"object","additionalProperties":true},"connectionId":{"type":["string","null"]},"x":{"type":["string","number"],"pattern":"^-?(?:0|[1-9]\\d*)(?:\\.\\d\u002B)?(?:[eE][\u002B-]?\\d\u002B)?$"},"y":{"type":["string","number"],"pattern":"^-?(?:0|[1-9]\\d*)(?:\\.\\d\u002B)?(?:[eE][\u002B-]?\\d\u002B)?$"}},"required":["id","typeId","version","name","policy","configuration","connectionId","x","y"]}},"required":["expectedRevision","block"]}}}}}},"/api/developer/v1/processes/{id}/block-configuration":{"post":{"operationId":"forge_update_process_block","x-forge-required-scope":"forge.draft","x-forge-side-effect":"draft-only; audited","security":[{"bearer":[]}],"responses":{"200":{"description":"Authorized result; validation may be INCOMPLETE"},"400":{"description":"Invalid contract"},"401":{"description":"Invalid or missing access token"},"403":{"description":"Current permission denied"},"404":{"description":"Not found in caller scope"},"409":{"description":"Revision or idempotency conflict"},"429":{"description":"Principal quota exceeded"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expectedRevision":{"type":["string","integer"],"pattern":"^-?(?:0|[1-9]\\d*)$"},"blockId":{"type":"string","format":"uuid"},"configuration":{"type":"object","additionalProperties":true},"connectionId":{"type":["string","null"]},"policy":{"type":"string","enum":["REQUIRED","BEST_EFFORT","OPTIONAL","VERIFICATION","TERMINAL"]}},"required":["expectedRevision","blockId","configuration","connectionId","policy"]}}}}}},"/api/developer/v1/processes/{id}/edges":{"post":{"operationId":"forge_connect_process_blocks","x-forge-required-scope":"forge.draft","x-forge-side-effect":"draft-only; audited","security":[{"bearer":[]}],"responses":{"200":{"description":"Authorized result; validation may be INCOMPLETE"},"400":{"description":"Invalid contract"},"401":{"description":"Invalid or missing access token"},"403":{"description":"Current permission denied"},"404":{"description":"Not found in caller scope"},"409":{"description":"Revision or idempotency conflict"},"429":{"description":"Principal quota exceeded"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expectedRevision":{"type":["string","integer"],"pattern":"^-?(?:0|[1-9]\\d*)$"},"sourceBlockId":{"type":"string","format":"uuid"},"sourcePortId":{"type":"string"},"targetBlockId":{"type":"string","format":"uuid"},"targetPortId":{"type":"string"},"branchLabel":{"type":["string","null"]}},"required":["expectedRevision","sourceBlockId","sourcePortId","targetBlockId","targetPortId","branchLabel"]}}}}}},"/api/developer/v1/processes/{id}/validate":{"post":{"operationId":"forge_validate_process","x-forge-required-scope":"forge.read","x-forge-side-effect":"read-only","security":[{"bearer":[]}],"responses":{"200":{"description":"Authorized result; validation may be INCOMPLETE"},"400":{"description":"Invalid contract"},"401":{"description":"Invalid or missing access token"},"403":{"description":"Current permission denied"},"404":{"description":"Not found in caller scope"},"409":{"description":"Revision or idempotency conflict"},"429":{"description":"Principal quota exceeded"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"expectedRevision":{"type":["string","integer"],"pattern":"^-?(?:0|[1-9]\\d*)$"}},"required":["expectedRevision"]}}}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Issuer/audience validated RS256 access token; forge.read/forge.draft plus current FORGE grant. OAuth client registration is a separate release gate."}}}}