Citi · Schema
FinalMessageResponse
BankingFinancial ServicesOpen BankingPaymentsTreasuryISO 20022Commercial CardsForeign ExchangeCustodyTrade FinanceCorporate BankingAPI Gateway
Properties
| Name | Type | Description |
|---|---|---|
| message_id | string | Message Identification |
| creation_date_time | string | UTC (ISO 8601 YYYY-MM-DDTHH:MM:SS.sssZ) - Date time when a message was created |
| message_type | string | Message Type as provided by the customer - RFR - Request for Refund (camt.056) - RRFR - Response to Request for Refund(camt.029) - PCR - Payment Confirmation Request - RPCR - Response to Payment Confi |
| original_payment | object | |
| message | object |
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/citi/main/json-schema/citi-final-message-response-schema.json",
"title": "FinalMessageResponse",
"x-generated": "2026-10-12",
"x-method": "derived",
"x-generator": "derive-json-schema.py",
"x-source": "openapi/citi-non-payment-messages-api-openapi.yml#/components/schemas/Final-Message-Response",
"type": "object",
"properties": {
"message_id": {
"type": "string",
"description": "Message Identification",
"readOnly": true,
"maxLength": 35,
"title": "message_id"
},
"creation_date_time": {
"type": "string",
"format": "date-time",
"description": "UTC (ISO 8601 YYYY-MM-DDTHH:MM:SS.sssZ) \n- Date time when a message was created",
"readOnly": true,
"title": "creation_date_time"
},
"message_type": {
"type": "string",
"description": "Message Type as provided by the customer \n- RFR - Request for Refund (camt.056) \n- RRFR - Response to Request for Refund(camt.029) \n- PCR - Payment Confirmation Request \n- RPCR - Response to Payment Confirmation Request \n- RFP - Request for Payment (pain.013) \n- RRFP - Response to Request for Payment (pain.014) \n- RFICS - Request for Information Compliance \n- RRFICS - Response to Request for Information Compliance",
"enum": [
"RFR",
"RRFR",
"PCR",
"RPCR",
"RFP",
"RRFP",
"RFICS",
"RRFICS"
],
"title": "message_type"
},
"original_payment": {
"type": "object",
"title": "OriginalPayment",
"readOnly": true,
"properties": {
"message_id": {
"type": "string",
"description": "Message Id of original payment",
"maxLength": 35,
"title": "message_id"
},
"creation_date_time": {
"type": "string",
"format": "date-time",
"description": "UTC (ISO 8601 YYYY-MM-DDTHH:MM:SS.sssZ) \n- Date time when a original payment was created",
"title": "creation_date_time"
},
"instruction_id": {
"type": "string",
"description": "Instruction ID of Original Payment",
"minLength": 1,
"maxLength": 35,
"title": "instruction_id"
},
"end_to_end_id": {
"type": "string",
"description": "End to End ID of Original Payment",
"minLength": 1,
"maxLength": 35,
"title": "end_to_end_id"
},
"transaction_id": {
"type": "string",
"description": "Transaction ID of Original Payment",
"minLength": 1,
"maxLength": 35,
"title": "transaction_id"
},
"uetr": {
"type": "string",
"description": "UETR of Original payment",
"pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$",
"title": "uetr"
},
"clearing_reference": {
"type": "string",
"description": "Clearing reference of Original Payment",
"minLength": 1,
"maxLength": 35,
"title": "clearing_reference"
},
"instructed_amount": {
"type": "number",
"description": "Instructed amount of Original Payment",
"minimum": 0.01,
"maximum": 1000000000000000,
"title": "instructed_amount"
},
"instructed_currency": {
"type": "string",
"description": "Instructed currency of Original Payment",
"enum": [
"USD",
"EUR",
"GBP",
"AUD",
"INR",
"ARS",
"BRL",
"HUF",
"HKD",
"CNY"
],
"title": "instructed_currency"
},
"value_date": {
"type": "string",
"format": "date",
"description": "Date in local time zone (e.g., EST for a United States RTP network transaction) when Citi's transaction processing application starts processing a transaction.Format is YYYY-MM-DD",
"title": "value_date"
},
"message_name_identification": {
"type": "string",
"description": "Clearing specific original message name",
"minLength": 1,
"maxLength": 35,
"title": "message_name_identification"
},
"requested_execution_date": {
"type": "string",
"format": "date",
"description": "Requested Execution Date of Original Request for Payment",
"title": "requested_execution_date"
},
"requested_execution_date_time": {
"type": "string",
"format": "date-time",
"description": "Requested Execution Date/ Time of Original Request for Payment",
"title": "requested_execution_date_time"
},
"expiry_date": {
"type": "string",
"format": "date",
"description": "Expiry Date of Original Request for Payment",
"title": "expiry_date"
},
"expiry_date_time": {
"type": "string",
"format": "date-time",
"description": "Expiry Date/Time of Original Request for Payment",
"title": "expiry_date_time"
},
"payment_information_id": {
"type": "string",
"maxLength": 35,
"minLength": 1,
"description": "Payment Information ID Original Request for Payment",
"title": "payment_information_id"
},
"category_purpose": {
"type": "string",
"maxLength": 128,
"minLength": 1,
"description": "Category purpose of original payment",
"title": "category_purpose"
},
"unstructured_remittance_info": {
"type": "array",
"description": "Unstructured remitance information of original payment",
"items": {
"$ref": "#/$defs/Unstructured"
},
"title": "unstructured_remittance_info"
},
"structured_remittance_info": {
"type": "object",
"title": "structured_remittance_info",
"properties": {
"creditor_reference_information_code": {
"maxLength": 35,
"minLength": 1,
"type": "string",
"description": "Structured Creditor Reference Information Code of original payment",
"title": "creditor_reference_information_code"
},
"creditor_reference_issuer": {
"maxLength": 35,
"minLength": 1,
"type": "string",
"description": "Structured Creditor Reference Issuer \n - For TH Instant payment transaction.structured_remittance_info.creditor_reference_issuer is not applicable \n - For US Instant payment transaction.structured_remittance_info.creditor_reference_issuer field is not applicable \n - For IN IMPS transaction.structured_remittance_info.creditor_reference_issuer is not applicable \n - For UK FPS Instant payment transaction.structured_remittance_info.creditor_reference_issuer is not applicable \n - For JP Instant payment transaction.structured_remittance_info.creditor_reference_issuer is not applicable \n - For IN UPI transaction.structured_remittance_info.creditor_reference_issuer is not applicable \n - For US WIRE,transaction.structured_remittance_info.creditor_reference_issuer field is not applicable \n - For US ACH CCD/PPD/IAT payment,transaction.structured_remittance_info.creditor_reference_issuer field is not applicable \n - For SEPA IDP transaction.structured_remittance_info.creditor_reference_issuer field is optional with max length 35 \n - For Japan Instant payment transaction.structured_remittance_info.creditor_reference_issuer field is not applicable \n - For SEPA, transaction.structured_remittance_info.creditor_reference_issuer field is optional field and allowed maxLength is 35",
"title": "creditor_reference_issuer"
},
"creditor_reference": {
"maxLength": 35,
"minLength": 1,
"type": "string",
"description": "Structured Creditor Reference of original payment",
"title": "creditor_reference"
}
}
},
"purpose": {
"type": "string",
"minLength": 1,
"maxLength": 5,
"description": "Purpose of a transaction of original payment\n- CASH for cash management \n- CNFL for confidential \n- COST for payment for business expenses \n- GDDS for payment related to purchase or sale of goods \n- GDSV for payment related to purchase or sale of goods and services \n- GP2P for person-to-person payment \n- OTHR for other, if your payment doesn't fit any of the specific purpose codes \n- PAYR for payroll payment \n- RCPT for payment of a receipt \n- SALA for salary payment \n- SCVE for payment related to purchase or sale of services \n- SUPP for supplier payment \n- TREA for treasury payment \n- REFU for refund payment \n- CLPO for Claim Payouts \n- LODI for Loan Disbursals \n- TIPO for Tips Payout \n- GIEO for Gig economy \n- VEPO for Vendor Payouts \n- INPO for Incentive Payouts \n- ISPO for Insurance Payouts \n- MPPO for Merchant/Marketplace Payouts \n- TXPO for Tax Payments \n- RDPO for Rider payout",
"title": "purpose"
},
"method": {
"type": "object",
"title": "OriginalMethod",
"properties": {
"network": {
"type": "string",
"enum": [
"RTP",
"FDN",
"AUNPP"
],
"description": "Financial market infrastructure or clearing system (e.g., RTP Network in the United States) of original payment",
"title": "network"
}
}
},
"debtor": {
"$ref": "#/$defs/Original-Debtor"
},
"creditor": {
"$ref": "#/$defs/Original-Creditor"
},
"ultimate_debtor": {
"$ref": "#/$defs/Original-Ultimate-Debtor"
},
"ultimate_creditor": {
"$ref": "#/$defs/Original-Ultimate-Creditor"
}
}
},
"message": {
"oneOf": [
{
"$ref": "#/$defs/Request-For-Refund"
},
{
"$ref": "#/$defs/Final-Response-To-Request-For-Refund"
},
{
"$ref": "#/$defs/Payment-Confirmation-Request"
},
{
"$ref": "#/$defs/Response-To-Payment-Confirmation-Request"
},
{
"$ref": "#/$defs/Request-For-Payment"
},
{
"$ref": "#/$defs/Response-To-Request-For-Payment"
},
{
"$ref": "#/$defs/Final-Request-For-Information-Compliance"
},
{
"$ref": "#/$defs/Response-To-Request-For-Information-Compliance"
}
]
}
},
"required": [
"message_id",
"creation_date_time",
"message_type"
],
"$defs": {
"Address": {
"type": "string",
"maxLength": 70,
"minLength": 1,
"maxItems": 7,
"description": "Address",
"title": "Address"
},
"Debtor-Payment": {
"type": "object",
"title": "DebtorPayment",
"writeOnly": true,
"properties": {
"name": {
"minLength": 1,
"maxLength": 140,
"type": "string",
"description": "Name of Debtor that may be passed for payment initiation",
"title": "name"
},
"street_name": {
"minLength": 1,
"maxLength": 70,
"type": "string",
"description": "Street Name of Debtor that may be passed for payment initiation",
"title": "street_name"
},
"building_number": {
"minLength": 1,
"maxLength": 16,
"type": "string",
"description": "Building number of Debtor that may be passed for payment initiation",
"title": "building_number"
},
"postal_code": {
"minLength": 1,
"maxLength": 16,
"type": "string",
"description": "Postal code of Debtor that may be passed for payment initiation",
"title": "postal_code"
},
"city": {
"minLength": 1,
"maxLength": 35,
"type": "string",
"description": "City of Debtor that may be passed for payment initiation",
"title": "city"
},
"state": {
"minLength": 1,
"maxLength": 35,
"type": "string",
"description": "State of Debtor that may be passed for payment initiation",
"title": "state"
},
"country": {
"type": "string",
"description": "Country of Debtor that may be passed for payment initiation",
"pattern": "^[A-Z]{2,2}$",
"title": "country"
},
"address_lines": {
"type": "array",
"minItems": 1,
"maxItems": 7,
"description": "Debtor Address lines which is array of 7 lines and each line has maximum 70 characters which may be passed for payment initiation",
"items": {
"$ref": "#/$defs/Address"
},
"title": "address_lines"
}
}
},
"Debtor-Refund": {
"type": "object",
"title": "DebtorRefund",
"properties": {
"name": {
"minLength": 1,
"maxLength": 140,
"type": "string",
"description": "Name of Debtor to be passed for Refund payment \n- For United States debtor.name field is mandatory for decision code IPAY and PECR \n- For Thailand debtor.name field is not applicable \n- For Brazil debtor.name field is not applicable \n- For SEPA debtor.name field is not applicable",
"title": "name"
},
"street_name": {
"minLength": 1,
"maxLength": 70,
"type": "string",
"description": "Street Name of Debtor to be passed for Refund payment \n- For United States debtor.street_name field is optional \n- For Thailand debtor.street_name field is not applicable \n- For Brazil debtor.street_name field is not applicable \n- For SEPA debtor.street_name field is not applicable",
"title": "street_name"
},
"building_number": {
"minLength": 1,
"maxLength": 16,
"type": "string",
"description": "Building number of Debtor to be passed for Refund payment \n- For United States debtor.building_number field is optional \n- For Thailand debtor.building_number field is not applicable \n- For Brazil debtor.building_number field is not applicable \n- For SEPA debtor.building_number field is not applicable",
"title": "building_number"
},
"postal_code": {
"minLength": 1,
"maxLength": 16,
"type": "string",
"description": "Postal code of Debtor to be passed for Refund payment \n- For United States debtor.postal_code field is optional \n- For Thailand debtor.postal_code field is not applicable \n- For Brazil debtor.postal_code field is not applicable \n- For SEPA debtor.postal_code field is not applicable",
"title": "postal_code"
},
"city": {
"minLength": 1,
"maxLength": 35,
"type": "string",
"description": "City of Debtor to be passed for Refund payment \n- For United States debtor.city field is optional \n- For Thailand debtor.city field is not applicable \n- For Brazil debtor.city field is not applicable \n- For SEPA debtor.city field is not applicable",
"title": "city"
},
"state": {
"minLength": 1,
"maxLength": 35,
"type": "string",
"description": "State of Debtor to be passed for Refund payment \n- For United States debtor.state field is optional \n- For Thailand debtor.state field is not applicable \n- For Brazil debtor.state field is not applicable \n- For SEPA debtor.state field is not applicable",
"title": "state"
},
"country": {
"type": "string",
"description": "Country of Debtor to be passed for Refund payment \n- For United States debtor.country field is optional \n- For Thailand debtor.country field is not applicable \n- For Brazil debtor.country field is not applicable \n- For SEPA debtor.country field is not applicable",
"pattern": "^[A-Z]{2,2}$",
"title": "country"
},
"address_lines": {
"type": "array",
"minItems": 1,
"maxItems": 7,
"description": "Debtor Address lines which is array of 7 lines and each line has maximum 70 characters which is to be passed for Refund payment \n- For United States debtor.address_lines field is optional \n- For Thailand debtor.address_lines field is not applicable \n- For Brazil debtor.address_lines field is not applicable \n- For SEPA debtor.address_lines field is not applicable",
"items": {
"$ref": "#/$defs/Address"
},
"title": "address_lines"
}
}
},
"Field-level-Requests-For-RFICS": {
"type": "object",
"description": "“FieldlevelRequestsForRFICS”",
"title": "Field-level-Requests-For-RFICS",
"properties": {
"field_id": {
"type": "string",
"description": "Field ID.",
"minLength": 1,
"maxLength": 16,
"title": "field_id"
},
"field_name": {
"type": "string",
"description": "Field name. ",
"minLength": 1,
"maxLength": 70,
"title": "field_name"
},
"field_value": {
"type": "string",
"description": "Field value. ",
"minLength": 1,
"maxLength": 70,
"title": "field_value"
},
"input_type": {
"type": "string",
"description": "The Input type or template to provide the response against the field. It will be one the following - individual / entity / aircraft / vessel / unknown. \n If requested input type is unknown, populate fields from any of the other 4 input types in the response.",
"minLength": 1,
"maxLength": 16,
"title": "input_type"
}
},
"required": [
"field_id",
"field_name",
"field_value",
"input_type"
]
},
"Field-level-Responses-For-RRFICS": {
"type": "object",
"description": "“FieldlevelResponsesForRRFICS”",
"title": "Field-level-Responses-For-RRFICS",
"properties": {
"field_id": {
"type": "string",
"description": "Field ID.",
"minLength": 1,
"maxLength": 16,
"title": "field_id"
},
"field_name": {
"type": "string",
"description": "Field name.",
"minLength": 1,
"maxLength": 70,
"title": "field_name"
},
"field_value": {
"type": "string",
"description": "Field value.",
"minLength": 1,
"maxLength": 70,
"title": "field_value"
},
"individual": {
"type": "object",
"description": "Input type selected as Individual. \n When individual is selected any one of the fields displayed under individual object are mandatory",
"title": "individual",
"properties": {
"name": {
"type": "string",
"description": "Name of individual.\n If selected input type = individual, at least 1 field from individual object must be provided.",
"minLength": 1,
"maxLength": 140,
"title": "name"
},
"street_name": {
"type": "string",
"description": "Street Name of individual. \n If selected input type = individual, at least 1 field from individual object must be provided.",
"minLength": 1,
"maxLength": 70,
"title": "street_name"
},
"building_number": {
"type": "string",
"description": "Building Number of individual. \n If selected input type = individual, at least 1 field from individual object must be provided.",
"minLength": 1,
"maxLength": 16,
"title": "building_number"
},
"postal_code": {
"type": "string",
"description": "Postal Code of individual. \n If selected input type = individual, at least 1 field from individual object must be provided.",
"minLength": 1,
"maxLength": 16,
"title": "postal_code"
},
"city": {
"type": "string",
"description": "City of individual. \n If selected input type = individual, at least 1 field from individual object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "city"
},
"state": {
"type": "string",
"description": "State of individual. \n If selected input type = individual, at least 1 field from individual object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "state"
},
"country": {
"type": "string",
"description": "Country of individual. \n If selected input type = individual, at least 1 field from individual object must be provided.",
"minLength": 1,
"maxLength": 2,
"title": "country"
},
"birth_date": {
"type": "string",
"format": "date",
"description": "Birth Date of individual \n Format is YYYY-MM-DD. \n If selected input type = individual, at least 1 field from individual object must be provided.",
"title": "birth_date"
},
"city_of_birth": {
"type": "string",
"description": "City Of Birth of individual. \n If selected input type = individual, at least 1 field from individual object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "city_of_birth"
},
"country_of_birth": {
"type": "string",
"description": "Country Of Birth of individual. \n If selected input type = individual, at least 1 field from individual object must be provided.",
"minLength": 1,
"maxLength": 2,
"title": "country_of_birth"
},
"nationality": {
"type": "string",
"description": "Nationality of individual. \n If selected input type = individual, at least 1 field from individual object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "nationality"
},
"occupation": {
"type": "string",
"description": "Occupation of individual. \n If selected input type = individual, at least 1 field from individual object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "occupation"
},
"country_of_residence": {
"type": "string",
"description": "Country of Residence of individual. \n If selected input type = individual, at least 1 field from individual object must be provided.",
"minLength": 1,
"maxLength": 2,
"title": "country_of_residence"
}
}
},
"entity": {
"type": "object",
"description": "Input type selected as Entity. When Entity is selected any one of the fields displayed under entity object are mandatory",
"title": "entity",
"properties": {
"name": {
"type": "string",
"description": "Name of Entity. \n If selected input type = entity, at least 1 field from entity object must be provided.",
"minLength": 1,
"maxLength": 140,
"title": "name"
},
"street_name": {
"type": "string",
"description": "Street Name of Entity. \n If selected input type = entity, at least 1 field from entity object must be provided.",
"minLength": 1,
"maxLength": 70,
"title": "street_name"
},
"building_number": {
"type": "string",
"description": "Building Number of Entity. \n If selected input type = entity, at least 1 field from entity object must be provided.",
"minLength": 1,
"maxLength": 16,
"title": "building_number"
},
"postal_code": {
"type": "string",
"description": "Postal Code of Entity. \n If selected input type = entity, at least 1 field from entity object must be provided.",
"minLength": 1,
"maxLength": 16,
"title": "postal_code"
},
"city": {
"type": "string",
"description": "City of Entity. \n If selected input type = entity, at least 1 field from entity object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "city"
},
"state": {
"type": "string",
"description": "State of Entity. \n If selected input type = entity, at least 1 field from entity object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "state"
},
"country": {
"type": "string",
"description": "Country of Entity. \n If selected input type = entity, at least 1 field from entity object must be provided.",
"minLength": 1,
"maxLength": 2,
"title": "country"
},
"line_of_business": {
"type": "string",
"description": "Line of business of Entity. \n If selected input type = entity, at least 1 field from entity object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "line_of_business"
},
"ownership_details": {
"type": "string",
"description": "Ownership Details of entity. \n If selected input type = entity, at least 1 field from entity object must be provided.",
"minLength": 1,
"maxLength": 560,
"title": "ownership_details"
},
"global_presence": {
"type": "string",
"description": "Global Presence of entity. \n If selected input type = entity, at least 1 field from entity object must be provided.",
"minLength": 1,
"maxLength": 140,
"title": "global_presence"
},
"website": {
"type": "string",
"description": "Website of entity. \n If selected input type = entity, at least 1 field from entity object must be provided.",
"minLength": 1,
"maxLength": 140,
"title": "website"
},
"registration_number": {
"type": "string",
"description": "Registration Number of entity. \n If selected input type = entity, at least 1 field from entity object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "registration_number"
},
"country_of_incorporation": {
"type": "string",
"description": "Country of incorporation of entity. \n If selected input type = entity, at least 1 field from entity object must be provided.",
"minLength": 1,
"maxLength": 2,
"title": "country_of_incorporation"
}
}
},
"vessel": {
"type": "object",
"description": "Input type selected as vessel. When vessel is selected any one of the fields displayed under vessel object are mandatory",
"title": "vessel",
"properties": {
"name": {
"type": "string",
"description": "Name of vessel. \n If selected input type = vessel, at least 1 field from vessel object must be provided.",
"minLength": 1,
"maxLength": 140,
"title": "name"
},
"flag": {
"type": "string",
"description": "Flag of vessel. \n If selected input type = vessel, at least 1 field from vessel object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "flag"
},
"ownership_details": {
"type": "string",
"description": "Ownership Details of vessel. \n If selected input type = vessel, at least 1 field from vessel object must be provided.",
"minLength": 1,
"maxLength": 560,
"title": "ownership_details"
},
"imo_number": {
"type": "string",
"description": "Imo Number of vessel. \n If selected input type = vessel, at least 1 field from vessel object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "imo_number"
},
"gross_registered_tonnage": {
"type": "string",
"description": "Gross registered tonnage of vessel. \n If selected input type = vessel, at least 1 field from vessel object must be provided.",
"minLength": 1,
"maxLength": 10,
"title": "gross_registered_tonnage"
},
"vessel_type": {
"type": "string",
"description": "Type of vessel. \n If selected input type = vessel, at least 1 field from vessel object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "vessel_type"
}
}
},
"aircraft": {
"type": "object",
"description": "Input type selected as aircraft. When aircraft is selected any one of the fields displayed under aircraft object are mandatory",
"title": "aircraft",
"properties": {
"call_sign": {
"type": "string",
"description": "Call Sign of aircraft. \n If selected input type = aircraft, at least 1 field from aircraft object must be provided.",
"minLength": 1,
"maxLength": 140,
"title": "call_sign"
},
"flag": {
"type": "string",
"description": "Flag of aircraft. \n If selected input type = aircraft, at least 1 field from aircraft object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "flag"
},
"ownership_details": {
"type": "string",
"description": "Ownership Details of aircraft. \n If selected input type = aircraft, at least 1 field from aircraft object must be provided.",
"minLength": 1,
"maxLength": 560,
"title": "ownership_details"
},
"msn_number": {
"type": "string",
"description": "Msn Number of aircraft. \n If selected input type = aircraft, at least 1 field from aircraft object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "msn_number"
},
"model": {
"type": "string",
"description": "Model of aircraft. \n If selected input type = aircraft, at least 1 field from aircraft object must be provided.",
"minLength": 1,
"maxLength": 35,
"title": "model"
},
"operator": {
"type": "string",
"description": "Operator of aircraft. \n If selected input type = aircraft, at least 1 field from aircraft object must be provided.",
"mi
# --- truncated at 32 KB (131 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/citi/refs/heads/main/json-schema/citi-final-message-response-schema.json
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/citi-final-message-response"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.