{
  "version":"2.0",
  "metadata":{
    "apiVersion":"2020-07-01",
    "endpointPrefix":"featurestore-runtime.sagemaker",
    "jsonVersion":"1.1",
    "protocol":"rest-json",
    "serviceFullName":"Amazon SageMaker Feature Store Runtime",
    "serviceId":"SageMaker FeatureStore Runtime",
    "signatureVersion":"v4",
    "signingName":"sagemaker",
    "uid":"sagemaker-featurestore-runtime-2020-07-01"
  },
  "operations":{
    "BatchGetRecord":{
      "name":"BatchGetRecord",
      "http":{
        "method":"POST",
        "requestUri":"/BatchGetRecord"
      },
      "input":{"shape":"BatchGetRecordRequest"},
      "output":{"shape":"BatchGetRecordResponse"},
      "errors":[
        {"shape":"ValidationError"},
        {"shape":"InternalFailure"},
        {"shape":"ServiceUnavailable"},
        {"shape":"AccessForbidden"}
      ],
      "documentation":"<p>Retrieves a batch of <code>Records</code> from a <code>FeatureGroup</code>.</p>"
    },
    "DeleteRecord":{
      "name":"DeleteRecord",
      "http":{
        "method":"DELETE",
        "requestUri":"/FeatureGroup/{FeatureGroupName}"
      },
      "input":{"shape":"DeleteRecordRequest"},
      "errors":[
        {"shape":"ValidationError"},
        {"shape":"InternalFailure"},
        {"shape":"ServiceUnavailable"},
        {"shape":"AccessForbidden"}
      ],
      "documentation":"<p>Deletes a <code>Record</code> from a <code>FeatureGroup</code>. A new record will show up in the <code>OfflineStore</code> when the <code>DeleteRecord</code> API is called. This record will have a value of <code>True</code> in the <code>is_deleted</code> column.</p>"
    },
    "GetRecord":{
      "name":"GetRecord",
      "http":{
        "method":"GET",
        "requestUri":"/FeatureGroup/{FeatureGroupName}"
      },
      "input":{"shape":"GetRecordRequest"},
      "output":{"shape":"GetRecordResponse"},
      "errors":[
        {"shape":"ValidationError"},
        {"shape":"ResourceNotFound"},
        {"shape":"InternalFailure"},
        {"shape":"ServiceUnavailable"},
        {"shape":"AccessForbidden"}
      ],
      "documentation":"<p>Use for <code>OnlineStore</code> serving from a <code>FeatureStore</code>. Only the latest records stored in the <code>OnlineStore</code> can be retrieved. If no Record with <code>RecordIdentifierValue</code> is found, then an empty result is returned. </p>"
    },
    "PutRecord":{
      "name":"PutRecord",
      "http":{
        "method":"PUT",
        "requestUri":"/FeatureGroup/{FeatureGroupName}"
      },
      "input":{"shape":"PutRecordRequest"},
      "errors":[
        {"shape":"ValidationError"},
        {"shape":"InternalFailure"},
        {"shape":"ServiceUnavailable"},
        {"shape":"AccessForbidden"}
      ],
      "documentation":"<p>Used for data ingestion into the <code>FeatureStore</code>. The <code>PutRecord</code> API writes to both the <code>OnlineStore</code> and <code>OfflineStore</code>. If the record is the latest record for the <code>recordIdentifier</code>, the record is written to both the <code>OnlineStore</code> and <code>OfflineStore</code>. If the record is a historic record, it is written only to the <code>OfflineStore</code>.</p>"
    }
  },
  "shapes":{
    "AccessForbidden":{
      "type":"structure",
      "members":{
        "Message":{"shape":"Message"}
      },
      "documentation":"<p>You do not have permission to perform an action.</p>",
      "error":{"httpStatusCode":403},
      "exception":true,
      "synthetic":true
    },
    "BatchGetRecordError":{
      "type":"structure",
      "required":[
        "FeatureGroupName",
        "RecordIdentifierValueAsString",
        "ErrorCode",
        "ErrorMessage"
      ],
      "members":{
        "FeatureGroupName":{
          "shape":"ValueAsString",
          "documentation":"<p>The name of the feature group that the record belongs to.</p>"
        },
        "RecordIdentifierValueAsString":{
          "shape":"ValueAsString",
          "documentation":"<p>The value for the <code>RecordIdentifier</code> in string format of a Record from a <code>FeatureGroup</code> that is causing an error when attempting to be retrieved.</p>"
        },
        "ErrorCode":{
          "shape":"ValueAsString",
          "documentation":"<p>The error code of an error that has occured when attempting to retrieve a batch of Records. For more information on errors, see <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_feature_store_GetRecord.html#API_feature_store_GetRecord_Errors\"> Errors</a>.</p>"
        },
        "ErrorMessage":{
          "shape":"Message",
          "documentation":"<p>The error message of an error that has occured when attempting to retrieve a record in the batch.</p>"
        }
      },
      "documentation":"<p>The error that has occurred when attempting to retrieve a batch of Records.</p>"
    },
    "BatchGetRecordErrors":{
      "type":"list",
      "member":{"shape":"BatchGetRecordError"},
      "min":0
    },
    "BatchGetRecordIdentifier":{
      "type":"structure",
      "required":[
        "FeatureGroupName",
        "RecordIdentifiersValueAsString"
      ],
      "members":{
        "FeatureGroupName":{
          "shape":"FeatureGroupName",
          "documentation":"<p>A <code>FeatureGroupName</code> containing Records you are retrieving in a batch.</p>"
        },
        "RecordIdentifiersValueAsString":{
          "shape":"RecordIdentifiers",
          "documentation":"<p>The value for a list of record identifiers in string format.</p>"
        },
        "FeatureNames":{
          "shape":"FeatureNames",
          "documentation":"<p>List of names of Features to be retrieved. If not specified, the latest value for all the Features are returned.</p>"
        }
      },
      "documentation":"<p>The identifier that identifies the batch of Records you are retrieving in a batch.</p>"
    },
    "BatchGetRecordIdentifiers":{
      "type":"list",
      "member":{"shape":"BatchGetRecordIdentifier"},
      "max":10,
      "min":1
    },
    "BatchGetRecordRequest":{
      "type":"structure",
      "required":["Identifiers"],
      "members":{
        "Identifiers":{
          "shape":"BatchGetRecordIdentifiers",
          "documentation":"<p>A list of <code>FeatureGroup</code> names, with their corresponding <code>RecordIdentifier</code> value, and Feature name that have been requested to be retrieved in batch.</p>"
        }
      }
    },
    "BatchGetRecordResponse":{
      "type":"structure",
      "required":[
        "Records",
        "Errors",
        "UnprocessedIdentifiers"
      ],
      "members":{
        "Records":{
          "shape":"BatchGetRecordResultDetails",
          "documentation":"<p>A list of Records you requested to be retrieved in batch.</p>"
        },
        "Errors":{
          "shape":"BatchGetRecordErrors",
          "documentation":"<p>A list of errors that have occured when retrieving a batch of Records.</p>"
        },
        "UnprocessedIdentifiers":{
          "shape":"UnprocessedIdentifiers",
          "documentation":"<p>A unprocessed list of <code>FeatureGroup</code> names, with their corresponding <code>RecordIdentifier</code> value, and Feature name.</p>"
        }
      }
    },
    "BatchGetRecordResultDetail":{
      "type":"structure",
      "required":[
        "FeatureGroupName",
        "RecordIdentifierValueAsString",
        "Record"
      ],
      "members":{
        "FeatureGroupName":{
          "shape":"ValueAsString",
          "documentation":"<p>The <code>FeatureGroupName</code> containing Records you retrieved in a batch.</p>"
        },
        "RecordIdentifierValueAsString":{
          "shape":"ValueAsString",
          "documentation":"<p>The value of the record identifer in string format.</p>"
        },
        "Record":{
          "shape":"Record",
          "documentation":"<p>The <code>Record</code> retrieved.</p>"
        }
      },
      "documentation":"<p>The output of Records that have been retrieved in a batch.</p>"
    },
    "BatchGetRecordResultDetails":{
      "type":"list",
      "member":{"shape":"BatchGetRecordResultDetail"},
      "min":0
    },
    "DeleteRecordRequest":{
      "type":"structure",
      "required":[
        "FeatureGroupName",
        "RecordIdentifierValueAsString",
        "EventTime"
      ],
      "members":{
        "FeatureGroupName":{
          "shape":"FeatureGroupName",
          "documentation":"<p>The name of the feature group to delete the record from. </p>",
          "location":"uri",
          "locationName":"FeatureGroupName"
        },
        "RecordIdentifierValueAsString":{
          "shape":"ValueAsString",
          "documentation":"<p>The value for the <code>RecordIdentifier</code> that uniquely identifies the record, in string format. </p>",
          "location":"querystring",
          "locationName":"RecordIdentifierValueAsString"
        },
        "EventTime":{
          "shape":"ValueAsString",
          "documentation":"<p>Timestamp indicating when the deletion event occurred. <code>EventTime</code> can be used to query data at a certain point in time.</p>",
          "location":"querystring",
          "locationName":"EventTime"
        }
      }
    },
    "FeatureGroupName":{
      "type":"string",
      "max":64,
      "min":1,
      "pattern":"^[a-zA-Z0-9](-*[a-zA-Z0-9])*"
    },
    "FeatureName":{
      "type":"string",
      "max":64,
      "min":1,
      "pattern":"^[a-zA-Z0-9]([-_]*[a-zA-Z0-9])*"
    },
    "FeatureNames":{
      "type":"list",
      "member":{"shape":"FeatureName"},
      "min":1
    },
    "FeatureValue":{
      "type":"structure",
      "required":[
        "FeatureName",
        "ValueAsString"
      ],
      "members":{
        "FeatureName":{
          "shape":"FeatureName",
          "documentation":"<p>The name of a feature that a feature value corresponds to.</p>"
        },
        "ValueAsString":{
          "shape":"ValueAsString",
          "documentation":"<p>The value associated with a feature, in string format. Note that features types can be String, Integral, or Fractional. This value represents all three types as a string.</p>"
        }
      },
      "documentation":"<p>The value associated with a feature.</p>"
    },
    "GetRecordRequest":{
      "type":"structure",
      "required":[
        "FeatureGroupName",
        "RecordIdentifierValueAsString"
      ],
      "members":{
        "FeatureGroupName":{
          "shape":"FeatureGroupName",
          "documentation":"<p>The name of the feature group in which you want to put the records.</p>",
          "location":"uri",
          "locationName":"FeatureGroupName"
        },
        "RecordIdentifierValueAsString":{
          "shape":"ValueAsString",
          "documentation":"<p>The value that corresponds to <code>RecordIdentifier</code> type and uniquely identifies the record in the <code>FeatureGroup</code>. </p>",
          "location":"querystring",
          "locationName":"RecordIdentifierValueAsString"
        },
        "FeatureNames":{
          "shape":"FeatureNames",
          "documentation":"<p>List of names of Features to be retrieved. If not specified, the latest value for all the Features are returned.</p>",
          "location":"querystring",
          "locationName":"FeatureName"
        }
      }
    },
    "GetRecordResponse":{
      "type":"structure",
      "members":{
        "Record":{
          "shape":"Record",
          "documentation":"<p>The record you requested. A list of <code>FeatureValues</code>.</p>"
        }
      }
    },
    "InternalFailure":{
      "type":"structure",
      "members":{
        "Message":{"shape":"Message"}
      },
      "documentation":"<p>An internal failure occurred. Try your request again. If the problem persists, contact AWS customer support.</p>",
      "error":{"httpStatusCode":500},
      "exception":true,
      "fault":true,
      "synthetic":true
    },
    "Message":{
      "type":"string",
      "max":2048
    },
    "PutRecordRequest":{
      "type":"structure",
      "required":[
        "FeatureGroupName",
        "Record"
      ],
      "members":{
        "FeatureGroupName":{
          "shape":"FeatureGroupName",
          "documentation":"<p>The name of the feature group that you want to insert the record into.</p>",
          "location":"uri",
          "locationName":"FeatureGroupName"
        },
        "Record":{
          "shape":"Record",
          "documentation":"<p>List of FeatureValues to be inserted. This will be a full over-write. If you only want to update few of the feature values, do the following:</p> <ul> <li> <p>Use <code>GetRecord</code> to retrieve the latest record.</p> </li> <li> <p>Update the record returned from <code>GetRecord</code>. </p> </li> <li> <p>Use <code>PutRecord</code> to update feature values.</p> </li> </ul>"
        }
      }
    },
    "Record":{
      "type":"list",
      "member":{"shape":"FeatureValue"},
      "min":1
    },
    "RecordIdentifiers":{
      "type":"list",
      "member":{"shape":"ValueAsString"},
      "max":100,
      "min":1
    },
    "ResourceNotFound":{
      "type":"structure",
      "members":{
        "Message":{"shape":"Message"}
      },
      "documentation":"<p>A resource that is required to perform an action was not found.</p>",
      "error":{"httpStatusCode":404},
      "exception":true
    },
    "ServiceUnavailable":{
      "type":"structure",
      "members":{
        "Message":{"shape":"Message"}
      },
      "documentation":"<p>The service is currently unavailable.</p>",
      "error":{"httpStatusCode":503},
      "exception":true,
      "fault":true,
      "synthetic":true
    },
    "UnprocessedIdentifiers":{
      "type":"list",
      "member":{"shape":"BatchGetRecordIdentifier"},
      "min":0
    },
    "ValidationError":{
      "type":"structure",
      "members":{
        "Message":{"shape":"Message"}
      },
      "documentation":"<p>There was an error validating your request.</p>",
      "error":{"httpStatusCode":400},
      "exception":true,
      "synthetic":true
    },
    "ValueAsString":{
      "type":"string",
      "max":358400,
      "pattern":".*"
    }
  },
  "documentation":"<p>Contains all data plane API operations and data types for the Amazon SageMaker Feature Store. Use this API to put, delete, and retrieve (get) features from a feature store.</p> <p>Use the following operations to configure your <code>OnlineStore</code> and <code>OfflineStore</code> features, and to create and manage feature groups:</p> <ul> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateFeatureGroup.html\">CreateFeatureGroup</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteFeatureGroup.html\">DeleteFeatureGroup</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeFeatureGroup.html\">DescribeFeatureGroup</a> </p> </li> <li> <p> <a href=\"https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListFeatureGroups.html\">ListFeatureGroups</a> </p> </li> </ul>"
}
