pr-111-feat-error-handling.api-stag.veo.co
Open in
urlscan Pro
18.238.55.35
Public Scan
Submitted URL: https://pr-111-feat-error-handling.api-stag.veo.co/
Effective URL: https://pr-111-feat-error-handling.api-stag.veo.co/docs/reference
Submission: On February 25 via api from US — Scanned from US
Effective URL: https://pr-111-feat-error-handling.api-stag.veo.co/docs/reference
Submission: On February 25 via api from US — Scanned from US
Form analysis
0 forms found in the DOMText Content
ReDoc requires Javascript to function. Please enable it to browse the documentation. * Introduction * API Design Principles * RFC Conformity * API Operations * Data Types * Identifiers * Explicit null values and additionalProperties * Authentication * Veo OpenID Connect (OIDC) * Security Configuration * OAuth 2.0 Scopes for Client Authorization * API Errors * 401 - Unauthorized * 404 - Not Found * 422 - Unprocessable Entity * 500 - Internal Server Error * Recordings * getGet Recording * get[WIP] List Recordings * 🚀 Upcoming APIs * get[WIP] List Recordings * getGet Protected Resource API docs by Redocly VEO API (0.1.DEV1+GFC5AC0D) Reference Docs Explorer View OAS Download JSON Download YAML INTRODUCTION Welcome to the Veo API reference documentation! API DESIGN PRINCIPLES RFC CONFORMITY The Veo API is designed to adhere strictly to web best practices and standards. The below non-exhaustive list of IETF RFCs, Drafts and other (web) standards and improvement proposals are observed and (partially) implemented by the Veo API and auxillary services such as the authentication provider: AUTHENTICATION & AUTHORIZATION * OpenID Connect Core 1.0 * OpenID Connect Discovery 1.0 * RFC-6749 - The OAuth 2.0 Authorization Framework * RFC-9126 - OAuth 2.0 Pushed Authorization Requests * OAuth 2.0 Security Best Current Practice API DESIGN * RFC-7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content * RFC-4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV) * RFC-8259 - The JavaScript Object Notation (JSON) Data Interchange Format * RFC-7807 - Problem Details for HTTP APIs * RFC-3339 - Date and Time on the Internet: Timestamps OTHER * AIP-136 - Custom Method Names * AIP-145 - Ranges API OPERATIONS Every operation exposed by the Veo API is either a GET operation (read) or a POST operation (write). Every write operation is identified by a separate path, which specifies the intended state change (and possible side effects). By using only GET and POST methods, the Veo API is able to go beyond standard HTTP-based semantics. Method Operation HTTP Verb Example Get Retrieve a single entity, typically by its identifier. GET GET /recordings/{recording-id} List Retrieve a list of entities of the same type. GET GET /recordings?club={club-id} Create Instantiates a new entity. POST POST /recordings/{recording-id}/create-clip Update/Delete Changes the value or state of an existing entity. POST POST /recordings/{recording-id}/remove-clip DATA TYPES The Veo API uses the following data types: Data Type Definition Format Example Reference Timestamp UTC timestamp with millisecond precision. YYYY-MM-DDTHH:mm:ss.sssZ "2024-01-19T12:15:55.126Z" RFC-3339 Duration Span of time expressed in milliseconds. Protobuf Duration JSON representation "4140.552s" Duration IDENTIFIERS Entities in the Veo API are uniquely identified by a 3-character lowercase string hinting at the type of the entity, followed by an underscore '_' and a uppercase ULID value (regex: ^[a-z]{3}_[A-Z0-9]{26}$). Note: identifiers should be treated as opaque string values. The 3-letter hint or the timestamp encoded in the ULID should not be used in-code. These purely serve as hint to the developer to help understand the context when observing a standalone identifier. EXPLICIT NULL VALUES AND ADDITIONALPROPERTIES All schemas in this specification include additionalProperties: false to indicate that the specified properties of the schema in question fully encapsulate the entity model. No unspecified properties will be returned by the API. To facilitate nullable fields, this specification uses a type array with a "null" literal, which is new in OAS 3.1.0 (see Swap nullable for type arrays). In practice, this means that: * All specified properties should always be returned by the API, regardless of their value (i.e. static properties). * Properties that can be null are explicitly denoted as such. All other properties will always be returned and should always have a value assigned. AUTHENTICATION VEO OPENID CONNECT (OIDC) The Veo API is secured by OAuth 2.0 access tokens issued by a OIDC-compliant authentication service following current best practices, which can be automatically discovered via below URLs: Environment Discovery URL Production https://auth.veo.co/.well-known/openid-configuration Staging https://auth-dev.veo.co/.well-known/openid-configuration SECURITY CONFIGURATION Client applications are administered by the Veo API team and are configured as follows: * Clients must use Authorization Code Flow + Proof Key for Code Exchange (PKCE) with code challenge method SHA-256. * Clients must use grant type: authorization_code or refresh_token. The implicit grant type is not supported. * Clients must use response type: code, issued via response modes: form_post, fragment, or query. * Clients are recommended to use OAuth 2.0 Pushed Authorization Requests for enhanced security. * Clients may obtain user information via /me, validate access and refresh tokens via /token/introspection, and revoke access tokens via /token/revocation. * Clients should support session logout via /session/end, optionally with a redirect for optimal user experience. * Clients may request scope open_id and provide a nonce parameter to validate the received id_token if identity verification is required. * For public clients authenticating Veo users: * The subject of the authentication request must be a Veo end user. * All requests to the authentication service are sender-constrained and must include an Origin header that is in a pre-configured allowlist of known origins for the client. * For private clients: * The subject of the authentication request may be a Veo end user or may be a dedicated service user provided by the API team separately. * Client Authentication must be provided for all requests to the authentication service. * The offline_access scope must be configured for the client, and the the authentication request must include query parameter prompt=consent to receive a refresh_token grant. * To prevent private client credentials being used for public applications, the Origin header must not be set on requests to the authentication service. Note: Access tokens are formatted as opaque strings that do not encode any information for security purposes. Clients can review token claims via the /introspection endpoint if required. OAUTH 2.0 SCOPES FOR CLIENT AUTHORIZATION The Veo API uses OAuth 2.0 Access Token Scopes to control client access to operations. Client-level access is evaluated separately from user authorization and controls general permissions of the application. Scopes are formatted as a unordered space-separated case-sensitive list of scope names, such as profile email phone_number. Any scopes that are unrecognized or not configured on the client are automatically ignored. The /token response includes a scope parameter indicating the scopes that are granted to the client. API ERRORS The Veo API aims to provide in-depth error details in accordance with RFC-7807 - Problem Details for HTTP APIs when failures are observed. An error response can be identified by its unique media type (response header Content-Type: application/problem+json) and contains additional information about the issue in the response body. Every error is assigned a unique type, which is a direct link to the API documentation with further information about the issue and instructions on how to resolve it (see errors listed below). Clients are recommended to use all the provided information in the error response and the documentation to attempt to resolve the issue. To assist with debugging (especially in distributed, highly-scalable systems) clients are recommended to use the X-Request-Id header to identify the originating request on the client side. If an error occurs, the API echoes the header value in the x_request_id field in the error response. Clients are recommended to use a high-entropy unique identifier such as a UUID or ULID to identify requests. The response field x_request_id is limited to the first 50 characters provided in the header. 401 - UNAUTHORIZED A 401 Unauthorized error response indicates an issue with request authentication and is returned for one or more reasons: * Authentication failed because the Authorization header is missing from the request, or the header was improperly formatted (expected: Bearer {{access_token}}). Confirm the access token is correctly set on the request. * Authentication failed because the access token has expired (see example response below). Refresh the access token before it expires (typical lifetime is 1 hour). The access token exp claim can be verified by the client to confirm the expiry of the access token. * Authorization failed because the access token does not contain the required scope(s) that the requested operation specifies. Confirm the scopes required for the operation and ensure to request these scopes when authorizing users. * Authentication failed for other reasons (bad access token signature, incorrect claims, etc). No additional details are provided in these cases for security purposes. Example of a 401 Unauthorized response body: { "status": 401, "reason": "Unauthorized", "type": "https://api.veo.co/docs/reference#section/API-Errors/401-Unauthorized-Error", "title": "Unauthorized Error", "detail": "Authentication failed, see 'context' for more information.", "context": "Access token expired at 2024-02-24T09:17:14.000Z (122 seconds ago).", "request_url": "https://api.veo.co/bad-request-url", "x_request_id": "my-unique-request-id", "trace_id": "Root=1-65d9bd3c-3bd466443505178258fb6781" } 404 - NOT FOUND A 404 Not Found error response indicates that the requested resource could not be found, or the requesting user does not have access to retrieve the resource. Confirm whether: * The request parameters are provided correctly and point at an existing resource. * The requesting User is configured with the appropriate permissions to retrieve the requested resource. Example of a 404 Not Found response body: { "status": 404, "reason": "Not Found", "type": "https://api.veo.co/docs/reference#section/API-Errors/404-Not-Found-Error", "title": "Not Found Error", "detail": "The requested resource could not be found or the requesting User does not have access to this resource.", "context": null, "request_url": "https://api.veo.co/bad-request-url", "x_request_id": "my-unique-request-id", "trace_id": "Root=1-65d9bd3c-3bd466443505178258fb6781" } 422 - UNPROCESSABLE ENTITY A 422 Unprocessable Entity error response indicates that the received request is well-formed, but contains one or more issues with the semantics of the provided data. The API validates all incoming data (request path, query, and body parameters) and will raise this error if one or more parts of the request cannot be processed accordingly. In case this error is returned, the response body will include detailed guidance with instructions on how to resolve the issue. In the below example for instance, the request path parameter recording__id triggered a string_too_short validation error because the provided string ("rec_short-string") does not meet the specified requirements ("min_length": 30). Example of a 422 Unprocessable Entity response body: { "status": 422, "reason": "Unprocessable Entity", "type": "https://api.veo.co/docs/reference#section/API-Errors/422-Unprocessable-Entity", "title": "Request Validation Error", "detail": "One or more request parameters failed to validate, see 'context' for more information.", "context": [ { "error_type": "string_too_short", "location": [ "path", "recording_id", "constrained-str" ], "message": "String should have at least 30 characters", "input": "rec_short-string", "error_context": { "min_length": 30 } } ], "request_url": "https://api.veo.co/bad-request-url", "x_request_id": "my-unique-request-id", "trace_id": "Root=1-65d9bd3c-3bd466443505178258fb6781" } 500 - INTERNAL SERVER ERROR In case the API encounters an internal error that it cannot recover from, the server will return a 500 Internal Server Error response. If this error is observed (and persists) make sure to reach out to the Veo API team and include the details of the response body so our team of highly-trained monkeys can resolve the issue as fast as possible. Example of a 500 Internal Server Error response body: { "status": 500, "reason": "Internal Server Error", "type": "https://api.veo.co/docs/reference#section/API-Errors/500-Internal-Server-Error", "title": "Internal Server Error", "detail": "Oops! We scored an own goal. The server failed and a team of highly-trained monkeys are investigating. If this error persists, please contact the API team and make sure to include this error response in your message!", "context": null, "request_url": "https://api.veo.co/bad-request-url", "x_request_id": "my-unique-request-id", "trace_id": "Root=1-65d9bd3c-3bd466443505178258fb6781" } RECORDINGS Recordings form the core entity of the Veo Platform. GET RECORDING get/recordings/{recording_id} Veo API Gateway http://localhost:3000/recordings/{recording_id} Retrieve a Recording entity by its identifier. The requesting User must have (at least) view permissions on the Recording entity in order to retrieve it. A 404 Not Found error is returned if the requested entity does not exist or the User does not have access. PATH PARAMETERS recording_id required string <entity-id> (Recording Id) = 30 characters ^rec_[A-Z0-9]{26}$ Examples: rec_40X3EHMPG5YW3HMZZQ3F6APQPS Opaque string uniquely identifying a Recording entity formatted as <prefix>_<ULID>. Note: the prefix rec_ should only be used as hint to indicate what entity this identifier points to and should not be consumed in-code. RESPONSES 200 Successful Response RESPONSE SCHEMA: APPLICATION/JSON id required string <entity-id> (Recording ID) Examples: "rec_40X3EHMPG5YW3HMZZQ3F6APQPS" Opaque string uniquely identifying a Recording entity formatted as <prefix>_<ULID>. Note: the prefix rec_ should only be used as hint to indicate what entity this identifier points to and should not be consumed in-code. start_time required string <date-time> (Timestamp (UTC)) = 24 characters ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z$ Examples: "2024-01-19T12:15:55.126Z" UTC timestamp with millisecond precision formatted as YYYY-MM-DDTHH:mm:ss.sssZ conforming to RFC-3339. end_time required Timestamp (UTC) (string) or End Time (null) (End Time) _links required Array of objects ( Links) renders required Array of objects (Renders) clips required Array of objects (Clips) 422 Validation Error RESPONSE SAMPLES * 200 * 422 Content type application/json Copy Expand all Collapse all { * "id": "rec_40X3EHMPG5YW3HMZZQ3F6APQPS", * "start_time": "2024-01-19T12:15:55.126Z", * "end_time": "2024-01-19T12:15:55.126Z", * "_links": [ * { * "href": "https://veo.co", * "rel": "self", * "id": "rec_40X3EHMPG5YW3HMZZQ3F6APQPS" } ], * "renders": [ * { * "type": "followcam", * "_links": [ * { * "href": "https://veo.co", * "rel": "source", * "type": "video/mp4" } ] } ], * "clips": [ * { * "start_offset": "4140.552s", * "end_offset": "4140.552s", * "duration": "4140.552s", * "_links": [ * { * "href": "https://veo.co", * "rel": "source", * "type": "video/mp4" } ] } ] } [WIP] LIST RECORDINGS get/recordings/ Veo API Gateway http://localhost:3000/recordings/ Retrieve one or more Recording entities by their identifier, associated Club entities, or a time interval during which the Recording took place. Filter criteria are added as AND operations in the construction of the query if more than one is provided. If no filter criteria are provided, all Recordings that the User has access to are returned. The requesting User must have (at least) view permissions on the Recording entity in order to retrieve it. An empty array is returned in the response if the requested entity does not exist, none of the filter criteria return any matches, or the User does not have access to the Recording entity. QUERY PARAMETERS self Array of Recording ID Filter (strings) or Recording ID Filter (null) (Recording ID Filter) Examples: self=rec_01HQ89XNTBNABAF8JVHWK6F9SW&self=rec_01HQ89XNTBNABAF8JVHWK6F9SW Filter Recordings by identifier. Multiple identifiers can be provided by repeating the query parameter. club Array of Club ID Filter (strings) or Club ID Filter (null) (Club ID Filter) Examples: club=clb_01HQ89XNTBNABAF8JVHWK6F9SW&club=clb_01HQ89XNTBNABAF8JVHWK6F9SW Filter Recordings by associated Club entities. Multiple identifiers can be provided by repeating the query parameter. overlap_start string <date-time> (Overlap Start) Default: "2000-01-01T00:00:00" Recording time span within this start time overlap_end Timestamp (UTC) (string) or Overlap End (null) (Overlap End) Recording UUIDtime span within this end time RESPONSES 200 Successful Response RESPONSE SCHEMA: APPLICATION/JSON items required Array of objects (Items) 422 Validation Error RESPONSE SAMPLES * 200 * 422 Content type application/json Copy Expand all Collapse all { * "items": [ * { * "id": "rec_40X3EHMPG5YW3HMZZQ3F6APQPS", * "start_time": "2024-01-19T12:15:55.126Z", * "end_time": "2024-01-19T12:15:55.126Z", * "_links": [ * { * "href": "https://veo.co", * "rel": "self", * "id": "rec_40X3EHMPG5YW3HMZZQ3F6APQPS" } ], * "renders": [ * { * "type": "followcam", * "_links": [ * { * "href": "https://veo.co", * "rel": "source", * "type": "video/mp4" } ] } ], * "clips": [ * { * "start_offset": "4140.552s", * "end_offset": "4140.552s", * "duration": "4140.552s", * "_links": [ * { * "href": "https://veo.co", * "rel": "source", * "type": "video/mp4" } ] } ] } ] } 🚀 UPCOMING APIS [WIP] LIST RECORDINGS get/recordings/ Veo API Gateway http://localhost:3000/recordings/ Retrieve one or more Recording entities by their identifier, associated Club entities, or a time interval during which the Recording took place. Filter criteria are added as AND operations in the construction of the query if more than one is provided. If no filter criteria are provided, all Recordings that the User has access to are returned. The requesting User must have (at least) view permissions on the Recording entity in order to retrieve it. An empty array is returned in the response if the requested entity does not exist, none of the filter criteria return any matches, or the User does not have access to the Recording entity. QUERY PARAMETERS self Array of Recording ID Filter (strings) or Recording ID Filter (null) (Recording ID Filter) Examples: self=rec_01HQ89XNTBNABAF8JVHWK6F9SW&self=rec_01HQ89XNTBNABAF8JVHWK6F9SW Filter Recordings by identifier. Multiple identifiers can be provided by repeating the query parameter. club Array of Club ID Filter (strings) or Club ID Filter (null) (Club ID Filter) Examples: club=clb_01HQ89XNTBNABAF8JVHWK6F9SW&club=clb_01HQ89XNTBNABAF8JVHWK6F9SW Filter Recordings by associated Club entities. Multiple identifiers can be provided by repeating the query parameter. overlap_start string <date-time> (Overlap Start) Default: "2000-01-01T00:00:00" Recording time span within this start time overlap_end Timestamp (UTC) (string) or Overlap End (null) (Overlap End) Recording UUIDtime span within this end time RESPONSES 200 Successful Response RESPONSE SCHEMA: APPLICATION/JSON items required Array of objects (Items) 422 Validation Error RESPONSE SAMPLES * 200 * 422 Content type application/json Copy Expand all Collapse all { * "items": [ * { * "id": "rec_40X3EHMPG5YW3HMZZQ3F6APQPS", * "start_time": "2024-01-19T12:15:55.126Z", * "end_time": "2024-01-19T12:15:55.126Z", * "_links": [ * { * "href": "https://veo.co", * "rel": "self", * "id": "rec_40X3EHMPG5YW3HMZZQ3F6APQPS" } ], * "renders": [ * { * "type": "followcam", * "_links": [ * { * "href": "https://veo.co", * "rel": "source", * "type": "video/mp4" } ] } ], * "clips": [ * { * "start_offset": "4140.552s", * "end_offset": "4140.552s", * "duration": "4140.552s", * "_links": [ * { * "href": "https://veo.co", * "rel": "source", * "type": "video/mp4" } ] } ] } ] } GET PROTECTED RESOURCE get/protected_resource Veo API Gateway http://localhost:3000/protected_resource AUTHORIZATIONS: OpenID Connect: Veo Authentication Service RESPONSES 200 Successful Response RESPONSE SCHEMA: APPLICATION/JSON access_token required string (Access Token) jwt_claims required object (Jwt Claims) 401 Unauthorized 404 Not Found 422 Unprocessable Entity 500 Internal Server Error RESPONSE SAMPLES * 200 * 401 * 404 * 422 * 500 Content type application/json Copy Expand all Collapse all { * "access_token": "string", * "jwt_claims": { } }