Citi · Schema

MessageRequest

BankingFinancial ServicesOpen BankingPaymentsTreasuryISO 20022Commercial CardsForeign ExchangeCustodyTrade FinanceCorporate BankingAPI Gateway

Properties

Name Type Description
message_type string Message Type 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 Confirma
message object
View JSON Schema on GitHub

JSON Schema

citi-message-request-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/citi/main/json-schema/citi-message-request-schema.json",
  "title": "MessageRequest",
  "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/Message-Request",
  "type": "object",
  "properties": {
    "message_type": {
      "type": "string",
      "description": "Message Type 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- RRFICS - Response to Request for Information Compliance",
      "enum": [
        "RFR",
        "RRFR",
        "PCR",
        "RPCR",
        "RFP",
        "RRFP",
        "RRFICS"
      ],
      "title": "message_type"
    },
    "message": {
      "oneOf": [
        {
          "$ref": "#/$defs/Final-Response-To-Request-For-Refund"
        },
        {
          "$ref": "#/$defs/Final-Response-To-Payment-Confirmation-Request"
        },
        {
          "$ref": "#/$defs/Response-To-Request-For-Payment"
        },
        {
          "$ref": "#/$defs/Outgoing-Request-For-Refund"
        },
        {
          "$ref": "#/$defs/Response-To-Request-For-Information-Compliance"
        }
      ]
    }
  },
  "required": [
    "message_type",
    "message"
  ],
  "$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-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.",
              "minLength": 1,
              "maxLength": 35,
              "title": "operator"
            }
          }
        }
      }
    },
    "Final-Response-To-Payment-Confirmation-Request": {
      "type": "object",
      "title": "FinalResponseToPaymentConfirmationRequest",
      "description": "Outgoing Response to Payment Confirmation Request",
      "properties": {
        "status": {
          "type": "object",
          "title": "status",
          "properties": {
            "date_time": {
              "type": "string",
              "format": "date-time",
              "description": "UTC (YYYY-MM-DDTHH:MM:SS.sssZ) date time",
              "title": "date_time"
            },
            "code": {
              "type": "string",
              "description": "ISO 20022 message status code",
              "enum": [
                "ACSC",
                "RJCT"
              ],
              "title": "code"
            },
            "description": {
              "type": "string",
              "description": "Status code description \n- ACSC - Accepted \n- RJCT - Rejected",
              "minLength": 1,
              "maxLength": 105,
              "title": "description"
            }
          },
          "required": [
            "date_time",
            "code",
            "description"
          ]
        },
        "reasons": {
          "type": "object",
          "title": "reasons",
          "properties": {
            "code": {
              "type": "string",
              "description": "Reason code (mandatory when status is rejected) \n- For US RPCR, client need to pass reason.code only AC02,AC03,AC04,AC06,AC11,AC13,AC14,AG01,AG03,AM02,AM04,AM09,AM12,AM13,AM14,NARR \n- For Thailand RPCR, client need to pass reason.code only AM09 or NARR \n- For SEPA RPCR, client need to pass reason.code only AM05,AC01,AC04,AC06,RR04,AG01,MS03,MS02",
              "enum": [
                "AC02",
                "AC03",
                "AC04",
                "AC06",
                "AC11",
                "AC13",
                "AC14",
                "AG01",
                "AG03",
                "AM02",
                "AM04",
                "AM09",
                "AM12",
                "AM13",
                "AM14",
                "NARR",
                "AM05",
                "AC01",
                "RR04",
                "MS02",
                "MS03"
              ],
              "title": "code"
            },
            "description": {
              "type": "string",
              "description": "Reason code description \n - AC02- Debtor account number invalid or missing \n - AC03- Creditor account number invalid or missing \n- AC04- Account number specified has been closed on the bank of account’s books \n- AC06- Account specified is blocked,prohibiting posting of transactions against it \n- AC11- Creditor account currency is invalid or missing \n- AC13- Debtor account type invalid \n- AC14- Creditor account type invalid \n- AG01- Transaction forbidden on this type of account (formerly NoAgreement) \n- AG03- Transaction type not supported / authorized on this account \n- AM02- Specific transaction/message amount is greater than allowed maximum \n- AM04- Amount of funds available to  cover specified message amount is insufficient \n- AM09- Amount received is not the  amount agreed or expected \n- AM12- Amount is invalid or missing \n- AM13- Transaction amount exceeds limits set by clearing system \n- AM14- Transaction amount exceeds limits agreed between bank and client \n- NARR- Put the description as per clearing guideline for NARR  (if reasons.code is NARR, reasons.decription is mandatory) \n- AM05-  Duplication \n- AC01-  Incorrect Account Number \n- RR04-  Regulatory Reason \n- MS03-  Not Specified Reason Agent Generated \n- MS02- Not Specified Reason Customer Generated",
              "minLength": 1,
              "maxLength": 105,
              "title": "description"
            }
          }
        }
      },
      "required": [
        "status"
      ]
    },
    "Final-Response-To-Request-For-Refund": {
      "type": "object",
      "title": "FinalResponseToRequestForRefund",
      "description": "Outgoing/Incoming Response to Request for Refund",
      "properties": {
        "case_id": {
          "type": "string",
          "description": "Case Id received from clearing",
          "minLength": 1,
          "maxLength": 35,
          "title": "case_id"
        },
        "decision_code": {
          "type": "string",
          "description": "Acceptance or Rejection of return of funds. Only the below 3 codes are applicable \n- IPAY - Acceptance to Return the payment \n- RJCR - Decline to Return the payment \n- PECR - Partially Executed Cancellation Return",
          "enum": [
            "ACDA",
            "ACNR",
            "ACVA",
            "CHRG",
            "CNCL",
            "CONF",
            "CVAA",
            "CWFW",
            "FTNA",
            "ICOV",
            "IDUP",
            "IPAY",
            "IPYI",
            "MCOV",
            "MODI",
            "MWFW",
            "PDCR",
            "PECR",
            "PURP",
            "RJCR",
            "RJNR",
            "RJVA",
            "SMTC",
            "SMTI",
            "UWFW",
            "BIAS",
            "IDNE",
            "IVCR",
            "INFO",
            "NINF",
            "PDNG"
          ],
          "title": "decision_code"
        },
        "reasons": {
          "type": "object",
          "title": "reasons",
          "properties": {
            "code": {
              "type": "string",
              "description": "Code of Transaction reasons \n- If decision_code = RJCR,reasons.code is mandatory for ResponseToRequest-For-Refund ",
              "enum": [
                "AC04",
                "ADAC",
                "AGNT",
                "AM04",
                "ARDT",
                "ARPL",
                "CUST",
                "LEGL",
                "NARR",
                "NOAS",
                "NOOR",
                "PTNA",
                "RQDA",
                "WSEQ",
                "IDMN",
                "ACLR",
                "AEXR",
                "ARFR",
                "ARJR",
                "PATE",
                "RR04",
                "RCAR",
                "RCNR",
                "RCPR",
                "URTP"
              ],
              "title": "code"
            },
            "description": {
              "type": "string",
              "description": "Reason code description (e.g., Debtor account is invalid.). \n- For reasons.code = NARR this field is mandatory",
              "minLength": 1,
              "maxLength": 105,
              "title": "description"
            }
          }
        },
        "method": {
          "type": "string",
          "description": "Method type \n- MPNS - for ACH payment \n- RTGS - for FedWire \n- RTNS - for CHIPS \n- RT1 - for SEPA IP payments",
          "readOnly": true,
          "enum": [
            "MPNS",
            "RTGS",
            "RTNS",
            "RT1"
          ],
          "title": "method"
        },
        "interbank_settlement_date": {
          "type": "string",
          "description": "YYYY-MM-DD Intended interbank settlement date",
          "format": "date",
          "readOnly": true,
          "title": "interbank_settlement_date"
        },
        "instructed_amount": {
          "type": "number",
          "description": "Instructed amount for partial acceptance of return request \n- Mandatory for ResponseToRequest-For-Refund with decision code as PECR.",
          "minimum": 0.01,
          "maximum": 1000000000000000,
          "title": "instructed_amount"
        },
        "instructed_currency": {
          "type": "string",
          "description": "Instructed currency for partial acceptance of return request \n- Mandatory for ResponseToRequest-For-Refund with decision code as PECR",
          "enum": [
            "USD",
            "EUR",
            "AUD",
            "ARS",
            "BRL",
            "HKD",
            "CNY"
          ],
          "title": "instructed_currency"
        },
        "instruction_id": {
          "writeOnly": true,
          "type": "string",
          "description": "Unique Instruction id on return payment initiation",
          "minLength": 1,
          "maxLength": 35,
          "title": "instruction_id"
        },
        "end_to_end_id": {
          "writeOnly": true,
          "type": "string",
          "description": "Unique end to end id on return payment initiation",
          "minLength": 1,
          "maxLength": 35,
          "title": "end_to_end_id"
        },
        "country": {
          "writeOnly": true,
          "description": "ISO 3166 Alpha-2 code for the non pay message country. \n- This field is optional for US \n- This field is mandatory for SEPA",
          "type": "string",
          "default": "US",
          "enum": [
            "US",
            "IE",
            "DE",
            "AT",
            "BE",
            "FI",
            "FR",
            "GR",
            "IT",
            "LU",
            "NL",
            "PT",
            "ES",
            "SK",
            "AU",
            "AR",
            "BR",
            "HK",
            "BG"
          ],
          "title": "country"
        },
        "network": {
          "type": "string",
          "readOnly": true,
          "enum": [
            "RTP",
            "FDN"
          ],
          "description": "Financial market infrastructure or clearing system (e.g., RTP Network in the United States) \n- RTP for TCH \n- FDN for FedNow",
          "title": "network"
        },
        "debtor": {
          "$ref": "#/$defs/Debtor-Refund"
        },
        "ultimate_debtor": {
          "$ref": "#/$defs/Ultimate-Debtor-Refund"
        },
        "status": {
          "type": "object",
          "title": "status",
          "readOnly": true,
          "properties": {
            "date_time": {
              "type": "string",
              "format": "date-time",
              "description": "UTC (ISO 8601 YYYY-MM-DDTHH:MM:SS.sssZ) \n- Date time, \n-, status change date time",
              "title": "date_time"
            },
            "code": {
              "type": "string",
              "description": "ISO 20022 message status code",
              "enum": [
                "RCVD",
                "RJCT",
                "PDNG"
              ],
              "title": "code"
            },
            "description": {
              "type": "string",
              "description": "Status code description \n- RJCT - Rejected \n- RCVD - Received \n -  PDNG - Pending",
              "minLength": 1,
              "maxLength": 256,
              "title": "description"
            },
            "reasons": {
   

# --- truncated at 32 KB (50 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/citi/refs/heads/main/json-schema/citi-message-request-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.
All 92 tools →

Call it yourself

curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/citi-message-request"
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.