{"openapi":"3.0.3","info":{"title":"IRIS 1099-R Transmission API","description":"REST API for validating, submitting, and correcting IRS Form 1099-R filings through Pension Resource as the IRIS A2A transmitter.\n\n**For AI assistants and agents:** use an API key with the `draft` permission. Call `GET /1099-r/fields` for field keys and rules, `POST /1099-r/validate` until `ok` is true, then `POST /1099-r/drafts`. Give the returned `review_url` to the user exactly as returned: they sign in, review every form, pay and file. Draft-scoped keys cannot pay or file. The same tools are available over MCP at `/mcp`.\n\n**Scopes:** `validate` (validate only), `draft` (prepare review drafts), `transmit` (create, pay, transmit and correct submissions).\n\n**Data:** payloads are stateless; send full `records[]` on validate, transmit and correction calls. Recipient data is not stored, except review drafts, which are encrypted and deleted when paid or after 7 days.\n\n**Pricing:** responses include a `quote`. Account credit applies automatically. Corrections are new paid submissions unless Pension Resource marked the original as a service fault; then pass `parent_submission_id` and that one is free.\n\n**Rejected submissions (replacements):** forms the IRS rejected are sent again as a replacement, not as new forms and not as a correction. Create a submission with `transmission_type` `R` and `replaces_submission_id` (the rejected submission), with the fixed records, then transmit it. Rejected: include every record of the rejected submission. Partially Accepted: include only the rejected payers (see `replacement.rejected_payer_submission_ids` on the rejected submission). Replacements are free up to the rejected submission's form count. If the IRS accepts the replacement within 60 days of the rejection, the forms count as filed on the original date. Exceptions: a rejected correction is filed again as a correction (C), and an XML-schema rejection is filed again as an original (O). In the IRS test system (ATS), resubmit rejected test filings as originals.","version":"1.1.0","contact":{"name":"Pension Resource IRIS API","url":"https://pensionresource.website/EAMain?content=EAMain.Filings.1099R.ApiDocs"},"termsOfService":"https://pensionresource.website/EAMain?content=EAMain.Filings.1099R.Terms"},"servers":[{"url":"https://pensionresource.website/api/v1/iris","description":"IRIS 1099-R API v1"}],"security":[{"bearerAuth":[]},{"apiKeyAuth":[]}],"tags":[{"name":"Health","description":"Service status"},{"name":"Validate","description":"Pre-flight validation"},{"name":"Submissions","description":"Create, pay, transmit, and track filings"},{"name":"Corrections","description":"Acknowledgement errors and correction resubmit"},{"name":"Agents","description":"Field reference, review drafts and MCP for AI assistants"}],"paths":{"/health":{"get":{"tags":["Health"],"summary":"Health check","security":[],"responses":{"200":{"description":"Service is up","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}},"operationId":"getHealth"}},"/openapi.json":{"get":{"tags":["Health"],"summary":"OpenAPI specification","security":[],"responses":{"200":{"description":"This document","content":{"application/json":{"schema":{"type":"object"}}}}},"operationId":"getOpenApiSpec"}},"/1099-r/validate":{"post":{"tags":["Validate"],"summary":"Validate 1099-R records","description":"Runs IRIS field rules and required-field checks and returns a price quote. Does not call the IRS or store records.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateRequest"},"example":{"tax_year":2026,"state_filing":"cfsf","records":[{"payer_name":"Example Plan Trust","payer_tin":"000000001","payer_address1":"100 Sample St","payer_city":"Springfield","payer_state":"IL","payer_zip":"62701","payer_phone":"2175550100","recipient_tin":"000000002","recipient_first":"Jordan","recipient_last":"Example","recipient_address1":"42 Maple Ave","recipient_city":"Springfield","recipient_state":"IL","recipient_zip":"62704","box1_gross":"25000.00","box2a_taxable":"25000.00","box4_fed_withheld":"5000.00","box7_dist_codes":"7"}]}}}},"responses":{"200":{"description":"Validation passed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateResponse"}}}},"422":{"description":"Validation failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateResponse"}}}}},"operationId":"validate1099R"}},"/1099-r/submissions":{"post":{"tags":["Submissions"],"summary":"Create submission","description":"Creates the submission and starts billing for the quoted net amount (Stripe PaymentIntent, partner credit debit, or nothing when credit covers it). Requires the transmit scope. Resend full records on transmit.","parameters":[{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubmissionRequest"},"example":{"tax_year":2026,"email":"you@example.com","state_filing":"cfsf","payer_authorization":{"relationship":"tpa","attest":true},"records":[{"payer_name":"Example Plan Trust","payer_tin":"000000001","payer_address1":"100 Sample St","payer_city":"Springfield","payer_state":"IL","payer_zip":"62701","payer_phone":"2175550100","recipient_tin":"000000002","recipient_first":"Jordan","recipient_last":"Example","recipient_address1":"42 Maple Ave","recipient_city":"Springfield","recipient_state":"IL","recipient_zip":"62704","box1_gross":"25000.00","box2a_taxable":"25000.00","box4_fed_withheld":"5000.00","box7_dist_codes":"7"}]}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubmissionResponse"}}}},"402":{"description":"Insufficient partner credits"}},"operationId":"createSubmission"}},"/1099-r/submissions/{submission_id}":{"get":{"tags":["Submissions"],"summary":"Get submission status","parameters":[{"$ref":"#/components/parameters/SubmissionId"}],"responses":{"200":{"description":"Submission metadata","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionResponse"}}}},"404":{"description":"Not found"}},"operationId":"getSubmission"}},"/1099-r/submissions/{submission_id}/payment-intent":{"post":{"tags":["Submissions"],"summary":"Refresh Stripe PaymentIntent","description":"Stripe billing accounts only.","parameters":[{"$ref":"#/components/parameters/SubmissionId"}],"responses":{"200":{"description":"PaymentIntent created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentIntentResponse"}}}}},"operationId":"refreshPaymentIntent"}},"/1099-r/submissions/{submission_id}/transmit":{"post":{"tags":["Submissions"],"summary":"Transmit to IRS","description":"Validates records, builds IRIS XML, and transmits via A2A. Requires payment (Stripe) or prior partner debit.","parameters":[{"$ref":"#/components/parameters/SubmissionId"},{"$ref":"#/components/parameters/IdempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransmitRequest"}}}},"responses":{"200":{"description":"Accepted by IRS intake","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransmitResponse"}}}},"402":{"description":"Payment required, or the submission was accepted (or rejected in the test system) and a resend must be a new paid submission (or a free resend with parent_submission_id when marked as a service fault). A submission the IRS rejected in production returns 409: replace it with transmission_type R and replaces_submission_id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Validation failed"},"502":{"description":"IRS transmit failed"}},"operationId":"transmitSubmission"}},"/1099-r/submissions/{submission_id}/acknowledgement":{"post":{"tags":["Corrections"],"summary":"Poll IRS acknowledgement","description":"Polls IRS for processing status and stores structured errors (no PII).","parameters":[{"$ref":"#/components/parameters/SubmissionId"}],"responses":{"200":{"description":"Acknowledgement result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcknowledgementResponse"}}}}},"operationId":"pollAcknowledgement"}},"/1099-r/submissions/{submission_id}/errors":{"get":{"tags":["Corrections"],"summary":"List stored IRS errors","parameters":[{"$ref":"#/components/parameters/SubmissionId"}],"responses":{"200":{"description":"Error list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorsResponse"}}}}},"operationId":"listSubmissionErrors"}},"/1099-r/submissions/{submission_id}/correction-feedback":{"post":{"tags":["Corrections"],"summary":"Annotate records with errors","description":"Stateless: POST your records[]; returns same rows with _errors[] for import-friendly correction workflow.","parameters":[{"$ref":"#/components/parameters/SubmissionId"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["records"],"properties":{"records":{"type":"array","items":{"$ref":"#/components/schemas/Form1099RRecord"}}}}}}},"responses":{"200":{"description":"Annotated records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CorrectionFeedbackResponse"}}}}},"operationId":"correctionFeedback"}},"/1099-r/fields":{"get":{"tags":["Agents"],"operationId":"getFieldReference","summary":"Field reference for a tax year","security":[],"description":"Field keys, types, rules, states, distribution codes, CF/SF states, pricing and an example record. No key needed.","parameters":[{"name":"tax_year","in":"query","required":false,"schema":{"type":"integer","example":2026}}],"responses":{"200":{"description":"Field reference","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FieldReference"}}}}}}},"/1099-r/drafts":{"post":{"tags":["Agents"],"operationId":"createReviewDraft","summary":"Create a review draft for the account owner","description":"Saves records encrypted (up to 7 days) and returns a one-time review_url. The owner signs in, reviews, pays and files. Requires the draft (or transmit) scope and the owner's acceptance of the current Terms. The records are validated and the result returned, but a draft is saved even with errors so the owner can fix them.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDraftRequest"},"example":{"tax_year":2026,"label":"Example Plan 2026 distributions","state_filing":"cfsf","records":[{"payer_name":"Example Plan Trust","payer_tin":"000000001","payer_address1":"100 Sample St","payer_city":"Springfield","payer_state":"IL","payer_zip":"62701","payer_phone":"2175550100","recipient_tin":"000000002","recipient_first":"Jordan","recipient_last":"Example","recipient_address1":"42 Maple Ave","recipient_city":"Springfield","recipient_state":"IL","recipient_zip":"62704","box1_gross":"25000.00","box2a_taxable":"25000.00","box4_fed_withheld":"5000.00","box7_dist_codes":"7"}]}}}},"responses":{"201":{"description":"Draft created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDraftResponse"}}}},"403":{"description":"Missing scope or Terms not accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many open drafts"},"503":{"description":"Drafts unavailable on this server"}}}},"/1099-r/drafts/{draft_id}":{"get":{"tags":["Agents"],"operationId":"getReviewDraft","summary":"Draft status (never returns records)","parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","pattern":"^drf_[0-9a-f]{20}$"}}],"responses":{"200":{"description":"Draft status","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"draft":{"$ref":"#/components/schemas/Draft"}}}}}},"404":{"description":"Not found"}}},"delete":{"tags":["Agents"],"operationId":"deleteReviewDraft","summary":"Delete a draft (wipes the encrypted records)","parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"string","pattern":"^drf_[0-9a-f]{20}$"}}],"responses":{"200":{"description":"Draft status","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"draft":{"$ref":"#/components/schemas/Draft"}}}}}},"404":{"description":"Not found"}}}},"/mcp":{"post":{"tags":["Agents"],"operationId":"mcpJsonRpc","summary":"MCP server (Streamable HTTP, JSON-RPC 2.0)","description":"Model Context Protocol endpoint. Methods: initialize, ping, tools/list, tools/call. Tools: get_field_reference (no key needed), validate_1099r, create_review_draft, get_draft_status. Send the API key as a Bearer token. Responses are plain JSON (no SSE); notifications get 202.","security":[{},{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object"},"example":{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_field_reference","arguments":{"tax_year":2026}}}}}},"responses":{"200":{"description":"JSON-RPC response","content":{"application/json":{"schema":{"type":"object"}}}},"202":{"description":"Notification accepted"},"400":{"description":"Parse error"},"403":{"description":"Origin not allowed"}}}},"/api-catalog":{"get":{"tags":["Health"],"operationId":"getApiCatalog","summary":"API catalog (RFC 9727 linkset)","security":[],"responses":{"200":{"description":"Linkset","content":{"application/linkset+json":{"schema":{"type":"object"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key prefixed with iris_. Scopes: validate, draft, transmit (set when the key is created)."},"apiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}},"parameters":{"SubmissionId":{"name":"submission_id","in":"path","required":true,"schema":{"type":"integer"}},"IdempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":64},"description":"Prevents duplicate submissions/charges on retry."}},"schemas":{"HealthResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"service":{"type":"string"},"version":{"type":"string"},"environment":{"type":"string","enum":["T","P"]},"is_test":{"type":"boolean"},"a2a_ready":{"type":"boolean"}}},"Form1099RRecord":{"type":"object","description":"One Form 1099-R as flat string fields (payer + recipient + boxes). Keys and rules: GET /1099-r/fields. For corrections, include the irs_* fields returned in TransmitResponse.record_ids.","properties":{"irs_unique_record_id":{"type":"string","description":"ReceiptId|SubmissionId|RecordId of the last accepted version (corrections)"},"irs_utid":{"type":"string","description":"UTID of the most recent transmission containing this record"},"irs_submission_id":{"type":"string"},"irs_record_id":{"type":"string"},"box13_state":{"type":"string","description":"Box 15 state code (first state line). With state_filing=cfsf, forms for CF/SF participating states are forwarded to this state by the IRS."},"box13_state_2":{"type":"string","description":"Box 15 state code on the second state line (optional; must differ from box13_state). The other second-line fields are box12_state_withheld_2, box13_state_no_2, box14_state_dist_2, box15_local_withheld_2, box16_locality_2 and box17_local_dist_2. With cfsf, a participating second state is forwarded too."},"cfsf_opt_out":{"type":"string","enum":["0","1"],"description":"1 = don't forward this form through CF/SF even when state_filing is cfsf"},"recipient_email":{"type":"string","format":"email","description":"Optional. Kept with the record in review drafts so the owner can email the recipient a password-protected courtesy copy from the web app after filing. Never sent to the IRS; the API does not send email."}},"additionalProperties":{"type":"string"}},"StateFiling":{"type":"string","enum":["cfsf","self"],"default":"cfsf","description":"cfsf = Combined Federal/State Filing: the IRS forwards each form to the participating states in box13_state and box13_state_2 for the tax year. self = federal only; you file with the states."},"CfsfSummary":{"type":"object","description":"Form counts per state code (no PII).","properties":{"mode":{"$ref":"#/components/schemas/StateFiling"},"forwarded":{"type":"object","additionalProperties":{"type":"integer"},"description":"Forms the IRS forwards, by state"},"self_file":{"type":"object","additionalProperties":{"type":"integer"},"description":"Forms you file with the state yourself, by state"},"no_tax":{"type":"object","additionalProperties":{"type":"integer"},"description":"Forms for states with no income tax, by state"},"no_state":{"type":"integer","description":"Forms with no box 15 state"},"opted_out":{"type":"integer","description":"Forms for participating states opted out with cfsf_opt_out"},"direct":{"type":"object","additionalProperties":{"type":"integer"},"description":"Forms that a participating state also wants filed directly (for example CT, OH, IN, NE, PA for 2026), by state. See state_direct_notes for what to do."},"confirmed":{"type":"boolean","description":"false when the IRS state list for the tax year isn't configured yet and the newest list was used"}}},"RecordIds":{"type":"object","properties":{"index":{"type":"integer","description":"Position in the request's records array"},"irs_utid":{"type":"string"},"irs_submission_id":{"type":"string"},"irs_record_id":{"type":"string"},"irs_unique_record_id":{"type":"string","description":"Prior accepted UniqueRecordId used (corrections), else empty"},"unique_record_id":{"type":"string","nullable":true,"description":"This transmission's UniqueRecordId; valid once IRS accepts it"}}},"FieldError":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"},"record_index":{"type":"integer"}}},"IrsError":{"type":"object","properties":{"record_index":{"type":"integer","nullable":true},"field":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"},"xpath":{"type":"string"}}},"ValidateRequest":{"type":"object","required":["records"],"properties":{"tax_year":{"type":"integer","example":2026},"state_filing":{"$ref":"#/components/schemas/StateFiling"},"records":{"type":"array","items":{"$ref":"#/components/schemas/Form1099RRecord"}},"parent_submission_id":{"type":"integer","description":"Price a free resend of a service-fault filing"},"transmission_type":{"type":"string","enum":["O","R"],"description":"O (default) validates new forms; R validates a replacement of replaces_submission_id (checks the payers against the rejected submission and prices it free)."},"replaces_submission_id":{"type":"integer","description":"With transmission_type R: the rejected (or partially accepted) submission being replaced."}}},"ValidateResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldError"}},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/FieldError"},"description":"Non-blocking notes, for example a form forwarded through CF/SF without the payer's state ID"},"state_filing":{"$ref":"#/components/schemas/StateFiling"},"cfsf_summary":{"$ref":"#/components/schemas/CfsfSummary"},"form_count":{"type":"integer"},"payer_count":{"type":"integer"},"amount_cents":{"type":"integer"},"amount_display":{"type":"string"},"quote":{"$ref":"#/components/schemas/Quote"},"fee_per_form_cents":{"type":"integer"},"tax_year":{"type":"integer"},"transmission_type":{"type":"string"},"replacement":{"allOf":[{"$ref":"#/components/schemas/ReplacementTarget"}],"nullable":true,"description":"With transmission_type R: whether replaces_submission_id can be replaced, how, and by when."},"state_direct_notes":{"type":"array","items":{"type":"string"},"description":"Plain-language notes such as \"Forwarded by the IRS, and Ohio also wants 2 form(s) filed directly. ...\""}}},"CreateSubmissionRequest":{"type":"object","required":["records","payer_authorization"],"properties":{"tax_year":{"type":"integer"},"email":{"type":"string","format":"email"},"payer_authorization":{"type":"object","required":["relationship","attest"],"description":"Recorded for each payer in the submission. attest=true confirms you are the payer or authorized by the payer to file its Forms 1099-R, can provide written authorization on request, and the information is true, correct, and complete.","properties":{"relationship":{"type":"string","enum":["self","tpa","cpa","actuary","software_partner","other"]},"attest":{"type":"boolean","enum":[true]}}},"transmission_type":{"type":"string","enum":["O","C","R"],"description":"O=Original, C=Correction, R=Replacement of a rejected submission (requires replaces_submission_id; free up to the rejected submission's form count)"},"replaces_submission_id":{"type":"integer","description":"With transmission_type R: the submission the IRS rejected or partially accepted. A rejected replacement is replaced again by naming that replacement; the IRS link to the earliest original is kept for you."},"prior_utid":{"type":"string","description":"Required for corrections when referencing prior transmission"},"state_filing":{"allOf":[{"$ref":"#/components/schemas/StateFiling"}],"description":"Locked on the submission; transmit uses it. 503 if the server isn't set up for CF/SF yet."},"records":{"type":"array","items":{"$ref":"#/components/schemas/Form1099RRecord"}},"parent_submission_id":{"type":"integer","description":"Correction or test-system resend of a filing Pension Resource marked as a service fault: this one is free. Ignored for replacements (use replaces_submission_id)."}}},"ReplacementTarget":{"type":"object","properties":{"eligible":{"type":"boolean"},"reason":{"type":"string","nullable":true,"description":"Why it can't be replaced: missing, not_found, status, correction (file a correction again), schema (file again as an original), environment, test, replaced (already has a replacement), no_receipt, unknown_submissions, unavailable"},"message":{"type":"string","nullable":true},"replaces_submission_id":{"type":"integer"},"mode":{"type":"string","enum":["transmission","submissions"],"description":"transmission: the whole submission was rejected, re-send every record. submissions: partially accepted, re-send only the rejected payers."},"rejected_payer_submission_ids":{"type":"array","items":{"type":"integer"},"description":"Positions (from 1) of the rejected payers, in the order payers appeared in the rejected submission"},"free_form_count":{"type":"integer"},"deadline":{"type":"string","format":"date","nullable":true,"description":"Accepted by the IRS by this date (60 days after the rejection), the forms count as filed on the original date"},"days_left":{"type":"integer","nullable":true},"late":{"type":"boolean"}}},"SubmissionReplacement":{"type":"object","properties":{"replaces_submission_id":{"type":"integer","nullable":true,"description":"Set on a replacement (transmission_type R)"},"replaced_by_submission_id":{"type":"integer","nullable":true,"description":"Set on a rejected submission once a replacement has been paid for or sent"},"mode":{"type":"string","nullable":true,"enum":["transmission","submissions",null]},"payer_results":{"type":"object","additionalProperties":{"type":"string"},"description":"IRS result per payer position (\"1\": \"Accepted\", \"2\": \"Rejected\"), from the acknowledgement"},"eligible":{"type":"boolean","description":"A rejected or partially accepted submission that can be replaced now"},"reason":{"type":"string","nullable":true},"deadline":{"type":"string","format":"date","nullable":true},"rejected_payer_submission_ids":{"type":"array","items":{"type":"integer"}}}},"Submission":{"type":"object","properties":{"submission_id":{"type":"integer"},"status":{"type":"string"},"tax_year":{"type":"integer"},"environment":{"type":"string"},"form_count":{"type":"integer"},"payer_count":{"type":"integer"},"amount_cents":{"type":"integer","description":"Amount charged (net)"},"utid":{"type":"string","nullable":true},"receipt_id":{"type":"string","nullable":true},"transmission_type":{"type":"string"},"replacement":{"$ref":"#/components/schemas/SubmissionReplacement"},"prior_utid":{"type":"string","nullable":true},"billing_paid":{"type":"boolean"},"state_filing":{"$ref":"#/components/schemas/StateFiling"},"cfsf_summary":{"allOf":[{"$ref":"#/components/schemas/CfsfSummary"}],"nullable":true},"gross_cents":{"type":"integer","description":"Price before credit/waiver"},"credit_cents":{"type":"integer","description":"Account credit applied"},"waived_cents":{"type":"integer","description":"Waiver applied (free replacement, or service-fault waiver)"},"parent_submission_id":{"type":"integer","nullable":true},"service_fault":{"type":"integer","enum":[0,1,2],"description":"0 none, 1 free resend available, 2 free resend used"},"state_direct_notes":{"type":"array","items":{"type":"string"},"description":"Plain-language notes such as \"Forwarded by the IRS, and Ohio also wants 2 form(s) filed directly. ...\""}}},"CreateSubmissionResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"submission":{"$ref":"#/components/schemas/Submission"},"billing_mode":{"type":"string","enum":["stripe","partner"]},"payment_required":{"type":"boolean","description":"false when credit or a waiver covers the price, or partner credits were debited"},"client_secret":{"type":"string","nullable":true},"payment_intent":{"type":"string","nullable":true},"quote":{"$ref":"#/components/schemas/Quote"}}},"SubmissionResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"submission":{"$ref":"#/components/schemas/Submission"}}},"PaymentIntentResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"client_secret":{"type":"string"},"payment_intent":{"type":"string"},"amount_cents":{"type":"integer"}}},"TransmitRequest":{"type":"object","required":["records"],"properties":{"records":{"type":"array","items":{"$ref":"#/components/schemas/Form1099RRecord"}},"transmission_type":{"type":"string","enum":["O","C","R"],"description":"Defaults to the submission's type. A replacement (R) is set when the submission is created and can't be chosen here."},"environment":{"type":"string","enum":["T","P"],"description":"T=ATS test when site is in test mode"},"payment_intent":{"type":"string","description":"Stripe PI id if payment just completed"}}},"TransmitResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"tracking_number":{"type":"string","description":"The IRS Transmission ID (UTID); quote it when contacting us or the IRS"},"confirmation_emailed":{"type":"boolean","description":"A confirmation with a PDF was emailed to the submission email or the account owner. Another is sent when the IRS posts its result."},"submission_id":{"type":"integer"},"utid":{"type":"string"},"receipt_id":{"type":"string","nullable":true},"form_count":{"type":"integer"},"environment":{"type":"string"},"transmission_type":{"type":"string"},"replaces_submission_id":{"type":"integer","nullable":true,"description":"Set when this transmission replaced a rejected submission"},"state_filing":{"$ref":"#/components/schemas/StateFiling"},"cfsf_summary":{"$ref":"#/components/schemas/CfsfSummary"},"record_ids":{"type":"array","items":{"$ref":"#/components/schemas/RecordIds"}},"state_direct_notes":{"type":"array","items":{"type":"string"},"description":"Plain-language notes such as \"Forwarded by the IRS, and Ohio also wants 2 form(s) filed directly. ...\""}}},"AcknowledgementResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"submission_id":{"type":"integer"},"status":{"type":"string"},"detail":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/IrsError"}}}},"ErrorsResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"submission_id":{"type":"integer"},"status":{"type":"string"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/IrsError"}}}},"CorrectionFeedbackResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"submission_id":{"type":"integer"},"status":{"type":"string"},"records":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Form1099RRecord"},{"type":"object","properties":{"record_index":{"type":"integer"},"_errors":{"type":"array","items":{"$ref":"#/components/schemas/IrsError"}}}}]}}}},"Error":{"type":"object","properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"string"},"parent_submission_id":{"type":"integer","nullable":true}}},"Quote":{"type":"object","description":"Price for the submission after waivers and account credit.","properties":{"gross_cents":{"type":"integer"},"waived_cents":{"type":"integer","description":"Free resend of a filing marked as a service fault"},"credit_cents":{"type":"integer","description":"Account credit applied"},"net_cents":{"type":"integer","description":"Amount charged"},"net_display":{"type":"string"},"credit_balance_cents":{"type":"integer"},"parent_irf_id":{"type":"integer","nullable":true},"waiver":{"type":"string","nullable":true,"description":"Why a resend is or isn't free"},"lines":{"type":"array","items":{"type":"string"},"description":"Human-readable adjustments"}}},"Draft":{"type":"object","properties":{"draft_id":{"type":"string"},"status":{"type":"string","enum":["open","filed","deleted","expired"]},"tax_year":{"type":"integer"},"form_count":{"type":"integer"},"payer_count":{"type":"integer"},"state_filing":{"$ref":"#/components/schemas/StateFiling"},"label":{"type":"string","nullable":true},"created_at":{"type":"string"},"expires_at":{"type":"string"},"opened_at":{"type":"string","nullable":true},"submission_id":{"type":"integer","nullable":true,"description":"Set once the owner filed it"}}},"CreateDraftRequest":{"type":"object","required":["records"],"properties":{"tax_year":{"type":"integer"},"state_filing":{"$ref":"#/components/schemas/StateFiling"},"label":{"type":"string","maxLength":120,"description":"Shown to the owner. No SSNs."},"records":{"type":"array","items":{"$ref":"#/components/schemas/Form1099RRecord"}}}},"CreateDraftResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"draft":{"$ref":"#/components/schemas/Draft"},"review_url":{"type":"string","format":"uri","description":"One-time link for the account owner. Shown only once; contains the decryption token."},"validation":{"type":"object","properties":{"ok":{"type":"boolean"},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldError"}},"warnings":{"type":"array","items":{"$ref":"#/components/schemas/FieldError"}},"amount_cents":{"type":"integer"},"amount_display":{"type":"string"},"cfsf_summary":{"$ref":"#/components/schemas/CfsfSummary"}}},"message":{"type":"string"}}},"FieldReference":{"type":"object","properties":{"tax_year":{"type":"integer"},"supported_tax_years":{"type":"array","items":{"type":"integer"}},"record_shape":{"type":"string"},"formats":{"type":"object","additionalProperties":{"type":"string"}},"rules":{"type":"array","items":{"type":"string"}},"fields":{"type":"object","additionalProperties":{"type":"object","properties":{"label":{"type":"string"},"level":{"type":"string","enum":["payer","recipient"]},"type":{"type":"string"},"required":{"type":"boolean"},"pattern":{"type":"string"},"rule":{"type":"string"}}}},"states":{"type":"array","items":{"type":"string"}},"distribution_codes":{"type":"object","additionalProperties":{"type":"string"}},"state_filing":{"type":"object"},"pricing":{"type":"object"},"example_record":{"$ref":"#/components/schemas/Form1099RRecord"},"workflow":{"type":"string"}}}}},"externalDocs":{"description":"Guide for AI tools","url":"https://pensionresource.website/llms.txt"}}