Internet-Draft JSContact Profile for RPP July 2026
Wullink & Kowalik Expires 7 January 2027 [Page]
Workgroup:
Network Working Group
Internet-Draft:
draft-wullink-rpp-jscontact-profile-01
Published:
Intended Status:
Standards Track
Expires:
Authors:
M. Wullink
SIDN Labs
P. Kowalik
DENIC

JSContact Profile for RESTful Provisioning Protocol (RPP)

Abstract

This document defines a JSContact usage profile, conforming to the rules described in [I-D.ietf-calext-jscontact-profiles], for the RESTful Provisioning Protocol (RPP). The JSContact Profile for RPP specifies how the JSContact format defined in [RFC9982] can be used as a standardized representation of contact information within RPP operations, enabling interoperability and consistency across RPP implementations that manage contact data.

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on 7 January 2027.

Table of Contents

1. Introduction

JSContact [RFC9982] is a flexible, JSON-based format for representing contact information. Its flexibility allows the same data to be expressed in multiple valid ways, which can hinder interoperability in a provisioning context where data must be stored and interpreted consistently.

This document defines a JSContact usage profile for the RESTful Provisioning Protocol (RPP), restricting the set of JSContact constructs that RPP clients and servers are required to support when provisioning contact information.

1.1. Relationship to the RDAP JSContact Profile

The Registration Data Access Protocol (RDAP) [RFC9083] provides read-only access to registration data managed by RPP. Both protocols use JSContact for contact representation, but with profiles suited to their respective roles.

The RDAP JSContact profile [I-D.ietf-regext-rdap-jscontact] defines the constructs used when serving registration data to read-only consumers. The RPP profile, defined in this document, is a subset of these constructs. All JSContact constructs permitted by the RPP profile can be used for RDAP.

The converse does not hold. RDAP supports additional JSContact constructs that are useful in the read-only context of RDAP responses but that may hinder interoperability. These constructs are not present in RPP requests and responses.

2. Terminology

In this document, the following terminology is used.

RESTful Provisioning Protocol or RPP - The protocol described in this document.

URL - A Uniform Resource Locator as defined in [RFC3986].

RPP client - An HTTP user agent performing an RPP request.

RPP server - An HTTP server responsible for processing requests and returning results in any supported media type.

3. Conventions Used in This Document

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT","SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119].

4. Using JSContact in RPP

4.1. JSContact Profile for RPP

Since JSContact is a generalized representation of contact data, many of its capabilities are not optimized for interoperable use in RPP payloads. This document therefore defines a usage profile for JSContact that simplifies implementation for both RPP clients and RPP servers.

The JSContact profile for RPP is compliant with the rules described in [I-D.ietf-calext-jscontact-profiles]. The profile properties are formally listed in Section 4.1.12. All types mentioned in this section refer to the JSContact specification [RFC9982].

4.1.1. Version

The Card "version" member value MUST be "2.0".

4.1.2. Kind

The Card "kind" member value MUST be "individual" (default) or "org" to represent an individual or an organization, respectively.

4.1.3. Language

The Card "language" member SHOULD be set when localizations are specified (i.e., when the "localizations" member is present and non-null).

4.1.4. Name

The Card "name" member MUST include only the "full" member and MUST NOT include the "components" member.

4.1.5. Organizations

The Organization type MUST include only the "org" member.

4.1.6. Addresses

The Address type MUST only use the "components" member.

The AddressComponent MUST include only the "kind" and "value" members. The "kind" member value MUST only use "name", "locality", "region", or "postcode".

When both an internationalized and a localized version of an address are used, the localized version MUST be placed in the localizations map keyed by an appropriate [BCP47] language tag.

4.1.7. Emails

The EmailAddress type MUST include only the "address" member.

4.1.8. Phones

The Phone type MUST include the "number" member and MAY include the "features" member. When the "features" member is present, its values MUST be "voice" or "fax". When the "features" member is absent, the phone number is assumed to be a voice number.

4.1.10. Map Keys

A JSContact map key MUST comply with the Id type definition in [RFC9553]. RPP implementations MUST use the following predefined keys:

  • "org" in the "organizations" map for a single preferred organization.
  • "addr" in the "addresses" map for a single preferred postal address.
  • "email" in the "emails" map for the preferred email address.
  • "voice" in the "phones" map for the preferred voice number.
  • "fax" in the "phones" map for the preferred fax number.
  • "url" in the "links" map for a preferred contact URL; the "kind" member of the Link object MUST NOT be set.
  • "contact-uri" in the "links" map for a contact URI; the "kind" member of the Link object MUST be set to "contact".

When internationalized and localized versions of an organization, postal address, or email exist, the internationalized version MUST be included under the predefined map key, while the localized version MUST be placed in the "localizations" map as described in Section 4.1.11.

4.1.11. Localizations

If present, localized variants of name, organization, postal address, and email MUST be added to the "localizations" map. RPP implementations MUST expand all localizations, meaning a nested PatchObject key of the form "{key1}/{key2}/.../{keyN}" MUST NOT be used.

