openapi: 3.0.0 info: contact: email: dev@approveapi.com description: The simple API to request a user's approval on anything via email + sms. title: ApproveAPISwagger version: 1.0.1 servers: - url: https://approve.sh paths: /prompt: post: description: Creates a prompt and pushes it to the user (sends via email, sms, or other supported protocols). operationId: CreatePrompt requestBody: content: application/json: schema: $ref: '#/components/schemas/CreatePromptRequest' required: true responses: 200: content: application/json: schema: $ref: '#/components/schemas/Prompt' description: OK 400: content: application/json: schema: $ref: '#/components/schemas/Error' description: Invalid parameters 401: content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key in the username basic auth field 504: content: application/json: schema: $ref: '#/components/schemas/Error' description: Polling timed out with no user response security: - apiKey: [] summary: Sending a prompt tags: - approve /prompt/{id}: get: description: Retrieve the prompt object with the given ID. operationId: GetPrompt parameters: - description: The identifier for a pending or completed prompt. This is returned when you create a prompt. explode: false in: path name: id required: true schema: type: string style: simple - description: If true, the request waits (long-polls) until the user responds to the prompt or more than 10 minutes pass. Defaults to false. explode: true in: query name: long_poll required: false schema: type: boolean style: form responses: 200: content: application/json: schema: $ref: '#/components/schemas/Prompt' description: OK 400: content: application/json: schema: $ref: '#/components/schemas/Error' description: Invalid parameters 404: content: application/json: schema: $ref: '#/components/schemas/Error' description: A prompt with this identifier could not be found security: - apiKey: [] summary: Retrieve a prompt tags: - approve /prompt/{id}/status: get: description: Returns whether a prompt has been completed by the user. This request does not require authentication, and so can be used client-side without sharing API credentials. operationId: GetPromptStatus parameters: - description: The prompt identifier. explode: false in: path name: id required: true schema: type: string style: simple responses: 200: content: application/json: schema: $ref: '#/components/schemas/PromptStatus' description: OK 400: content: application/json: schema: $ref: '#/components/schemas/Error' description: Invalid parameters 404: content: application/json: schema: $ref: '#/components/schemas/Error' description: A prompt with this identifier could not be found summary: Check prompt status tags: - approve components: responses: Unauthorized: content: application/json: schema: $ref: '#/components/schemas/Error' description: Missing or invalid API key in the username basic auth field BadRequest: content: application/json: schema: $ref: '#/components/schemas/Error' description: Invalid parameters PollTimeout: content: application/json: schema: $ref: '#/components/schemas/Error' description: Polling timed out with no user response PromptNotFound: content: application/json: schema: $ref: '#/components/schemas/Error' description: A prompt with this identifier could not be found schemas: Prompt: example: sent_at: 0.8008281904610115 metadata: browser: browser operating_system: operating_system location: location time: time ip_address: ip_address is_expired: true answer: result: true metadata: browser: browser operating_system: operating_system ip_address: ip_address time: 6.027456183070403 id: id properties: id: description: A unique id for this prompt. type: string sent_at: description: The unix timestamp when this prompt was sent. type: number is_expired: description: Whether the prompt can still be answered. type: boolean answer: $ref: '#/components/schemas/PromptAnswer' metadata: $ref: '#/components/schemas/PromptMetadata' required: - id - is_expired - sent_at type: object CreatePromptRequest: example: metadata: browser: browser operating_system: operating_system location: location time: time ip_address: ip_address long_poll: true reject_text: reject_text approve_redirect_url: approve_redirect_url reject_redirect_url: reject_redirect_url approve_text: approve_text body: body title: title user: user expires_in: 0.8008281904610115 properties: user: description: The user to send the approval request to. Can be either an email address or a phone number. type: string body: description: The body of the approval request to show the user. type: string title: description: The title of an approval request. Defaults to an empty string. type: string approve_text: description: The approve action text. Defaults to 'Approve'. type: string approve_redirect_url: description: An HTTPS URL to redirect the user to if the prompt is approved. This URL is kept secret until the user is redirected to it. type: string reject_text: description: The reject action text. If not specified the reject button will NOT be rendered, and the user will only see an approve action button. type: string reject_redirect_url: description: An HTTPS URL to redirect the user to if the prompt is rejected. This URL is kept secret until the user is redirected to it. type: string long_poll: description: If true, the request waits (long-polls) until the user responds to the prompt or more than 10 minutes pass. Defaults to false. type: boolean expires_in: description: The number of seconds until this request can no longer be answered. type: number metadata: $ref: '#/components/schemas/PromptMetadata' required: - body - user type: object PromptMetadata: example: browser: browser operating_system: operating_system location: location time: time ip_address: ip_address properties: location: description: The physical location, like Oakland, CA, of the action. type: string time: description: The date/time of the action. type: string ip_address: description: The IP address of the computer initiating the action. type: string browser: description: The web browser initiating the action, i.e. Chrome. type: string operating_system: description: The operating system initiating the action, i.e. Mac OS X. type: string type: object PromptAnswer: example: result: true metadata: browser: browser operating_system: operating_system ip_address: ip_address time: 6.027456183070403 properties: result: description: The user's answer to whether or not they approve this prompt. type: boolean time: description: The unix timestamp when the user answered the prompt. type: number metadata: $ref: '#/components/schemas/AnswerMetadata' required: - result - time type: object AnswerMetadata: example: browser: browser operating_system: operating_system ip_address: ip_address properties: ip_address: type: string browser: type: string operating_system: type: string type: object PromptStatus: example: is_expired: true is_answered: true properties: is_answered: description: Whether the prompt has been answered or not. type: boolean is_expired: description: Whether the prompt can still be answered. type: boolean required: - is_answered - is_expired type: object Error: properties: error: description: A human readable API error message. type: string required: - error type: object securitySchemes: apiKey: scheme: basic type: http