diff --git a/SVSim.EmulatedEntrypoint/Models/Dtos/Requests/Card/CardCreateRequest.cs b/SVSim.EmulatedEntrypoint/Models/Dtos/Requests/Card/CardCreateRequest.cs
new file mode 100644
index 0000000..8285231
--- /dev/null
+++ b/SVSim.EmulatedEntrypoint/Models/Dtos/Requests/Card/CardCreateRequest.cs
@@ -0,0 +1,19 @@
+using MessagePack;
+using System.Text.Json.Serialization;
+
+namespace SVSim.EmulatedEntrypoint.Models.Dtos.Requests.Card;
+
+///
+/// POST /card/create. The single payload field is a JSON-encoded STRING (double-encoded —
+/// see docs/api-spec/endpoints/post-login/card-create.md). Inner object maps
+/// cardId → "<num_to_create>,<client_possession_snapshot>". Both inner values
+/// are strings. Same wire format as /card/destruct; CardController parses both with the
+/// shared TryParseCardCountDict helper.
+///
+[MessagePackObject]
+public class CardCreateRequest : BaseRequest
+{
+ [JsonPropertyName("card_id_number_array")]
+ [Key("card_id_number_array")]
+ public string CardIdNumberArray { get; set; } = string.Empty;
+}
diff --git a/SVSim.EmulatedEntrypoint/Models/Dtos/Responses/Card/CardCreateResponse.cs b/SVSim.EmulatedEntrypoint/Models/Dtos/Responses/Card/CardCreateResponse.cs
new file mode 100644
index 0000000..d8d77d5
--- /dev/null
+++ b/SVSim.EmulatedEntrypoint/Models/Dtos/Responses/Card/CardCreateResponse.cs
@@ -0,0 +1,20 @@
+using MessagePack;
+using SVSim.EmulatedEntrypoint.Models.Dtos;
+using System.Text.Json.Serialization;
+
+namespace SVSim.EmulatedEntrypoint.Models.Dtos.Responses.Card;
+
+///
+/// /card/create response data. reward_list entries are POST-STATE TOTALS (the client's
+/// PlayerStaticData.UpdateHaveUserGoodsNumByJsonData does direct assignment). One
+/// RewardType=1 RedEther entry plus one RewardType=5 Card entry per crafted cardId,
+/// plus cascade entries for any CardCosmeticReward rows attached to the crafted cards.
+///
+[MessagePackObject]
+public class CardCreateResponse
+{
+ [JsonPropertyName("reward_list")]
+ [JsonIgnore(Condition = JsonIgnoreCondition.Never)]
+ [Key("reward_list")]
+ public List RewardList { get; set; } = new();
+}