The number of provided localizations MUST NOT exceed the number of languages supported by the RPP server. The language of each localization MUST be indicated by a [BCP47] language tag as the key in the "localizations" map.

The following example of a Card includes a localized version of the postal address:

{
  "@type": "Card",
  "version": "2.0",
  "language": "en",
  "name": {
    "full": "Joe User"
  },
  "organizations": {
    "org": { "name": "Example Org" }
  },
  "addresses": {
    "addr": {
      "components": [
        { "kind": "name",     "value": "Main Street 1" },
        { "kind": "locality", "value": "Ludwigshafen am Rhein" },
        { "kind": "region",   "value": "Rhineland-Palatinate" },
        { "kind": "postcode", "value": "67067" }
      ],
      "countryCode": "DE"
    }
  },
  "localizations": {
    "de": {
      "addresses": {
        "addr": {
          "components": [
            { "kind": "name",     "value": "Hauptstraße 1" },
            { "kind": "locality", "value": "Ludwigshafen am Rhein" },
            { "kind": "region",   "value": "Rheinland-Pfalz" },
            { "kind": "postcode", "value": "67067" }
          ],
          "countryCode": "DE"
        }
      }
    }
  }
}

Figure 1: Example of handling localizations in JSContact

4.1.12. Profile Properties

The properties of the JSContact profile for RPP registered in the JSContact Profile registry as described in Section 5.1 are:

| Property | Context | Restricted | Restricted Enum |

Table 1
Attributes Values
language Card
kind Card individual, org
name Card
full Name mandatory
organizations Card
name Organization
addresses Card
full Address
countryCode Address
components Address
kind AddressComponent name, locality, region, postcode
value AddressComponent
emails Card
address EmailAddress
phones Card
features Phone voice, fax
number Phone
links Card
kind Link contact
uri Link
localizations Card yes

Client validation MUST return an error if any JSContact properties other than those listed above are present.

5. IANA Considerations

5.1. JSContact Profile Registry

IANA is requested to register the following entry in the "JSContact Profile" registry [I-D.ietf-calext-jscontact-profiles]:

Name: rpp Profile Version: 1.0 Reference: This document

TODO

6. Internationalization Considerations

TODO

7. Security Considerations

TODO

8. Change History

8.1. Version 00 to 01

  • Fixed duplicate text (Issue #14)

9. Normative References

[BCP47]
Best Current Practice 47, <https://www.rfc-editor.org/info/bcp47>.
At the time of writing, this BCP comprises the following:
Phillips, A., Ed. and M. Davis, Ed., "Matching of Language Tags", BCP 47, RFC 4647, DOI 10.17487/RFC4647, , <https://www.rfc-editor.org/info/rfc4647>.
Phillips, A., Ed. and M. Davis, Ed., "Tags for Identifying Languages", BCP 47, RFC 5646, DOI 10.17487/RFC5646, , <https://www.rfc-editor.org/info/rfc5646>.
[I-D.ietf-calext-jscontact-profiles]
Stepanek, R. and M. Loffredo, "Protocol-Specific Profiles for JSContact", Work in Progress, Internet-Draft, draft-ietf-calext-jscontact-profiles-14, , <https://datatracker.ietf.org/doc/html/draft-ietf-calext-jscontact-profiles-14>.
[I-D.ietf-regext-rdap-jscontact]
Loffredo, M. and G. Brown, "Using JSContact in Registration Data Access Protocol (RDAP) JSON Responses", Work in Progress, Internet-Draft, draft-ietf-regext-rdap-jscontact-25, , <https://datatracker.ietf.org/doc/html/draft-ietf-regext-rdap-jscontact-25>.
[RFC2119]
Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, , <https://www.rfc-editor.org/info/rfc2119>.
[RFC3986]
Berners-Lee, T., Fielding, R., and L. Masinter, "Uniform Resource Identifier (URI): Generic Syntax", STD 66, RFC 3986, DOI 10.17487/RFC3986, , <https://www.rfc-editor.org/info/rfc3986>.
[RFC9083]
Hollenbeck, S. and A. Newton, "JSON Responses for the Registration Data Access Protocol (RDAP)", STD 95, RFC 9083, DOI 10.17487/RFC9083, , <https://www.rfc-editor.org/info/rfc9083>.
[RFC9553]
Stepanek, R. and M. Loffredo, "JSContact: A JSON Representation of Contact Data", RFC 9553, DOI 10.17487/RFC9553, , <https://www.rfc-editor.org/info/rfc9553>.
[RFC9982]
Stepanek, R., "JSContact Version 2.0: A JSON Representation of Contact Data", RFC 9982, DOI 10.17487/RFC9982, , <https://www.rfc-editor.org/info/rfc9982>.

Acknowledgements

TODO

Authors' Addresses

Maarten Wullink
SIDN Labs
Pawel Kowalik
DENIC