openapi: 3.2.0 info: title: Fast Fax API version: 0.1.0 security: - bearer: [] - oauth2: - forms:read - forms:write tags: - name: Fax paths: /fax: post: summary: Send Fax description: 'POST /fax: multipart (`to` + one or more PDF `files`, sent as one fax) or JSON ({"to", then exactly one of "job_id", "form_id", "pdf_url", "pdf_base64"}). JSON references resolve to the owner''s stored PDF through service/fax_source.py; multipart bytes go straight to the fax service. Honours Idempotency-Key (plan 2 task 5): a client-side retry with the same key replays the original job''s response instead of submitting a second fax. Independent of (and in addition to) create_fax_job''s own artifact+ destination dedupe window, which catches a retry that used a fresh Idempotency-Key or none at all.' operationId: send_fax_fax_post requestBody: content: multipart/form-data: schema: properties: to: type: string description: Destination fax number, in E.164 form. files: items: type: string format: binary type: array description: One or more PDFs, faxed as a single combined document. type: object required: - to - files application/json: schema: properties: to: type: string description: Destination fax number, in E.164 form. sources: items: properties: artifact_id: type: string description: A prior artifact's id. artifact_token: type: string description: The capability token for an anonymous artifact_id. pages: type: string description: An optional page range, such as 1-3,7. type: object required: - artifact_id type: array maxItems: 20 description: A list of prior artifacts, faxed together as one packet. artifact_id: type: string description: A prior artifact's id. artifact_token: type: string description: The capability token for an anonymous artifact_id. job_id: type: string description: A ready context/fill job's id. form_id: type: string description: A ready form's id. pdf_url: type: string description: A URL to fetch the PDF from. pdf_base64: type: string description: The PDF, base64-encoded. type: object required: - to description: Send exactly one of sources, artifact_id, job_id, form_id, pdf_url, or pdf_base64; it resolves to the caller's stored PDF. required: true responses: '202': description: Successful Response content: application/json: schema: {} tags: - Fax /fax/{job_id}: get: summary: Get Fax operationId: get_fax_fax__job_id__get parameters: - name: job_id in: path required: true schema: type: string format: uuid title: Job Id responses: '200': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' tags: - Fax components: schemas: HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError ValidationError: properties: loc: items: anyOf: - type: string - type: integer type: array title: Location msg: type: string title: Message type: type: string title: Error Type input: title: Input ctx: type: object title: Context type: object required: - loc - msg - type title: ValidationError securitySchemes: bearer: type: http scheme: bearer bearerFormat: Emboss API key (sk_...) description: An Emboss API key. See https://getemboss.ai/docs/authentication. oauth2: type: oauth2 description: Sign in with your Emboss account. See https://getemboss.ai/docs/authentication. flows: authorizationCode: authorizationUrl: https://api.getemboss.ai/oauth/authorize tokenUrl: https://api.getemboss.ai/oauth/token scopes: forms:read: Read your forms forms:write: Create and fill forms