@twin.org/node 0.0.3-next.33 → 0.0.3-next.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -19,6 +19,10 @@
19
19
  "name": "Info",
20
20
  "description": "Information endpoints for the REST server."
21
21
  },
22
+ {
23
+ "name": "Health",
24
+ "description": "Health endpoints for the REST server."
25
+ },
22
26
  {
23
27
  "name": "Authentication",
24
28
  "description": "Authentication endpoints for the REST server."
@@ -107,6 +111,10 @@
107
111
  "name": "Transfer Process",
108
112
  "description": "DSP Transfer Process Protocol endpoints for initiating and managing data transfers."
109
113
  },
114
+ {
115
+ "name": "Datasets",
116
+ "description": "Tenant-scoped CRUD over the datasets the Control Plane reads at start time to populate the federated catalogue."
117
+ },
110
118
  {
111
119
  "name": "Policy Administration Point",
112
120
  "description": "Endpoints for managing ODRL policies in the Policy Administration Point"
@@ -123,34 +131,72 @@
123
131
  "paths": {
124
132
  "/": {
125
133
  "get": {
126
- "operationId": "serverRoot",
127
- "summary": "Get the root text page",
134
+ "operationId": "serverHealth",
135
+ "summary": "Get the health for the server",
128
136
  "tags": [
129
- "Info"
137
+ "Health"
130
138
  ],
131
139
  "responses": {
132
140
  "200": {
133
- "description": "The root text for the server.",
141
+ "description": "The health of the server.",
134
142
  "content": {
135
- "text/plain": {
143
+ "application/json": {
136
144
  "schema": {
137
- "$ref": "#/components/schemas/ServerRootResponse"
145
+ "$ref": "#/components/schemas/ServerHealthResponse"
138
146
  },
139
147
  "examples": {
140
- "serverRootResponse": {
141
- "summary": "The response for the root request.",
142
- "value": "API Server - 1.0.0"
148
+ "healthResponseOK": {
149
+ "summary": "The response for the health request.",
150
+ "value": {
151
+ "status": "ok",
152
+ "components": [
153
+ {
154
+ "source": "Database",
155
+ "status": "ok"
156
+ },
157
+ {
158
+ "source": "Storage",
159
+ "status": "ok"
160
+ }
161
+ ]
162
+ }
163
+ },
164
+ "healthResponseWarning": {
165
+ "summary": "The response for the health request with warnings.",
166
+ "value": {
167
+ "status": "warning",
168
+ "components": [
169
+ {
170
+ "source": "Database",
171
+ "status": "warning",
172
+ "description": "slowRunning"
173
+ },
174
+ {
175
+ "source": "Storage",
176
+ "status": "ok"
177
+ }
178
+ ]
179
+ }
180
+ },
181
+ "healthResponseError": {
182
+ "summary": "The response for the health request with errors.",
183
+ "value": {
184
+ "status": "error",
185
+ "components": [
186
+ {
187
+ "source": "Database",
188
+ "status": "ok"
189
+ },
190
+ {
191
+ "source": "Storage",
192
+ "status": "error",
193
+ "description": "storageFull"
194
+ }
195
+ ]
196
+ }
143
197
  }
144
198
  }
145
199
  }
146
- },
147
- "headers": {
148
- "content-type": {
149
- "schema": {
150
- "type": "string"
151
- },
152
- "description": "e.g. text/plain"
153
- }
154
200
  }
155
201
  },
156
202
  "400": {
@@ -342,11 +388,11 @@
342
388
  "examples": {
343
389
  "livezResponseOK": {
344
390
  "summary": "The response for the liveness request.",
345
- "value": "ok"
391
+ "value": "alive"
346
392
  },
347
393
  "livezResponseFailure": {
348
394
  "summary": "The response for the liveness request with errors.",
349
- "value": "failed"
395
+ "value": "dead"
350
396
  }
351
397
  }
352
398
  }
@@ -402,74 +448,40 @@
402
448
  }
403
449
  }
404
450
  },
405
- "/health": {
451
+ "/readyz": {
406
452
  "get": {
407
- "operationId": "serverHealth",
408
- "summary": "Get the health for the server",
453
+ "operationId": "serverReadyz",
454
+ "summary": "Get the readyz status for the server",
409
455
  "tags": [
410
456
  "Info"
411
457
  ],
412
458
  "responses": {
413
459
  "200": {
414
- "description": "The health of the server.",
460
+ "description": "The readyz of the server.",
415
461
  "content": {
416
- "application/json": {
462
+ "text/plain": {
417
463
  "schema": {
418
- "$ref": "#/components/schemas/HealthInfo"
464
+ "$ref": "#/components/schemas/ServerReadyzResponse"
419
465
  },
420
466
  "examples": {
421
- "healthResponseOK": {
422
- "summary": "The response for the health request.",
423
- "value": {
424
- "status": "ok",
425
- "components": [
426
- {
427
- "name": "Database",
428
- "status": "ok"
429
- },
430
- {
431
- "name": "Storage",
432
- "status": "ok"
433
- }
434
- ]
435
- }
436
- },
437
- "healthResponseWarning": {
438
- "summary": "The response for the health request with warnings.",
439
- "value": {
440
- "status": "warning",
441
- "components": [
442
- {
443
- "name": "Database",
444
- "status": "warning",
445
- "details": "The database is running slow."
446
- },
447
- {
448
- "name": "Storage",
449
- "status": "ok"
450
- }
451
- ]
452
- }
467
+ "readyzResponseOK": {
468
+ "summary": "The response for the readiness request.",
469
+ "value": "ready"
453
470
  },
454
- "healthResponseError": {
455
- "summary": "The response for the health request with errors.",
456
- "value": {
457
- "status": "error",
458
- "components": [
459
- {
460
- "name": "Database",
461
- "status": "ok"
462
- },
463
- {
464
- "name": "Storage",
465
- "status": "error",
466
- "details": "The storage is full."
467
- }
468
- ]
469
- }
471
+ "readyzResponseFailure": {
472
+ "summary": "The response for the readiness request with errors.",
473
+ "value": "not ready"
470
474
  }
471
475
  }
472
476
  }
477
+ },
478
+ "headers": {
479
+ "content-type": {
480
+ "schema": {
481
+ "type": "string"
482
+ },
483
+ "description": "e.g. text/plain"
484
+ }
473
485
  }
474
486
  },
475
487
  "400": {
@@ -691,24 +703,31 @@
691
703
  }
692
704
  },
693
705
  "/authentication/logout": {
694
- "get": {
706
+ "post": {
695
707
  "operationId": "authenticationLogout",
696
708
  "summary": "Logout from the server",
697
709
  "tags": [
698
710
  "Authentication"
699
711
  ],
700
- "parameters": [
701
- {
702
- "name": "token",
703
- "description": "The token to logout, if it uses a mechanism with public access.",
704
- "in": "query",
705
- "required": false,
706
- "schema": {
707
- "type": "string"
708
- },
709
- "example": "eyJhbGciOiJIU...sw5c"
712
+ "requestBody": {
713
+ "description": "Perform a logout on the auth token.",
714
+ "required": true,
715
+ "content": {
716
+ "application/json": {
717
+ "schema": {
718
+ "$ref": "#/components/schemas/LogoutRequest"
719
+ },
720
+ "examples": {
721
+ "logoutRequestExample": {
722
+ "summary": "The request to logout from the server.",
723
+ "value": {
724
+ "token": "eyJhbGciOiJIU...sw5c"
725
+ }
726
+ }
727
+ }
728
+ }
710
729
  }
711
- ],
730
+ },
712
731
  "responses": {
713
732
  "204": {
714
733
  "description": "The rest request ended in success with no data."
@@ -756,29 +775,36 @@
756
775
  }
757
776
  },
758
777
  "/authentication/refresh": {
759
- "get": {
778
+ "post": {
760
779
  "operationId": "authenticationRefreshToken",
761
780
  "summary": "Refresh an authentication token",
762
781
  "tags": [
763
782
  "Authentication"
764
783
  ],
765
- "parameters": [
766
- {
767
- "name": "token",
768
- "description": "The token to refresh, if it uses a mechanism with public access.",
769
- "in": "query",
770
- "required": false,
771
- "schema": {
772
- "type": "string"
773
- },
774
- "example": "eyJhbGciOiJIU...sw5c"
775
- }
776
- ],
777
784
  "security": [
778
785
  {
779
786
  "jwtBearerAuthScheme": []
780
787
  }
781
788
  ],
789
+ "requestBody": {
790
+ "description": "Perform a refresh of the auth token.",
791
+ "required": true,
792
+ "content": {
793
+ "application/json": {
794
+ "schema": {
795
+ "$ref": "#/components/schemas/RefreshTokenRequest"
796
+ },
797
+ "examples": {
798
+ "refreshTokenRequestExample": {
799
+ "summary": "The request to refresh an auth token.",
800
+ "value": {
801
+ "token": "eyJhbGciOiJIU...sw5c"
802
+ }
803
+ }
804
+ }
805
+ }
806
+ }
807
+ },
782
808
  "responses": {
783
809
  "200": {
784
810
  "description": "Response from a refresh on the auth token.",
@@ -2624,35 +2650,24 @@
2624
2650
  }
2625
2651
  }
2626
2652
  },
2627
- "/identity/{identity}/verifiable-credential/{verificationMethodId}": {
2653
+ "/identity/{identity}/alias": {
2628
2654
  "post": {
2629
- "operationId": "identityVerifiableCredentialCreate",
2630
- "summary": "Create an identity verifiable credential",
2655
+ "operationId": "identityAlsoKnownAsCreate",
2656
+ "summary": "Add an alias to the alsoKnownAs property on the document",
2631
2657
  "tags": [
2632
2658
  "Identity"
2633
2659
  ],
2634
2660
  "parameters": [
2635
2661
  {
2636
2662
  "name": "identity",
2637
- "description": "The identity to create the verification credential for.",
2638
- "in": "path",
2639
- "required": true,
2640
- "schema": {
2641
- "type": "string"
2642
- },
2643
- "style": "simple",
2644
- "example": "did:entity-storage:0x879c31386f992cfa29b77fe31e37256d69f6a57653cee4eb60ad4c4613c5515a"
2645
- },
2646
- {
2647
- "name": "verificationMethodId",
2648
- "description": "The verification method id to use.",
2663
+ "description": "The identity to create the alias for.",
2649
2664
  "in": "path",
2650
2665
  "required": true,
2651
2666
  "schema": {
2652
2667
  "type": "string"
2653
2668
  },
2654
2669
  "style": "simple",
2655
- "example": "my-assertion"
2670
+ "example": "did:iota:tst:0xe3088ba9aa8c28e1d139708a14e8c0fdff11ee8223baac4aa5bcf3321e4bfc6a"
2656
2671
  }
2657
2672
  ],
2658
2673
  "security": [
@@ -2661,24 +2676,17 @@
2661
2676
  }
2662
2677
  ],
2663
2678
  "requestBody": {
2664
- "description": "Request to create a verifiable credential.",
2679
+ "description": "Request to create an alias for an identity.",
2665
2680
  "required": true,
2666
2681
  "content": {
2667
2682
  "application/json": {
2668
2683
  "schema": {
2669
- "$ref": "#/components/schemas/IdentityVerifiableCredentialCreateRequest"
2684
+ "$ref": "#/components/schemas/IdentityAlsoKnownAsCreateRequest"
2670
2685
  },
2671
2686
  "examples": {
2672
- "identityVerifiableCredentialCreateRequestExample": {
2687
+ "identityAlsoKnownAsCreateRequestExample": {
2673
2688
  "value": {
2674
- "credentialId": "https://example.com/credentials/3732",
2675
- "subject": {
2676
- "@context": "https://schema.org",
2677
- "@type": "Person",
2678
- "id": "did:entity-storage:0x4757993355b921a8229bd780f30921b6a0216a72e6c3f37a09d13b8426a17def",
2679
- "name": "Jane Doe"
2680
- },
2681
- "revocationIndex": 5
2689
+ "alias": "did:example:123"
2682
2690
  }
2683
2691
  }
2684
2692
  }
@@ -2686,44 +2694,8 @@
2686
2694
  }
2687
2695
  },
2688
2696
  "responses": {
2689
- "200": {
2690
- "description": "Response to creating a verifiable credential.",
2691
- "content": {
2692
- "application/json": {
2693
- "schema": {
2694
- "$ref": "#/components/schemas/IdentityVerifiableCredentialCreateResponse"
2695
- },
2696
- "examples": {
2697
- "identityVerifiableCredentialCreateResponseExample": {
2698
- "value": {
2699
- "verifiableCredential": {
2700
- "@context": [
2701
- "https://www.w3.org/2018/credentials/v1",
2702
- "https://schema.org"
2703
- ],
2704
- "id": "https://example.com/credentials/3732",
2705
- "type": [
2706
- "VerifiableCredential",
2707
- "Person"
2708
- ],
2709
- "credentialSubject": {
2710
- "id": "did:entity-storage:0x4757993355b921a8229bd780f30921b6a0216a72e6c3f37a09d13b8426a17def",
2711
- "name": "Jane Doe"
2712
- },
2713
- "issuer": "did:entity-storage:0x879c31386f992cfa29b77fe31e37256d69f6a57653cee4eb60ad4c4613c5515a",
2714
- "issuanceDate": "2025-01-24T09:21:51.500Z",
2715
- "credentialStatus": {
2716
- "id": "did:entity-storage:0x879c31386f992cfa29b77fe31e37256d69f6a57653cee4eb60ad4c4613c5515a#revocation",
2717
- "type": "BitstringStatusList",
2718
- "revocationBitmapIndex": "5"
2719
- }
2720
- },
2721
- "jwt": "eyJraWQiOi...D1Z3AQ"
2722
- }
2723
- }
2724
- }
2725
- }
2726
- }
2697
+ "204": {
2698
+ "description": "The rest request ended in success with no data."
2727
2699
  },
2728
2700
  "400": {
2729
2701
  "description": "The server cannot process the request, see the content for more details.",
@@ -2785,62 +2757,178 @@
2785
2757
  }
2786
2758
  }
2787
2759
  },
2788
- "/identity/verifiable-credential/verify/document": {
2789
- "post": {
2790
- "operationId": "identityVerifiableCredentialVerifyDocument",
2791
- "summary": "Verify an identity verifiable credential document",
2760
+ "/identity/{identity}/alias/{alias}": {
2761
+ "delete": {
2762
+ "operationId": "identityAlsoKnownAsRemove",
2763
+ "summary": "Remove an alias from the alsoKnownAs property on the document",
2792
2764
  "tags": [
2793
2765
  "Identity"
2794
2766
  ],
2795
- "requestBody": {
2796
- "description": "Request to verify a verifiable credential.",
2797
- "required": true,
2798
- "content": {
2799
- "application/json": {
2800
- "schema": {
2801
- "$ref": "https://schema.twindev.org/w3c-did/DidVerifiableCredential"
2802
- },
2803
- "examples": {
2804
- "identityVerifiableCredentialVerifyDocumentRequestExample": {
2805
- "value": {
2806
- "@context": [
2807
- "https://www.w3.org/2018/credentials/v1",
2808
- "https://schema.org"
2809
- ],
2810
- "id": "https://example.com/credentials/3732",
2811
- "type": [
2812
- "VerifiableCredential",
2813
- "Person"
2814
- ],
2815
- "credentialSubject": {
2816
- "id": "did:entity-storage:0x4757993355b921a8229bd780f30921b6a0216a72e6c3f37a09d13b8426a17def",
2817
- "name": "Jane Doe"
2818
- },
2819
- "issuer": "did:entity-storage:0x879c31386f992cfa29b77fe31e37256d69f6a57653cee4eb60ad4c4613c5515a",
2820
- "issuanceDate": "2025-01-24T09:21:51.500Z",
2821
- "credentialStatus": {
2822
- "id": "did:entity-storage:0x879c31386f992cfa29b77fe31e37256d69f6a57653cee4eb60ad4c4613c5515a#revocation",
2823
- "type": "BitstringStatusList",
2824
- "revocationBitmapIndex": "5"
2767
+ "parameters": [
2768
+ {
2769
+ "name": "identity",
2770
+ "description": "The identity to remove the alias from.",
2771
+ "in": "path",
2772
+ "required": true,
2773
+ "schema": {
2774
+ "type": "string"
2775
+ },
2776
+ "style": "simple",
2777
+ "example": "did:iota:tst:0xe3088ba9aa8c28e1d139708a14e8c0fdff11ee8223baac4aa5bcf3321e4bfc6a"
2778
+ },
2779
+ {
2780
+ "name": "alias",
2781
+ "description": "The alias to remove.",
2782
+ "in": "path",
2783
+ "required": true,
2784
+ "schema": {
2785
+ "type": "string"
2786
+ },
2787
+ "style": "simple",
2788
+ "example": "did:example:123"
2789
+ }
2790
+ ],
2791
+ "security": [
2792
+ {
2793
+ "jwtBearerAuthScheme": []
2794
+ }
2795
+ ],
2796
+ "responses": {
2797
+ "204": {
2798
+ "description": "The rest request ended in success with no data."
2799
+ },
2800
+ "400": {
2801
+ "description": "The server cannot process the request, see the content for more details.",
2802
+ "content": {
2803
+ "application/json": {
2804
+ "schema": {
2805
+ "$ref": "#/components/schemas/Error"
2806
+ },
2807
+ "examples": {
2808
+ "exampleResponse": {
2809
+ "value": {
2810
+ "name": "GeneralError",
2811
+ "message": "errorMessage",
2812
+ "properties": {
2813
+ "foo": "bar"
2814
+ }
2815
+ }
2816
+ }
2817
+ }
2818
+ }
2819
+ }
2820
+ },
2821
+ "401": {
2822
+ "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
2823
+ "content": {
2824
+ "application/json": {
2825
+ "schema": {
2826
+ "$ref": "#/components/schemas/Error"
2827
+ },
2828
+ "examples": {
2829
+ "exampleResponse": {
2830
+ "value": {
2831
+ "name": "UnauthorizedError",
2832
+ "message": "errorMessage"
2833
+ }
2834
+ }
2835
+ }
2836
+ }
2837
+ }
2838
+ },
2839
+ "500": {
2840
+ "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
2841
+ "content": {
2842
+ "application/json": {
2843
+ "schema": {
2844
+ "$ref": "#/components/schemas/Error"
2845
+ },
2846
+ "examples": {
2847
+ "exampleResponse": {
2848
+ "value": {
2849
+ "name": "InternalServerError",
2850
+ "message": "errorMessage"
2825
2851
  }
2826
2852
  }
2827
2853
  }
2828
2854
  }
2829
2855
  }
2830
2856
  }
2857
+ }
2858
+ }
2859
+ },
2860
+ "/identity/{identity}/verifiable-credential/{verificationMethodId}": {
2861
+ "post": {
2862
+ "operationId": "identityVerifiableCredentialCreate",
2863
+ "summary": "Create an identity verifiable credential",
2864
+ "tags": [
2865
+ "Identity"
2866
+ ],
2867
+ "parameters": [
2868
+ {
2869
+ "name": "identity",
2870
+ "description": "The identity to create the verification credential for.",
2871
+ "in": "path",
2872
+ "required": true,
2873
+ "schema": {
2874
+ "type": "string"
2875
+ },
2876
+ "style": "simple",
2877
+ "example": "did:entity-storage:0x879c31386f992cfa29b77fe31e37256d69f6a57653cee4eb60ad4c4613c5515a"
2878
+ },
2879
+ {
2880
+ "name": "verificationMethodId",
2881
+ "description": "The verification method id to use.",
2882
+ "in": "path",
2883
+ "required": true,
2884
+ "schema": {
2885
+ "type": "string"
2886
+ },
2887
+ "style": "simple",
2888
+ "example": "my-assertion"
2889
+ }
2890
+ ],
2891
+ "security": [
2892
+ {
2893
+ "jwtBearerAuthScheme": []
2894
+ }
2895
+ ],
2896
+ "requestBody": {
2897
+ "description": "Request to create a verifiable credential.",
2898
+ "required": true,
2899
+ "content": {
2900
+ "application/json": {
2901
+ "schema": {
2902
+ "$ref": "#/components/schemas/IdentityVerifiableCredentialCreateRequest"
2903
+ },
2904
+ "examples": {
2905
+ "identityVerifiableCredentialCreateRequestExample": {
2906
+ "value": {
2907
+ "credentialId": "https://example.com/credentials/3732",
2908
+ "subject": {
2909
+ "@context": "https://schema.org",
2910
+ "@type": "Person",
2911
+ "id": "did:entity-storage:0x4757993355b921a8229bd780f30921b6a0216a72e6c3f37a09d13b8426a17def",
2912
+ "name": "Jane Doe"
2913
+ },
2914
+ "revocationIndex": 5
2915
+ }
2916
+ }
2917
+ }
2918
+ }
2919
+ }
2831
2920
  },
2832
2921
  "responses": {
2833
2922
  "200": {
2834
- "description": "Response to verifying a verifiable credential.",
2923
+ "description": "Response to creating a verifiable credential.",
2835
2924
  "content": {
2836
2925
  "application/json": {
2837
2926
  "schema": {
2838
- "$ref": "#/components/schemas/IdentityVerifiableCredentialVerifyResponse"
2927
+ "$ref": "#/components/schemas/IdentityVerifiableCredentialCreateResponse"
2839
2928
  },
2840
2929
  "examples": {
2841
- "identityVerifiableCredentialVerifyResponseExample": {
2930
+ "identityVerifiableCredentialCreateResponseExample": {
2842
2931
  "value": {
2843
- "revoked": false,
2844
2932
  "verifiableCredential": {
2845
2933
  "@context": [
2846
2934
  "https://www.w3.org/2018/credentials/v1",
@@ -2862,7 +2950,8 @@
2862
2950
  "type": "BitstringStatusList",
2863
2951
  "revocationBitmapIndex": "5"
2864
2952
  }
2865
- }
2953
+ },
2954
+ "jwt": "eyJraWQiOi...D1Z3AQ"
2866
2955
  }
2867
2956
  }
2868
2957
  }
@@ -2890,6 +2979,24 @@
2890
2979
  }
2891
2980
  }
2892
2981
  },
2982
+ "401": {
2983
+ "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
2984
+ "content": {
2985
+ "application/json": {
2986
+ "schema": {
2987
+ "$ref": "#/components/schemas/Error"
2988
+ },
2989
+ "examples": {
2990
+ "exampleResponse": {
2991
+ "value": {
2992
+ "name": "UnauthorizedError",
2993
+ "message": "errorMessage"
2994
+ }
2995
+ }
2996
+ }
2997
+ }
2998
+ }
2999
+ },
2893
3000
  "500": {
2894
3001
  "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
2895
3002
  "content": {
@@ -2911,25 +3018,50 @@
2911
3018
  }
2912
3019
  }
2913
3020
  },
2914
- "/identity/verifiable-credential/verify": {
2915
- "get": {
2916
- "operationId": "identityVerifiableCredentialVerify",
2917
- "summary": "Verify an identity verifiable credential",
3021
+ "/identity/verifiable-credential/verify/document": {
3022
+ "post": {
3023
+ "operationId": "identityVerifiableCredentialVerifyDocument",
3024
+ "summary": "Verify an identity verifiable credential document",
2918
3025
  "tags": [
2919
3026
  "Identity"
2920
3027
  ],
2921
- "parameters": [
2922
- {
2923
- "name": "jwt",
2924
- "description": "The jwt to verify.",
2925
- "in": "query",
2926
- "required": false,
2927
- "schema": {
2928
- "type": "string"
2929
- },
2930
- "example": "eyJraWQiOi...D1Z3AQ"
3028
+ "requestBody": {
3029
+ "description": "Request to verify a verifiable credential.",
3030
+ "required": true,
3031
+ "content": {
3032
+ "application/json": {
3033
+ "schema": {
3034
+ "$ref": "https://schema.twindev.org/w3c-did/DidVerifiableCredential"
3035
+ },
3036
+ "examples": {
3037
+ "identityVerifiableCredentialVerifyDocumentRequestExample": {
3038
+ "value": {
3039
+ "@context": [
3040
+ "https://www.w3.org/2018/credentials/v1",
3041
+ "https://schema.org"
3042
+ ],
3043
+ "id": "https://example.com/credentials/3732",
3044
+ "type": [
3045
+ "VerifiableCredential",
3046
+ "Person"
3047
+ ],
3048
+ "credentialSubject": {
3049
+ "id": "did:entity-storage:0x4757993355b921a8229bd780f30921b6a0216a72e6c3f37a09d13b8426a17def",
3050
+ "name": "Jane Doe"
3051
+ },
3052
+ "issuer": "did:entity-storage:0x879c31386f992cfa29b77fe31e37256d69f6a57653cee4eb60ad4c4613c5515a",
3053
+ "issuanceDate": "2025-01-24T09:21:51.500Z",
3054
+ "credentialStatus": {
3055
+ "id": "did:entity-storage:0x879c31386f992cfa29b77fe31e37256d69f6a57653cee4eb60ad4c4613c5515a#revocation",
3056
+ "type": "BitstringStatusList",
3057
+ "revocationBitmapIndex": "5"
3058
+ }
3059
+ }
3060
+ }
3061
+ }
3062
+ }
2931
3063
  }
2932
- ],
3064
+ },
2933
3065
  "responses": {
2934
3066
  "200": {
2935
3067
  "description": "Response to verifying a verifiable credential.",
@@ -3012,31 +3144,132 @@
3012
3144
  }
3013
3145
  }
3014
3146
  },
3015
- "/identity/{identity}/verifiable-credential/revoke/{revocationIndex}": {
3147
+ "/identity/verifiable-credential/verify": {
3016
3148
  "get": {
3017
- "operationId": "identityVerifiableCredentialRevoke",
3018
- "summary": "Revoke an identity verifiable credential",
3149
+ "operationId": "identityVerifiableCredentialVerify",
3150
+ "summary": "Verify an identity verifiable credential",
3019
3151
  "tags": [
3020
3152
  "Identity"
3021
3153
  ],
3022
3154
  "parameters": [
3023
3155
  {
3024
- "name": "identity",
3025
- "description": "The identity to revoke the verification credential for.",
3026
- "in": "path",
3027
- "required": true,
3156
+ "name": "jwt",
3157
+ "description": "The jwt to verify.",
3158
+ "in": "query",
3159
+ "required": false,
3028
3160
  "schema": {
3029
3161
  "type": "string"
3030
3162
  },
3031
- "style": "simple",
3032
- "example": "did:entity-storage:0x879c31386f992cfa29b77fe31e37256d69f6a57653cee4eb60ad4c4613c5515a"
3033
- },
3034
- {
3035
- "name": "revocationIndex",
3036
- "description": "The revocation index to revoke.",
3037
- "in": "path",
3038
- "required": true,
3039
- "schema": {
3163
+ "example": "eyJraWQiOi...D1Z3AQ"
3164
+ }
3165
+ ],
3166
+ "responses": {
3167
+ "200": {
3168
+ "description": "Response to verifying a verifiable credential.",
3169
+ "content": {
3170
+ "application/json": {
3171
+ "schema": {
3172
+ "$ref": "#/components/schemas/IdentityVerifiableCredentialVerifyResponse"
3173
+ },
3174
+ "examples": {
3175
+ "identityVerifiableCredentialVerifyResponseExample": {
3176
+ "value": {
3177
+ "revoked": false,
3178
+ "verifiableCredential": {
3179
+ "@context": [
3180
+ "https://www.w3.org/2018/credentials/v1",
3181
+ "https://schema.org"
3182
+ ],
3183
+ "id": "https://example.com/credentials/3732",
3184
+ "type": [
3185
+ "VerifiableCredential",
3186
+ "Person"
3187
+ ],
3188
+ "credentialSubject": {
3189
+ "id": "did:entity-storage:0x4757993355b921a8229bd780f30921b6a0216a72e6c3f37a09d13b8426a17def",
3190
+ "name": "Jane Doe"
3191
+ },
3192
+ "issuer": "did:entity-storage:0x879c31386f992cfa29b77fe31e37256d69f6a57653cee4eb60ad4c4613c5515a",
3193
+ "issuanceDate": "2025-01-24T09:21:51.500Z",
3194
+ "credentialStatus": {
3195
+ "id": "did:entity-storage:0x879c31386f992cfa29b77fe31e37256d69f6a57653cee4eb60ad4c4613c5515a#revocation",
3196
+ "type": "BitstringStatusList",
3197
+ "revocationBitmapIndex": "5"
3198
+ }
3199
+ }
3200
+ }
3201
+ }
3202
+ }
3203
+ }
3204
+ }
3205
+ },
3206
+ "400": {
3207
+ "description": "The server cannot process the request, see the content for more details.",
3208
+ "content": {
3209
+ "application/json": {
3210
+ "schema": {
3211
+ "$ref": "#/components/schemas/Error"
3212
+ },
3213
+ "examples": {
3214
+ "exampleResponse": {
3215
+ "value": {
3216
+ "name": "GeneralError",
3217
+ "message": "errorMessage",
3218
+ "properties": {
3219
+ "foo": "bar"
3220
+ }
3221
+ }
3222
+ }
3223
+ }
3224
+ }
3225
+ }
3226
+ },
3227
+ "500": {
3228
+ "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
3229
+ "content": {
3230
+ "application/json": {
3231
+ "schema": {
3232
+ "$ref": "#/components/schemas/Error"
3233
+ },
3234
+ "examples": {
3235
+ "exampleResponse": {
3236
+ "value": {
3237
+ "name": "InternalServerError",
3238
+ "message": "errorMessage"
3239
+ }
3240
+ }
3241
+ }
3242
+ }
3243
+ }
3244
+ }
3245
+ }
3246
+ }
3247
+ },
3248
+ "/identity/{identity}/verifiable-credential/revoke/{revocationIndex}": {
3249
+ "get": {
3250
+ "operationId": "identityVerifiableCredentialRevoke",
3251
+ "summary": "Revoke an identity verifiable credential",
3252
+ "tags": [
3253
+ "Identity"
3254
+ ],
3255
+ "parameters": [
3256
+ {
3257
+ "name": "identity",
3258
+ "description": "The identity to revoke the verification credential for.",
3259
+ "in": "path",
3260
+ "required": true,
3261
+ "schema": {
3262
+ "type": "string"
3263
+ },
3264
+ "style": "simple",
3265
+ "example": "did:entity-storage:0x879c31386f992cfa29b77fe31e37256d69f6a57653cee4eb60ad4c4613c5515a"
3266
+ },
3267
+ {
3268
+ "name": "revocationIndex",
3269
+ "description": "The revocation index to revoke.",
3270
+ "in": "path",
3271
+ "required": true,
3272
+ "schema": {
3040
3273
  "type": "string"
3041
3274
  },
3042
3275
  "style": "simple",
@@ -3362,6 +3595,138 @@
3362
3595
  }
3363
3596
  }
3364
3597
  },
3598
+ "/identity/verifiable-presentation/verify/document": {
3599
+ "post": {
3600
+ "operationId": "identityVerifiablePresentationVerifyDocument",
3601
+ "summary": "Verify an identity verifiable presentation document",
3602
+ "tags": [
3603
+ "Identity"
3604
+ ],
3605
+ "requestBody": {
3606
+ "description": "Request to verify a verifiable presentation.",
3607
+ "required": true,
3608
+ "content": {
3609
+ "application/json": {
3610
+ "schema": {
3611
+ "$ref": "https://schema.twindev.org/w3c-did/DidVerifiablePresentation"
3612
+ },
3613
+ "examples": {
3614
+ "identityVerifiablePresentationVerifyDocumentRequestExample": {
3615
+ "value": {
3616
+ "@context": [
3617
+ "https://www.w3.org/2018/credentials/v1",
3618
+ "https://schema.org"
3619
+ ],
3620
+ "id": "https://example.com/credentials/3732",
3621
+ "type": [
3622
+ "VerifiableCredential",
3623
+ "Person"
3624
+ ],
3625
+ "verifiableCredential": [
3626
+ {
3627
+ "@context": [
3628
+ "https://www.w3.org/2018/credentials/v1",
3629
+ "https://schema.org"
3630
+ ],
3631
+ "id": "https://example.com/credentials/3732",
3632
+ "type": [
3633
+ "VerifiableCredential",
3634
+ "Person"
3635
+ ],
3636
+ "credentialSubject": {
3637
+ "id": "did:entity-storage:0x4757993355b921a8229bd780f30921b6a0216a72e6c3f37a09d13b8426a17def",
3638
+ "name": "Jane Doe"
3639
+ },
3640
+ "issuer": "did:entity-storage:0x879c31386f992cfa29b77fe31e37256d69f6a57653cee4eb60ad4c4613c5515a",
3641
+ "issuanceDate": "2025-01-24T09:21:51.500Z",
3642
+ "credentialStatus": {
3643
+ "id": "did:entity-storage:0x879c31386f992cfa29b77fe31e37256d69f6a57653cee4eb60ad4c4613c5515a#revocation",
3644
+ "type": "BitstringStatusList",
3645
+ "revocationBitmapIndex": "5"
3646
+ }
3647
+ }
3648
+ ]
3649
+ }
3650
+ }
3651
+ }
3652
+ }
3653
+ }
3654
+ },
3655
+ "responses": {
3656
+ "200": {
3657
+ "description": "Response to verifying a verifiable presentation.",
3658
+ "content": {
3659
+ "application/json": {
3660
+ "schema": {
3661
+ "$ref": "#/components/schemas/IdentityVerifiablePresentationVerifyResponse"
3662
+ },
3663
+ "examples": {
3664
+ "identityVerifiablePresentationVerifyResponseExample": {
3665
+ "value": {
3666
+ "revoked": false,
3667
+ "verifiablePresentation": {
3668
+ "@context": [
3669
+ "https://www.w3.org/2018/credentials/v1",
3670
+ "https://schema.org"
3671
+ ],
3672
+ "id": "presentationId",
3673
+ "type": [
3674
+ "VerifiablePresentation",
3675
+ "Person"
3676
+ ],
3677
+ "verifiableCredential": [
3678
+ "eyJraWQiOi...D1Z3AQ"
3679
+ ],
3680
+ "holder": "did:entity-storage:0xcea318e06e89f3fb4048160770effd84d0cfa5801fee13dfa6f9413a00429cec"
3681
+ }
3682
+ }
3683
+ }
3684
+ }
3685
+ }
3686
+ }
3687
+ },
3688
+ "400": {
3689
+ "description": "The server cannot process the request, see the content for more details.",
3690
+ "content": {
3691
+ "application/json": {
3692
+ "schema": {
3693
+ "$ref": "#/components/schemas/Error"
3694
+ },
3695
+ "examples": {
3696
+ "exampleResponse": {
3697
+ "value": {
3698
+ "name": "GeneralError",
3699
+ "message": "errorMessage",
3700
+ "properties": {
3701
+ "foo": "bar"
3702
+ }
3703
+ }
3704
+ }
3705
+ }
3706
+ }
3707
+ }
3708
+ },
3709
+ "500": {
3710
+ "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
3711
+ "content": {
3712
+ "application/json": {
3713
+ "schema": {
3714
+ "$ref": "#/components/schemas/Error"
3715
+ },
3716
+ "examples": {
3717
+ "exampleResponse": {
3718
+ "value": {
3719
+ "name": "InternalServerError",
3720
+ "message": "errorMessage"
3721
+ }
3722
+ }
3723
+ }
3724
+ }
3725
+ }
3726
+ }
3727
+ }
3728
+ }
3729
+ },
3365
3730
  "/identity/verifiable-presentation/verify": {
3366
3731
  "get": {
3367
3732
  "operationId": "identityVerifiablePresentationVerify",
@@ -4578,22 +4943,107 @@
4578
4943
  }
4579
4944
  }
4580
4945
  },
4581
- "get": {
4582
- "operationId": "blobStorageQuery",
4583
- "summary": "Query the items from blob storage",
4946
+ "delete": {
4947
+ "operationId": "blobStorageEmpty",
4948
+ "summary": "Remove all entries from blob storage",
4584
4949
  "tags": [
4585
4950
  "Blob Storage"
4586
4951
  ],
4587
- "parameters": [
4952
+ "security": [
4588
4953
  {
4589
- "name": "conditions",
4590
- "description": "The condition for the query as JSON version of EntityCondition type.",
4591
- "in": "query",
4592
- "required": false,
4593
- "schema": {
4594
- "type": "string"
4954
+ "jwtBearerAuthScheme": []
4955
+ }
4956
+ ],
4957
+ "requestBody": {
4958
+ "description": "Request to remove all entries from blob storage.",
4959
+ "required": true,
4960
+ "content": {
4961
+ "text/plain": {
4962
+ "schema": {
4963
+ "$ref": "https://schema.twindev.org/blob-storage/BlobStorageEmptyRequest"
4964
+ }
4595
4965
  }
4596
- },
4966
+ }
4967
+ },
4968
+ "responses": {
4969
+ "204": {
4970
+ "description": "The rest request ended in success with no data."
4971
+ },
4972
+ "400": {
4973
+ "description": "The server cannot process the request, see the content for more details.",
4974
+ "content": {
4975
+ "application/json": {
4976
+ "schema": {
4977
+ "$ref": "#/components/schemas/Error"
4978
+ },
4979
+ "examples": {
4980
+ "exampleResponse": {
4981
+ "value": {
4982
+ "name": "GeneralError",
4983
+ "message": "errorMessage",
4984
+ "properties": {
4985
+ "foo": "bar"
4986
+ }
4987
+ }
4988
+ }
4989
+ }
4990
+ }
4991
+ }
4992
+ },
4993
+ "401": {
4994
+ "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
4995
+ "content": {
4996
+ "application/json": {
4997
+ "schema": {
4998
+ "$ref": "#/components/schemas/Error"
4999
+ },
5000
+ "examples": {
5001
+ "exampleResponse": {
5002
+ "value": {
5003
+ "name": "UnauthorizedError",
5004
+ "message": "errorMessage"
5005
+ }
5006
+ }
5007
+ }
5008
+ }
5009
+ }
5010
+ },
5011
+ "500": {
5012
+ "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
5013
+ "content": {
5014
+ "application/json": {
5015
+ "schema": {
5016
+ "$ref": "#/components/schemas/Error"
5017
+ },
5018
+ "examples": {
5019
+ "exampleResponse": {
5020
+ "value": {
5021
+ "name": "InternalServerError",
5022
+ "message": "errorMessage"
5023
+ }
5024
+ }
5025
+ }
5026
+ }
5027
+ }
5028
+ }
5029
+ }
5030
+ },
5031
+ "get": {
5032
+ "operationId": "blobStorageQuery",
5033
+ "summary": "Query the items from blob storage",
5034
+ "tags": [
5035
+ "Blob Storage"
5036
+ ],
5037
+ "parameters": [
5038
+ {
5039
+ "name": "conditions",
5040
+ "description": "The condition for the query as JSON version of EntityCondition type.",
5041
+ "in": "query",
5042
+ "required": false,
5043
+ "schema": {
5044
+ "type": "string"
5045
+ }
5046
+ },
4597
5047
  {
4598
5048
  "name": "orderBy",
4599
5049
  "description": "The order for the results, default to created.",
@@ -15155,114 +15605,557 @@
15155
15605
  }
15156
15606
  }
15157
15607
  },
15158
- "/catalog/request": {
15159
- "post": {
15160
- "operationId": "catalogRequest",
15161
- "summary": "Query the federated catalogue for datasets",
15608
+ "/catalog/request": {
15609
+ "post": {
15610
+ "operationId": "catalogRequest",
15611
+ "summary": "Query the federated catalogue for datasets",
15612
+ "tags": [
15613
+ "Federated Catalogue"
15614
+ ],
15615
+ "parameters": [
15616
+ {
15617
+ "name": "cursor",
15618
+ "description": "Opaque cursor token for pagination.",
15619
+ "in": "query",
15620
+ "required": false,
15621
+ "schema": {
15622
+ "type": "string"
15623
+ }
15624
+ },
15625
+ {
15626
+ "name": "limit",
15627
+ "description": "Limit for pagination.",
15628
+ "in": "query",
15629
+ "required": false,
15630
+ "schema": {
15631
+ "type": "string"
15632
+ }
15633
+ }
15634
+ ],
15635
+ "security": [
15636
+ {
15637
+ "jwtBearerAuthScheme": []
15638
+ }
15639
+ ],
15640
+ "requestBody": {
15641
+ "description": "The request parameters for the catalog request method.",
15642
+ "required": true,
15643
+ "content": {
15644
+ "application/json": {
15645
+ "schema": {
15646
+ "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolCatalogRequestMessage"
15647
+ },
15648
+ "examples": {
15649
+ "catalogRequestExample": {
15650
+ "value": {
15651
+ "@context": [
15652
+ "https://w3id.org/dspace/2025/1/context.jsonld"
15653
+ ],
15654
+ "@type": "CatalogRequestMessage",
15655
+ "filter": [
15656
+ {
15657
+ "dcterms:title": "Energy Consumption Data"
15658
+ }
15659
+ ]
15660
+ }
15661
+ },
15662
+ "catalogRequestNoFilterExample": {
15663
+ "value": {
15664
+ "@context": [
15665
+ "https://w3id.org/dspace/2025/1/context.jsonld"
15666
+ ],
15667
+ "@type": "CatalogRequestMessage"
15668
+ }
15669
+ }
15670
+ }
15671
+ }
15672
+ }
15673
+ },
15674
+ "responses": {
15675
+ "200": {
15676
+ "description": "The response payload for the catalog request method.\nReturns a DS Protocol compliant Catalog with participantId, or CatalogError if no datasets found.",
15677
+ "content": {
15678
+ "application/json": {
15679
+ "schema": {
15680
+ "$ref": "#/components/schemas/CatalogRequestResponse"
15681
+ },
15682
+ "examples": {
15683
+ "catalogRequestResponseExample": {
15684
+ "value": {
15685
+ "@context": [
15686
+ "https://w3id.org/dspace/2025/1/context.jsonld"
15687
+ ],
15688
+ "@id": "urn:x-catalog:a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2",
15689
+ "@type": "Catalog",
15690
+ "participantId": "did:example:node-identity-123",
15691
+ "dataset": [
15692
+ {
15693
+ "@id": "urn:uuid:dataset-123",
15694
+ "@type": "Dataset",
15695
+ "dcterms:title": "Energy Consumption Data",
15696
+ "dcterms:description": "Historical energy consumption data",
15697
+ "hasPolicy": [
15698
+ {
15699
+ "@id": "urn:uuid:policy-456",
15700
+ "@type": "Offer",
15701
+ "assigner": "did:example:data-provider-789"
15702
+ }
15703
+ ],
15704
+ "distribution": [
15705
+ {
15706
+ "@id": "urn:uuid:distribution-789",
15707
+ "@type": "Distribution",
15708
+ "format": "application/json",
15709
+ "accessService": {
15710
+ "@id": "urn:uuid:access-service-321",
15711
+ "@type": "DataService",
15712
+ "endpointURL": "https://example.com/data-access"
15713
+ }
15714
+ }
15715
+ ]
15716
+ }
15717
+ ]
15718
+ }
15719
+ }
15720
+ }
15721
+ }
15722
+ }
15723
+ },
15724
+ "400": {
15725
+ "description": "The server cannot process the request, see the content for more details.",
15726
+ "content": {
15727
+ "application/json": {
15728
+ "schema": {
15729
+ "$ref": "#/components/schemas/Error"
15730
+ },
15731
+ "examples": {
15732
+ "exampleResponse": {
15733
+ "value": {
15734
+ "name": "GeneralError",
15735
+ "message": "errorMessage",
15736
+ "properties": {
15737
+ "foo": "bar"
15738
+ }
15739
+ }
15740
+ }
15741
+ }
15742
+ }
15743
+ }
15744
+ },
15745
+ "401": {
15746
+ "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
15747
+ "content": {
15748
+ "application/json": {
15749
+ "schema": {
15750
+ "$ref": "#/components/schemas/Error"
15751
+ },
15752
+ "examples": {
15753
+ "exampleResponse": {
15754
+ "value": {
15755
+ "name": "UnauthorizedError",
15756
+ "message": "errorMessage"
15757
+ }
15758
+ }
15759
+ }
15760
+ }
15761
+ }
15762
+ },
15763
+ "500": {
15764
+ "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
15765
+ "content": {
15766
+ "application/json": {
15767
+ "schema": {
15768
+ "$ref": "#/components/schemas/Error"
15769
+ },
15770
+ "examples": {
15771
+ "exampleResponse": {
15772
+ "value": {
15773
+ "name": "InternalServerError",
15774
+ "message": "errorMessage"
15775
+ }
15776
+ }
15777
+ }
15778
+ }
15779
+ }
15780
+ }
15781
+ }
15782
+ }
15783
+ },
15784
+ "/catalog/datasets/{datasetId}": {
15785
+ "get": {
15786
+ "operationId": "getDataset",
15787
+ "summary": "Retrieve a specific dataset by ID",
15788
+ "tags": [
15789
+ "Federated Catalogue"
15790
+ ],
15791
+ "parameters": [
15792
+ {
15793
+ "name": "datasetId",
15794
+ "description": "The unique identifier of the dataset.",
15795
+ "in": "path",
15796
+ "required": true,
15797
+ "schema": {
15798
+ "type": "string"
15799
+ },
15800
+ "style": "simple",
15801
+ "example": "urn:uuid:dataset-123"
15802
+ }
15803
+ ],
15804
+ "security": [
15805
+ {
15806
+ "jwtBearerAuthScheme": []
15807
+ }
15808
+ ],
15809
+ "responses": {
15810
+ "200": {
15811
+ "description": "The response payload for the get dataset method.",
15812
+ "content": {
15813
+ "application/json": {
15814
+ "schema": {
15815
+ "$ref": "#/components/schemas/GetDatasetResponse"
15816
+ },
15817
+ "examples": {
15818
+ "getDatasetResponseExample": {
15819
+ "value": {
15820
+ "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
15821
+ "@id": "urn:uuid:dataset-123",
15822
+ "@type": "dcat:Dataset",
15823
+ "dcterms:title": "Energy Consumption Data",
15824
+ "dcterms:description": "Historical energy consumption data"
15825
+ }
15826
+ }
15827
+ }
15828
+ }
15829
+ }
15830
+ },
15831
+ "400": {
15832
+ "description": "The server cannot process the request, see the content for more details.",
15833
+ "content": {
15834
+ "application/json": {
15835
+ "schema": {
15836
+ "$ref": "#/components/schemas/Error"
15837
+ },
15838
+ "examples": {
15839
+ "exampleResponse": {
15840
+ "value": {
15841
+ "name": "GeneralError",
15842
+ "message": "errorMessage",
15843
+ "properties": {
15844
+ "foo": "bar"
15845
+ }
15846
+ }
15847
+ }
15848
+ }
15849
+ }
15850
+ }
15851
+ },
15852
+ "401": {
15853
+ "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
15854
+ "content": {
15855
+ "application/json": {
15856
+ "schema": {
15857
+ "$ref": "#/components/schemas/Error"
15858
+ },
15859
+ "examples": {
15860
+ "exampleResponse": {
15861
+ "value": {
15862
+ "name": "UnauthorizedError",
15863
+ "message": "errorMessage"
15864
+ }
15865
+ }
15866
+ }
15867
+ }
15868
+ }
15869
+ },
15870
+ "500": {
15871
+ "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
15872
+ "content": {
15873
+ "application/json": {
15874
+ "schema": {
15875
+ "$ref": "#/components/schemas/Error"
15876
+ },
15877
+ "examples": {
15878
+ "exampleResponse": {
15879
+ "value": {
15880
+ "name": "InternalServerError",
15881
+ "message": "errorMessage"
15882
+ }
15883
+ }
15884
+ }
15885
+ }
15886
+ }
15887
+ }
15888
+ }
15889
+ }
15890
+ },
15891
+ "/dataspace-data-plane/notify": {
15892
+ "post": {
15893
+ "operationId": "activityStreamNotify",
15894
+ "summary": "Notify of a new Activity",
15895
+ "tags": [
15896
+ "Dataspace Data Plane"
15897
+ ],
15898
+ "security": [
15899
+ {
15900
+ "jwtBearerAuthScheme": []
15901
+ }
15902
+ ],
15903
+ "requestBody": {
15904
+ "description": "Activity Stream Notify Request.",
15905
+ "required": true,
15906
+ "content": {
15907
+ "application/ld+json": {
15908
+ "schema": {
15909
+ "$ref": "https://schema.twindev.org/w3c-activity-streams/ActivityStreamsActivity"
15910
+ },
15911
+ "examples": {
15912
+ "activityStreamNotifyRequestExample": {
15913
+ "value": {
15914
+ "@context": "https://www.w3.org/ns/activitystreams",
15915
+ "type": "Add",
15916
+ "actor": {
15917
+ "id": "did:iota:testnet:0x123456"
15918
+ },
15919
+ "object": {
15920
+ "@context": "https://vocabulary.uncefact.org",
15921
+ "@type": "Consignment",
15922
+ "globalId": "24KEP051219453I002610796"
15923
+ },
15924
+ "updated": "2025-08-12T12:00:00Z"
15925
+ }
15926
+ }
15927
+ }
15928
+ }
15929
+ }
15930
+ },
15931
+ "responses": {
15932
+ "200": {
15933
+ "description": "Activity Stream Notify Response.",
15934
+ "content": {
15935
+ "application/json": {
15936
+ "schema": {
15937
+ "$ref": "#/components/schemas/ActivityLogEntry"
15938
+ }
15939
+ }
15940
+ }
15941
+ },
15942
+ "400": {
15943
+ "description": "The server cannot process the request, see the content for more details.",
15944
+ "content": {
15945
+ "application/json": {
15946
+ "schema": {
15947
+ "$ref": "#/components/schemas/Error"
15948
+ },
15949
+ "examples": {
15950
+ "exampleResponse": {
15951
+ "value": {
15952
+ "name": "GeneralError",
15953
+ "message": "errorMessage",
15954
+ "properties": {
15955
+ "foo": "bar"
15956
+ }
15957
+ }
15958
+ }
15959
+ }
15960
+ }
15961
+ }
15962
+ },
15963
+ "401": {
15964
+ "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
15965
+ "content": {
15966
+ "application/json": {
15967
+ "schema": {
15968
+ "$ref": "#/components/schemas/Error"
15969
+ },
15970
+ "examples": {
15971
+ "exampleResponse": {
15972
+ "value": {
15973
+ "name": "UnauthorizedError",
15974
+ "message": "errorMessage"
15975
+ }
15976
+ }
15977
+ }
15978
+ }
15979
+ }
15980
+ },
15981
+ "422": {
15982
+ "description": "The server cannot process the request, see the content for more details.",
15983
+ "content": {
15984
+ "application/json": {
15985
+ "schema": {
15986
+ "$ref": "#/components/schemas/Error"
15987
+ },
15988
+ "examples": {
15989
+ "exampleResponse": {
15990
+ "value": {
15991
+ "name": "UnprocessableError",
15992
+ "message": "errorMessage"
15993
+ }
15994
+ }
15995
+ }
15996
+ }
15997
+ }
15998
+ },
15999
+ "500": {
16000
+ "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
16001
+ "content": {
16002
+ "application/json": {
16003
+ "schema": {
16004
+ "$ref": "#/components/schemas/Error"
16005
+ },
16006
+ "examples": {
16007
+ "exampleResponse": {
16008
+ "value": {
16009
+ "name": "InternalServerError",
16010
+ "message": "errorMessage"
16011
+ }
16012
+ }
16013
+ }
16014
+ }
16015
+ }
16016
+ }
16017
+ }
16018
+ }
16019
+ },
16020
+ "/dataspace-data-plane/activity-logs/{id}": {
16021
+ "get": {
16022
+ "operationId": "dataspaceDataPlaneGetActivityLogEntry",
16023
+ "summary": "Get a Activity Log Entry",
16024
+ "tags": [
16025
+ "Dataspace Data Plane"
16026
+ ],
16027
+ "parameters": [
16028
+ {
16029
+ "name": "id",
16030
+ "description": "",
16031
+ "in": "path",
16032
+ "required": true,
16033
+ "schema": {
16034
+ "type": "string"
16035
+ },
16036
+ "style": "simple",
16037
+ "example": "urn:x-activity-log:1234567"
16038
+ }
16039
+ ],
16040
+ "security": [
16041
+ {
16042
+ "jwtBearerAuthScheme": []
16043
+ }
16044
+ ],
16045
+ "responses": {
16046
+ "200": {
16047
+ "description": "Service Offering response",
16048
+ "content": {
16049
+ "application/json": {
16050
+ "schema": {
16051
+ "$ref": "#/components/schemas/ActivityLogEntry"
16052
+ },
16053
+ "examples": {
16054
+ "activityLogEntryGetResponseExample": {
16055
+ "value": {
16056
+ "id": "urn:x-activity-log:134567",
16057
+ "dateCreated": "2025-08-12T12:00:00Z",
16058
+ "dateModified": "2025-08-12T12:00:00Z",
16059
+ "generator": "did:iota:testnet:123456",
16060
+ "status": "pending",
16061
+ "tasks": [
16062
+ {
16063
+ "taskId": "urn:x-task-id:45678",
16064
+ "dataspaceAppId": "https://my-app.example.org/app1",
16065
+ "status": "pending"
16066
+ }
16067
+ ]
16068
+ }
16069
+ }
16070
+ }
16071
+ }
16072
+ }
16073
+ },
16074
+ "400": {
16075
+ "description": "The server cannot process the request, see the content for more details.",
16076
+ "content": {
16077
+ "application/json": {
16078
+ "schema": {
16079
+ "$ref": "#/components/schemas/Error"
16080
+ },
16081
+ "examples": {
16082
+ "exampleResponse": {
16083
+ "value": {
16084
+ "name": "GeneralError",
16085
+ "message": "errorMessage",
16086
+ "properties": {
16087
+ "foo": "bar"
16088
+ }
16089
+ }
16090
+ }
16091
+ }
16092
+ }
16093
+ }
16094
+ },
16095
+ "401": {
16096
+ "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
16097
+ "content": {
16098
+ "application/json": {
16099
+ "schema": {
16100
+ "$ref": "#/components/schemas/Error"
16101
+ },
16102
+ "examples": {
16103
+ "exampleResponse": {
16104
+ "value": {
16105
+ "name": "UnauthorizedError",
16106
+ "message": "errorMessage"
16107
+ }
16108
+ }
16109
+ }
16110
+ }
16111
+ }
16112
+ },
16113
+ "500": {
16114
+ "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
16115
+ "content": {
16116
+ "application/json": {
16117
+ "schema": {
16118
+ "$ref": "#/components/schemas/Error"
16119
+ },
16120
+ "examples": {
16121
+ "exampleResponse": {
16122
+ "value": {
16123
+ "name": "InternalServerError",
16124
+ "message": "errorMessage"
16125
+ }
16126
+ }
16127
+ }
16128
+ }
16129
+ }
16130
+ }
16131
+ }
16132
+ }
16133
+ },
16134
+ "/dataspace-data-plane/entities": {
16135
+ "get": {
16136
+ "operationId": "dataspaceDataPlaneGetDataAssetEntities",
16137
+ "summary": "Get Data Asset Entities",
15162
16138
  "tags": [
15163
- "Federated Catalogue"
15164
- ],
15165
- "parameters": [
15166
- {
15167
- "name": "cursor",
15168
- "description": "Opaque cursor token for pagination.",
15169
- "in": "query",
15170
- "required": false,
15171
- "schema": {
15172
- "type": "string"
15173
- }
15174
- },
15175
- {
15176
- "name": "limit",
15177
- "description": "Limit for pagination.",
15178
- "in": "query",
15179
- "required": false,
15180
- "schema": {
15181
- "type": "string"
15182
- }
15183
- }
15184
- ],
15185
- "security": [
15186
- {
15187
- "jwtBearerAuthScheme": []
15188
- }
16139
+ "Dataspace Data Plane"
15189
16140
  ],
15190
- "requestBody": {
15191
- "description": "The request parameters for the catalog request method.",
15192
- "required": true,
15193
- "content": {
15194
- "application/json": {
15195
- "schema": {
15196
- "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolCatalogRequestMessage"
15197
- },
15198
- "examples": {
15199
- "catalogRequestExample": {
15200
- "value": {
15201
- "@context": [
15202
- "https://w3id.org/dspace/2025/1/context.jsonld"
15203
- ],
15204
- "@type": "CatalogRequestMessage",
15205
- "filter": [
15206
- {
15207
- "dcterms:title": "Energy Consumption Data"
15208
- }
15209
- ]
15210
- }
15211
- },
15212
- "catalogRequestNoFilterExample": {
15213
- "value": {
15214
- "@context": [
15215
- "https://w3id.org/dspace/2025/1/context.jsonld"
15216
- ],
15217
- "@type": "CatalogRequestMessage"
15218
- }
15219
- }
15220
- }
15221
- }
15222
- }
15223
- },
15224
16141
  "responses": {
15225
16142
  "200": {
15226
- "description": "The response payload for the catalog request method.\nReturns a DS Protocol compliant Catalog with participantId, or CatalogError if no datasets found.",
16143
+ "description": "Response containing data asset entities with optional pagination Link header.",
15227
16144
  "content": {
15228
16145
  "application/json": {
15229
16146
  "schema": {
15230
- "$ref": "#/components/schemas/CatalogRequestResponse"
16147
+ "$ref": "#/components/schemas/DataAssetItemList"
15231
16148
  },
15232
16149
  "examples": {
15233
- "catalogRequestResponseExample": {
16150
+ "dataAssetEntitiesGetResponseExample": {
15234
16151
  "value": {
15235
- "@context": [
15236
- "https://w3id.org/dspace/2025/1/context.jsonld"
15237
- ],
15238
- "@id": "urn:x-catalog:a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6a7b8c9d0e1f2",
15239
- "@type": "Catalog",
15240
- "participantId": "did:example:node-identity-123",
15241
- "dataset": [
16152
+ "@context": "https://schema.org",
16153
+ "type": "ItemList",
16154
+ "itemListElement": [
15242
16155
  {
15243
- "@id": "urn:uuid:dataset-123",
15244
- "@type": "Dataset",
15245
- "dcterms:title": "Energy Consumption Data",
15246
- "dcterms:description": "Historical energy consumption data",
15247
- "hasPolicy": [
15248
- {
15249
- "@id": "urn:uuid:policy-456",
15250
- "@type": "Offer",
15251
- "assigner": "did:example:data-provider-789"
15252
- }
15253
- ],
15254
- "distribution": [
15255
- {
15256
- "@id": "urn:uuid:distribution-789",
15257
- "@type": "Distribution",
15258
- "format": "application/json",
15259
- "accessService": {
15260
- "@id": "urn:uuid:access-service-321",
15261
- "@type": "DataService",
15262
- "endpointURL": "https://example.com/data-access"
15263
- }
15264
- }
15265
- ]
16156
+ "@context": "https://vocabulary.uncefact.org/unece-context-D23B.jsonld",
16157
+ "type": "Consignment",
16158
+ "id": "urn:ucr:PL527288386100000"
15266
16159
  }
15267
16160
  ]
15268
16161
  }
@@ -15292,24 +16185,6 @@
15292
16185
  }
15293
16186
  }
15294
16187
  },
15295
- "401": {
15296
- "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
15297
- "content": {
15298
- "application/json": {
15299
- "schema": {
15300
- "$ref": "#/components/schemas/Error"
15301
- },
15302
- "examples": {
15303
- "exampleResponse": {
15304
- "value": {
15305
- "name": "UnauthorizedError",
15306
- "message": "errorMessage"
15307
- }
15308
- }
15309
- }
15310
- }
15311
- }
15312
- },
15313
16188
  "500": {
15314
16189
  "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
15315
16190
  "content": {
@@ -15331,47 +16206,55 @@
15331
16206
  }
15332
16207
  }
15333
16208
  },
15334
- "/catalog/datasets/{datasetId}": {
15335
- "get": {
15336
- "operationId": "getDataset",
15337
- "summary": "Retrieve a specific dataset by ID",
16209
+ "/dataspace-data-plane/entities/query": {
16210
+ "post": {
16211
+ "operationId": "dataspaceDataPlaneQueryDataAsset",
16212
+ "summary": "Query Data Asset",
15338
16213
  "tags": [
15339
- "Federated Catalogue"
15340
- ],
15341
- "parameters": [
15342
- {
15343
- "name": "datasetId",
15344
- "description": "The unique identifier of the dataset.",
15345
- "in": "path",
15346
- "required": true,
15347
- "schema": {
15348
- "type": "string"
15349
- },
15350
- "style": "simple",
15351
- "example": "urn:uuid:dataset-123"
15352
- }
16214
+ "Dataspace Data Plane"
15353
16215
  ],
15354
- "security": [
15355
- {
15356
- "jwtBearerAuthScheme": []
16216
+ "requestBody": {
16217
+ "description": "Request to query data asset entities.",
16218
+ "required": true,
16219
+ "content": {
16220
+ "application/json": {
16221
+ "schema": {
16222
+ "$ref": "#/components/schemas/DataAssetQueryRequest"
16223
+ },
16224
+ "examples": {
16225
+ "dataAssetQueryRequestExample": {
16226
+ "value": {
16227
+ "consumerPid": "urn:uuid:consumer-pid-12345",
16228
+ "query": {
16229
+ "type": "Example",
16230
+ "q": "example query"
16231
+ }
16232
+ }
16233
+ }
16234
+ }
16235
+ }
15357
16236
  }
15358
- ],
16237
+ },
15359
16238
  "responses": {
15360
16239
  "200": {
15361
- "description": "The response payload for the get dataset method.",
16240
+ "description": "Response containing data asset entities with optional pagination Link header.",
15362
16241
  "content": {
15363
16242
  "application/json": {
15364
16243
  "schema": {
15365
- "$ref": "#/components/schemas/GetDatasetResponse"
16244
+ "$ref": "#/components/schemas/DataAssetItemList"
15366
16245
  },
15367
16246
  "examples": {
15368
- "getDatasetResponseExample": {
16247
+ "dataAssetQueryResponseExample": {
15369
16248
  "value": {
15370
- "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
15371
- "@id": "urn:uuid:dataset-123",
15372
- "@type": "dcat:Dataset",
15373
- "dcterms:title": "Energy Consumption Data",
15374
- "dcterms:description": "Historical energy consumption data"
16249
+ "@context": "https://schema.org",
16250
+ "type": "ItemList",
16251
+ "itemListElement": [
16252
+ {
16253
+ "@context": "https://vocabulary.uncefact.org/unece-context-D23B.jsonld",
16254
+ "type": "Consignment",
16255
+ "id": "urn:ucr:PL527288386100000"
16256
+ }
16257
+ ]
15375
16258
  }
15376
16259
  }
15377
16260
  }
@@ -15399,24 +16282,6 @@
15399
16282
  }
15400
16283
  }
15401
16284
  },
15402
- "401": {
15403
- "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
15404
- "content": {
15405
- "application/json": {
15406
- "schema": {
15407
- "$ref": "#/components/schemas/Error"
15408
- },
15409
- "examples": {
15410
- "exampleResponse": {
15411
- "value": {
15412
- "name": "UnauthorizedError",
15413
- "message": "errorMessage"
15414
- }
15415
- }
15416
- }
15417
- }
15418
- }
15419
- },
15420
16285
  "500": {
15421
16286
  "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
15422
16287
  "content": {
@@ -15438,40 +16303,50 @@
15438
16303
  }
15439
16304
  }
15440
16305
  },
15441
- "/dataspace-data-plane/notify": {
16306
+ "/dataspace-control-plane/transfers/request": {
15442
16307
  "post": {
15443
- "operationId": "activityStreamNotify",
15444
- "summary": "Notify of a new Activity",
16308
+ "operationId": "requestTransfer",
16309
+ "summary": "Request Transfer Process (DSP)",
15445
16310
  "tags": [
15446
- "Dataspace Data Plane"
16311
+ "Transfer Process"
15447
16312
  ],
15448
- "security": [
16313
+ "parameters": [
15449
16314
  {
15450
- "jwtBearerAuthScheme": []
16315
+ "name": "authorization",
16316
+ "in": "header",
16317
+ "required": true,
16318
+ "schema": {
16319
+ "type": "string"
16320
+ },
16321
+ "style": "simple",
16322
+ "example": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
15451
16323
  }
15452
16324
  ],
15453
16325
  "requestBody": {
15454
- "description": "Activity Stream Notify Request.",
16326
+ "description": "API request for requesting a transfer process.",
15455
16327
  "required": true,
15456
16328
  "content": {
15457
16329
  "application/ld+json": {
15458
16330
  "schema": {
15459
- "$ref": "https://schema.twindev.org/w3c-activity-streams/ActivityStreamsActivity"
16331
+ "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolTransferRequestMessage"
15460
16332
  },
15461
16333
  "examples": {
15462
- "activityStreamNotifyRequestExample": {
16334
+ "requestTransferRequestExample": {
15463
16335
  "value": {
15464
- "@context": "https://www.w3.org/ns/activitystreams",
15465
- "type": "Add",
15466
- "actor": {
15467
- "id": "did:iota:testnet:0x123456"
15468
- },
15469
- "object": {
15470
- "@context": "https://vocabulary.uncefact.org",
15471
- "@type": "Consignment",
15472
- "globalId": "24KEP051219453I002610796"
16336
+ "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16337
+ "@type": "TransferRequestMessage",
16338
+ "processId": "urn:uuid:consumer-process-12345",
16339
+ "consumerPid": "urn:uuid:consumer-process-12345",
16340
+ "providerPid": "urn:uuid:provider-process-12345",
16341
+ "agreementId": "urn:uuid:agreement-12345",
16342
+ "dataAddress": {
16343
+ "@type": "DataAddress",
16344
+ "@id": "https://provider.example.com/data",
16345
+ "endpointType": "https://w3id.org/dspace/v1/HttpDataAddress",
16346
+ "baseUrl": "https://provider.example.com/data"
15473
16347
  },
15474
- "updated": "2025-08-12T12:00:00Z"
16348
+ "callbackAddress": "https://consumer.example.com/transfer/webhook",
16349
+ "format": "urn:example:format"
15475
16350
  }
15476
16351
  }
15477
16352
  }
@@ -15480,29 +16355,26 @@
15480
16355
  },
15481
16356
  "responses": {
15482
16357
  "200": {
15483
- "description": "Activity Stream Notify Response.",
15484
- "content": {
15485
- "application/json": {
15486
- "schema": {
15487
- "$ref": "#/components/schemas/ActivityLogEntry"
15488
- }
15489
- }
15490
- }
15491
- },
15492
- "400": {
15493
- "description": "The server cannot process the request, see the content for more details.",
16358
+ "description": "API response for requesting a transfer process.",
15494
16359
  "content": {
15495
16360
  "application/json": {
15496
16361
  "schema": {
15497
- "$ref": "#/components/schemas/Error"
16362
+ "$ref": "#/components/schemas/RequestTransferResponse"
15498
16363
  },
15499
16364
  "examples": {
15500
- "exampleResponse": {
16365
+ "requestTransferResponseExample": {
15501
16366
  "value": {
15502
- "name": "GeneralError",
15503
- "message": "errorMessage",
15504
- "properties": {
15505
- "foo": "bar"
16367
+ "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16368
+ "@type": "TransferProcess",
16369
+ "processId": "urn:uuid:provider-process-12345",
16370
+ "consumerPid": "urn:uuid:consumer-process-12345",
16371
+ "providerPid": "urn:uuid:provider-process-12345",
16372
+ "state": "STARTED",
16373
+ "dataAddress": {
16374
+ "@type": "DataAddress",
16375
+ "@id": "https://provider.example.com/data/transfer-12345",
16376
+ "endpointType": "https://w3id.org/dspace/v1/HttpDataAddress",
16377
+ "baseUrl": "https://provider.example.com/data/transfer-12345"
15506
16378
  }
15507
16379
  }
15508
16380
  }
@@ -15510,25 +16382,7 @@
15510
16382
  }
15511
16383
  }
15512
16384
  },
15513
- "401": {
15514
- "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
15515
- "content": {
15516
- "application/json": {
15517
- "schema": {
15518
- "$ref": "#/components/schemas/Error"
15519
- },
15520
- "examples": {
15521
- "exampleResponse": {
15522
- "value": {
15523
- "name": "UnauthorizedError",
15524
- "message": "errorMessage"
15525
- }
15526
- }
15527
- }
15528
- }
15529
- }
15530
- },
15531
- "422": {
16385
+ "400": {
15532
16386
  "description": "The server cannot process the request, see the content for more details.",
15533
16387
  "content": {
15534
16388
  "application/json": {
@@ -15538,8 +16392,11 @@
15538
16392
  "examples": {
15539
16393
  "exampleResponse": {
15540
16394
  "value": {
15541
- "name": "UnprocessableError",
15542
- "message": "errorMessage"
16395
+ "name": "GeneralError",
16396
+ "message": "errorMessage",
16397
+ "properties": {
16398
+ "foo": "bar"
16399
+ }
15543
16400
  }
15544
16401
  }
15545
16402
  }
@@ -15567,54 +16424,59 @@
15567
16424
  }
15568
16425
  }
15569
16426
  },
15570
- "/dataspace-data-plane/activity-logs/{id}": {
16427
+ "/dataspace-control-plane/transfers/{pid}": {
15571
16428
  "get": {
15572
- "operationId": "dataspaceDataPlaneGetActivityLogEntry",
15573
- "summary": "Get a Activity Log Entry",
16429
+ "operationId": "getTransferProcess",
16430
+ "summary": "Get Transfer Process state (DSP)",
15574
16431
  "tags": [
15575
- "Dataspace Data Plane"
16432
+ "Transfer Process"
15576
16433
  ],
15577
16434
  "parameters": [
15578
16435
  {
15579
- "name": "id",
15580
- "description": "",
16436
+ "name": "pid",
16437
+ "description": "Process ID (consumerPid or providerPid).",
15581
16438
  "in": "path",
15582
16439
  "required": true,
15583
16440
  "schema": {
15584
16441
  "type": "string"
15585
16442
  },
15586
16443
  "style": "simple",
15587
- "example": "urn:x-activity-log:1234567"
15588
- }
15589
- ],
15590
- "security": [
16444
+ "example": "urn:uuid:provider-process-12345"
16445
+ },
15591
16446
  {
15592
- "jwtBearerAuthScheme": []
16447
+ "name": "authorization",
16448
+ "in": "header",
16449
+ "required": true,
16450
+ "schema": {
16451
+ "type": "string"
16452
+ },
16453
+ "style": "simple",
16454
+ "example": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
15593
16455
  }
15594
16456
  ],
15595
16457
  "responses": {
15596
16458
  "200": {
15597
- "description": "Service Offering response",
16459
+ "description": "API response for getting a transfer process state.",
15598
16460
  "content": {
15599
16461
  "application/json": {
15600
16462
  "schema": {
15601
- "$ref": "#/components/schemas/ActivityLogEntry"
16463
+ "$ref": "#/components/schemas/GetTransferProcessResponse"
15602
16464
  },
15603
16465
  "examples": {
15604
- "activityLogEntryGetResponseExample": {
16466
+ "getTransferProcessResponseExample": {
15605
16467
  "value": {
15606
- "id": "urn:x-activity-log:134567",
15607
- "dateCreated": "2025-08-12T12:00:00Z",
15608
- "dateModified": "2025-08-12T12:00:00Z",
15609
- "generator": "did:iota:testnet:123456",
15610
- "status": "pending",
15611
- "tasks": [
15612
- {
15613
- "taskId": "urn:x-task-id:45678",
15614
- "dataspaceAppId": "https://my-app.example.org/app1",
15615
- "status": "pending"
15616
- }
15617
- ]
16468
+ "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16469
+ "@type": "TransferProcess",
16470
+ "processId": "urn:uuid:provider-process-12345",
16471
+ "consumerPid": "urn:uuid:consumer-process-12345",
16472
+ "providerPid": "urn:uuid:provider-process-12345",
16473
+ "state": "STARTED",
16474
+ "dataAddress": {
16475
+ "@type": "DataAddress",
16476
+ "@id": "https://provider.example.com/data/transfer-12345",
16477
+ "endpointType": "https://w3id.org/dspace/v1/HttpDataAddress",
16478
+ "baseUrl": "https://provider.example.com/data/transfer-12345"
16479
+ }
15618
16480
  }
15619
16481
  }
15620
16482
  }
@@ -15642,24 +16504,6 @@
15642
16504
  }
15643
16505
  }
15644
16506
  },
15645
- "401": {
15646
- "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
15647
- "content": {
15648
- "application/json": {
15649
- "schema": {
15650
- "$ref": "#/components/schemas/Error"
15651
- },
15652
- "examples": {
15653
- "exampleResponse": {
15654
- "value": {
15655
- "name": "UnauthorizedError",
15656
- "message": "errorMessage"
15657
- }
15658
- }
15659
- }
15660
- }
15661
- }
15662
- },
15663
16507
  "500": {
15664
16508
  "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
15665
16509
  "content": {
@@ -15681,33 +16525,72 @@
15681
16525
  }
15682
16526
  }
15683
16527
  },
15684
- "/dataspace-data-plane/entities": {
15685
- "get": {
15686
- "operationId": "dataspaceDataPlaneGetDataAssetEntities",
15687
- "summary": "Get Data Asset Entities",
16528
+ "/dataspace-control-plane/transfers/{pid}/start": {
16529
+ "post": {
16530
+ "operationId": "startTransfer",
16531
+ "summary": "Start Transfer Process (DSP)",
15688
16532
  "tags": [
15689
- "Dataspace Data Plane"
16533
+ "Transfer Process"
16534
+ ],
16535
+ "parameters": [
16536
+ {
16537
+ "name": "pid",
16538
+ "description": "Process ID (consumerPid).",
16539
+ "in": "path",
16540
+ "required": true,
16541
+ "schema": {
16542
+ "type": "string"
16543
+ },
16544
+ "style": "simple",
16545
+ "example": "urn:uuid:consumer-process-12345"
16546
+ },
16547
+ {
16548
+ "name": "authorization",
16549
+ "in": "header",
16550
+ "required": true,
16551
+ "schema": {
16552
+ "type": "string"
16553
+ },
16554
+ "style": "simple",
16555
+ "example": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
16556
+ }
15690
16557
  ],
16558
+ "requestBody": {
16559
+ "description": "API request for starting a transfer process.",
16560
+ "required": true,
16561
+ "content": {
16562
+ "application/ld+json": {
16563
+ "schema": {
16564
+ "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolTransferStartMessage"
16565
+ },
16566
+ "examples": {
16567
+ "startTransferRequestExample": {
16568
+ "value": {
16569
+ "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16570
+ "@type": "TransferStartMessage",
16571
+ "consumerPid": "urn:uuid:consumer-process-12345",
16572
+ "providerPid": "urn:uuid:provider-process-12345"
16573
+ }
16574
+ }
16575
+ }
16576
+ }
16577
+ }
16578
+ },
15691
16579
  "responses": {
15692
16580
  "200": {
15693
- "description": "Response containing data asset entities with optional pagination Link header.",
16581
+ "description": "API response for starting a transfer process.",
15694
16582
  "content": {
15695
16583
  "application/json": {
15696
16584
  "schema": {
15697
- "$ref": "#/components/schemas/DataAssetItemList"
16585
+ "$ref": "#/components/schemas/StartTransferResponse"
15698
16586
  },
15699
16587
  "examples": {
15700
- "dataAssetEntitiesGetResponseExample": {
16588
+ "startTransferResponseExample": {
15701
16589
  "value": {
15702
- "@context": "https://schema.org",
15703
- "type": "ItemList",
15704
- "itemListElement": [
15705
- {
15706
- "@context": "https://vocabulary.uncefact.org/unece-context-D23B.jsonld",
15707
- "type": "Consignment",
15708
- "id": "urn:ucr:PL527288386100000"
15709
- }
15710
- ]
16590
+ "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16591
+ "@type": "TransferStartMessage",
16592
+ "consumerPid": "urn:uuid:consumer-process-12345",
16593
+ "providerPid": "urn:uuid:provider-process-12345"
15711
16594
  }
15712
16595
  }
15713
16596
  }
@@ -15756,29 +16639,51 @@
15756
16639
  }
15757
16640
  }
15758
16641
  },
15759
- "/dataspace-data-plane/entities/query": {
16642
+ "/dataspace-control-plane/transfers/{pid}/complete": {
15760
16643
  "post": {
15761
- "operationId": "dataspaceDataPlaneQueryDataAsset",
15762
- "summary": "Query Data Asset",
16644
+ "operationId": "completeTransfer",
16645
+ "summary": "Complete Transfer Process (DSP)",
15763
16646
  "tags": [
15764
- "Dataspace Data Plane"
16647
+ "Transfer Process"
16648
+ ],
16649
+ "parameters": [
16650
+ {
16651
+ "name": "pid",
16652
+ "description": "Process ID (consumerPid).",
16653
+ "in": "path",
16654
+ "required": true,
16655
+ "schema": {
16656
+ "type": "string"
16657
+ },
16658
+ "style": "simple",
16659
+ "example": "urn:uuid:consumer-process-12345"
16660
+ },
16661
+ {
16662
+ "name": "authorization",
16663
+ "in": "header",
16664
+ "required": true,
16665
+ "schema": {
16666
+ "type": "string"
16667
+ },
16668
+ "style": "simple",
16669
+ "example": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
16670
+ }
15765
16671
  ],
15766
16672
  "requestBody": {
15767
- "description": "Request to query data asset entities.",
16673
+ "description": "API request for completing a transfer process.",
15768
16674
  "required": true,
15769
16675
  "content": {
15770
- "application/json": {
16676
+ "application/ld+json": {
15771
16677
  "schema": {
15772
- "$ref": "#/components/schemas/DataAssetQueryRequest"
16678
+ "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolTransferCompletionMessage"
15773
16679
  },
15774
16680
  "examples": {
15775
- "dataAssetQueryRequestExample": {
16681
+ "completeTransferRequestExample": {
15776
16682
  "value": {
15777
- "consumerPid": "urn:uuid:consumer-pid-12345",
15778
- "query": {
15779
- "type": "Example",
15780
- "q": "example query"
15781
- }
16683
+ "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16684
+ "@type": "TransferCompletionMessage",
16685
+ "consumerPid": "urn:uuid:consumer-process-12345",
16686
+ "providerPid": "urn:uuid:provider-process-12345"
15782
16687
  }
15783
16688
  }
15784
16689
  }
@@ -15787,24 +16692,27 @@
15787
16692
  },
15788
16693
  "responses": {
15789
16694
  "200": {
15790
- "description": "Response containing data asset entities with optional pagination Link header.",
16695
+ "description": "API response for completing a transfer process.",
15791
16696
  "content": {
15792
16697
  "application/json": {
15793
16698
  "schema": {
15794
- "$ref": "#/components/schemas/DataAssetItemList"
16699
+ "$ref": "#/components/schemas/CompleteTransferResponse"
15795
16700
  },
15796
16701
  "examples": {
15797
- "dataAssetQueryResponseExample": {
16702
+ "completeTransferResponseExample": {
15798
16703
  "value": {
15799
- "@context": "https://schema.org",
15800
- "type": "ItemList",
15801
- "itemListElement": [
15802
- {
15803
- "@context": "https://vocabulary.uncefact.org/unece-context-D23B.jsonld",
15804
- "type": "Consignment",
15805
- "id": "urn:ucr:PL527288386100000"
15806
- }
15807
- ]
16704
+ "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16705
+ "@type": "TransferProcess",
16706
+ "processId": "urn:uuid:provider-process-12345",
16707
+ "consumerPid": "urn:uuid:consumer-process-12345",
16708
+ "providerPid": "urn:uuid:provider-process-12345",
16709
+ "state": "COMPLETED",
16710
+ "dataAddress": {
16711
+ "@type": "DataAddress",
16712
+ "@id": "https://provider.example.com/data/transfer-12345",
16713
+ "endpointType": "https://w3id.org/dspace/v1/HttpDataAddress",
16714
+ "baseUrl": "https://provider.example.com/data/transfer-12345"
16715
+ }
15808
16716
  }
15809
16717
  }
15810
16718
  }
@@ -15853,14 +16761,25 @@
15853
16761
  }
15854
16762
  }
15855
16763
  },
15856
- "/dataspace-control-plane/transfers/request": {
16764
+ "/dataspace-control-plane/transfers/{pid}/suspend": {
15857
16765
  "post": {
15858
- "operationId": "requestTransfer",
15859
- "summary": "Request Transfer Process (DSP)",
16766
+ "operationId": "suspendTransfer",
16767
+ "summary": "Suspend Transfer Process (DSP)",
15860
16768
  "tags": [
15861
16769
  "Transfer Process"
15862
16770
  ],
15863
16771
  "parameters": [
16772
+ {
16773
+ "name": "pid",
16774
+ "description": "Process ID (consumerPid).",
16775
+ "in": "path",
16776
+ "required": true,
16777
+ "schema": {
16778
+ "type": "string"
16779
+ },
16780
+ "style": "simple",
16781
+ "example": "urn:uuid:consumer-process-12345"
16782
+ },
15864
16783
  {
15865
16784
  "name": "authorization",
15866
16785
  "in": "header",
@@ -15873,30 +16792,20 @@
15873
16792
  }
15874
16793
  ],
15875
16794
  "requestBody": {
15876
- "description": "API request for requesting a transfer process.",
16795
+ "description": "API request for suspending a transfer process.",
15877
16796
  "required": true,
15878
16797
  "content": {
15879
16798
  "application/ld+json": {
15880
16799
  "schema": {
15881
- "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolTransferRequestMessage"
16800
+ "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolTransferSuspensionMessage"
15882
16801
  },
15883
16802
  "examples": {
15884
- "requestTransferRequestExample": {
16803
+ "suspendTransferRequestExample": {
15885
16804
  "value": {
15886
16805
  "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
15887
- "@type": "TransferRequestMessage",
15888
- "processId": "urn:uuid:consumer-process-12345",
16806
+ "@type": "TransferSuspensionMessage",
15889
16807
  "consumerPid": "urn:uuid:consumer-process-12345",
15890
- "providerPid": "urn:uuid:provider-process-12345",
15891
- "agreementId": "urn:uuid:agreement-12345",
15892
- "dataAddress": {
15893
- "@type": "DataAddress",
15894
- "@id": "https://provider.example.com/data",
15895
- "endpointType": "https://w3id.org/dspace/v1/HttpDataAddress",
15896
- "baseUrl": "https://provider.example.com/data"
15897
- },
15898
- "callbackAddress": "https://consumer.example.com/transfer/webhook",
15899
- "format": "urn:example:format"
16808
+ "providerPid": "urn:uuid:provider-process-12345"
15900
16809
  }
15901
16810
  }
15902
16811
  }
@@ -15905,21 +16814,21 @@
15905
16814
  },
15906
16815
  "responses": {
15907
16816
  "200": {
15908
- "description": "API response for requesting a transfer process.",
16817
+ "description": "API response for suspending a transfer process.",
15909
16818
  "content": {
15910
16819
  "application/json": {
15911
16820
  "schema": {
15912
- "$ref": "#/components/schemas/RequestTransferResponse"
16821
+ "$ref": "#/components/schemas/SuspendTransferResponse"
15913
16822
  },
15914
16823
  "examples": {
15915
- "requestTransferResponseExample": {
16824
+ "suspendTransferResponseExample": {
15916
16825
  "value": {
15917
16826
  "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
15918
16827
  "@type": "TransferProcess",
15919
16828
  "processId": "urn:uuid:provider-process-12345",
15920
16829
  "consumerPid": "urn:uuid:consumer-process-12345",
15921
16830
  "providerPid": "urn:uuid:provider-process-12345",
15922
- "state": "STARTED",
16831
+ "state": "SUSPENDED",
15923
16832
  "dataAddress": {
15924
16833
  "@type": "DataAddress",
15925
16834
  "@id": "https://provider.example.com/data/transfer-12345",
@@ -15974,24 +16883,24 @@
15974
16883
  }
15975
16884
  }
15976
16885
  },
15977
- "/dataspace-control-plane/transfers/{pid}": {
15978
- "get": {
15979
- "operationId": "getTransferProcess",
15980
- "summary": "Get Transfer Process state (DSP)",
16886
+ "/dataspace-control-plane/transfers/{pid}/terminate": {
16887
+ "post": {
16888
+ "operationId": "terminateTransfer",
16889
+ "summary": "Terminate Transfer Process (DSP)",
15981
16890
  "tags": [
15982
16891
  "Transfer Process"
15983
16892
  ],
15984
16893
  "parameters": [
15985
16894
  {
15986
16895
  "name": "pid",
15987
- "description": "Process ID (consumerPid or providerPid).",
16896
+ "description": "Process ID (consumerPid).",
15988
16897
  "in": "path",
15989
16898
  "required": true,
15990
16899
  "schema": {
15991
16900
  "type": "string"
15992
16901
  },
15993
16902
  "style": "simple",
15994
- "example": "urn:uuid:provider-process-12345"
16903
+ "example": "urn:uuid:consumer-process-12345"
15995
16904
  },
15996
16905
  {
15997
16906
  "name": "authorization",
@@ -16004,23 +16913,44 @@
16004
16913
  "example": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
16005
16914
  }
16006
16915
  ],
16916
+ "requestBody": {
16917
+ "description": "API request for terminating a transfer process.",
16918
+ "required": true,
16919
+ "content": {
16920
+ "application/ld+json": {
16921
+ "schema": {
16922
+ "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolTransferTerminationMessage"
16923
+ },
16924
+ "examples": {
16925
+ "terminateTransferRequestExample": {
16926
+ "value": {
16927
+ "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16928
+ "@type": "TransferTerminationMessage",
16929
+ "consumerPid": "urn:uuid:consumer-process-12345",
16930
+ "providerPid": "urn:uuid:provider-process-12345"
16931
+ }
16932
+ }
16933
+ }
16934
+ }
16935
+ }
16936
+ },
16007
16937
  "responses": {
16008
16938
  "200": {
16009
- "description": "API response for getting a transfer process state.",
16939
+ "description": "API response for terminating a transfer process.",
16010
16940
  "content": {
16011
16941
  "application/json": {
16012
16942
  "schema": {
16013
- "$ref": "#/components/schemas/GetTransferProcessResponse"
16943
+ "$ref": "#/components/schemas/TerminateTransferResponse"
16014
16944
  },
16015
16945
  "examples": {
16016
- "getTransferProcessResponseExample": {
16946
+ "terminateTransferResponseExample": {
16017
16947
  "value": {
16018
16948
  "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16019
16949
  "@type": "TransferProcess",
16020
16950
  "processId": "urn:uuid:provider-process-12345",
16021
16951
  "consumerPid": "urn:uuid:consumer-process-12345",
16022
16952
  "providerPid": "urn:uuid:provider-process-12345",
16023
- "state": "STARTED",
16953
+ "state": "TERMINATED",
16024
16954
  "dataAddress": {
16025
16955
  "@type": "DataAddress",
16026
16956
  "@id": "https://provider.example.com/data/transfer-12345",
@@ -16075,74 +17005,159 @@
16075
17005
  }
16076
17006
  }
16077
17007
  },
16078
- "/dataspace-control-plane/transfers/{pid}/start": {
17008
+ "/dataspace-control-plane/app-datasets": {
16079
17009
  "post": {
16080
- "operationId": "startTransfer",
16081
- "summary": "Start Transfer Process (DSP)",
17010
+ "operationId": "datasetCreate",
17011
+ "summary": "Register an app dataset for the calling tenant.",
16082
17012
  "tags": [
16083
- "Transfer Process"
17013
+ "Datasets"
16084
17014
  ],
16085
- "parameters": [
16086
- {
16087
- "name": "pid",
16088
- "description": "Process ID (consumerPid).",
16089
- "in": "path",
16090
- "required": true,
16091
- "schema": {
16092
- "type": "string"
16093
- },
16094
- "style": "simple",
16095
- "example": "urn:uuid:consumer-process-12345"
16096
- },
17015
+ "security": [
16097
17016
  {
16098
- "name": "authorization",
16099
- "in": "header",
16100
- "required": true,
16101
- "schema": {
16102
- "type": "string"
16103
- },
16104
- "style": "simple",
16105
- "example": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
17017
+ "jwtBearerAuthScheme": []
16106
17018
  }
16107
17019
  ],
16108
17020
  "requestBody": {
16109
- "description": "API request for starting a transfer process.",
17021
+ "description": "API request to register an app dataset.\n\nThe owning `tenantId` is captured automatically from the request's tenant\ncontext — callers do not supply it.",
16110
17022
  "required": true,
16111
17023
  "content": {
16112
- "application/ld+json": {
17024
+ "application/json": {
16113
17025
  "schema": {
16114
- "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolTransferStartMessage"
17026
+ "$ref": "#/components/schemas/AppDatasetCreateRequest"
16115
17027
  },
16116
17028
  "examples": {
16117
- "startTransferRequestExample": {
17029
+ "datasetCreateRequestExample": {
16118
17030
  "value": {
16119
- "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16120
- "@type": "TransferStartMessage",
16121
- "consumerPid": "urn:uuid:consumer-process-12345",
16122
- "providerPid": "urn:uuid:provider-process-12345"
17031
+ "appId": "https://twin.example.org/app1",
17032
+ "dataset": {
17033
+ "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
17034
+ "@type": "Dataset",
17035
+ "@id": "https://twin.example.org/data-service-1",
17036
+ "hasPolicy": [],
17037
+ "distribution": []
17038
+ }
17039
+ }
17040
+ }
17041
+ }
17042
+ }
17043
+ }
17044
+ },
17045
+ "responses": {
17046
+ "200": {
17047
+ "description": "API response from registering an app dataset.",
17048
+ "content": {
17049
+ "text/plain": {
17050
+ "schema": {
17051
+ "$ref": "#/components/schemas/AppDatasetCreateResponse"
17052
+ }
17053
+ }
17054
+ },
17055
+ "headers": {
17056
+ "location": {
17057
+ "schema": {
17058
+ "type": "string"
17059
+ },
17060
+ "description": "e.g. https://twin.example.org/data-service-1"
17061
+ }
17062
+ }
17063
+ },
17064
+ "400": {
17065
+ "description": "The server cannot process the request, see the content for more details.",
17066
+ "content": {
17067
+ "application/json": {
17068
+ "schema": {
17069
+ "$ref": "#/components/schemas/Error"
17070
+ },
17071
+ "examples": {
17072
+ "exampleResponse": {
17073
+ "value": {
17074
+ "name": "GeneralError",
17075
+ "message": "errorMessage",
17076
+ "properties": {
17077
+ "foo": "bar"
17078
+ }
17079
+ }
17080
+ }
17081
+ }
17082
+ }
17083
+ }
17084
+ },
17085
+ "401": {
17086
+ "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
17087
+ "content": {
17088
+ "application/json": {
17089
+ "schema": {
17090
+ "$ref": "#/components/schemas/Error"
17091
+ },
17092
+ "examples": {
17093
+ "exampleResponse": {
17094
+ "value": {
17095
+ "name": "UnauthorizedError",
17096
+ "message": "errorMessage"
17097
+ }
17098
+ }
17099
+ }
17100
+ }
17101
+ }
17102
+ },
17103
+ "500": {
17104
+ "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
17105
+ "content": {
17106
+ "application/json": {
17107
+ "schema": {
17108
+ "$ref": "#/components/schemas/Error"
17109
+ },
17110
+ "examples": {
17111
+ "exampleResponse": {
17112
+ "value": {
17113
+ "name": "InternalServerError",
17114
+ "message": "errorMessage"
17115
+ }
16123
17116
  }
16124
17117
  }
16125
17118
  }
16126
17119
  }
16127
17120
  }
16128
- },
17121
+ }
17122
+ },
17123
+ "get": {
17124
+ "operationId": "datasetList",
17125
+ "summary": "List the app datasets owned by the calling tenant.",
17126
+ "tags": [
17127
+ "Datasets"
17128
+ ],
17129
+ "parameters": [
17130
+ {
17131
+ "name": "cursor",
17132
+ "description": "Cursor returned from a previous list call to fetch the next page.",
17133
+ "in": "query",
17134
+ "required": false,
17135
+ "schema": {
17136
+ "type": "string"
17137
+ }
17138
+ },
17139
+ {
17140
+ "name": "limit",
17141
+ "description": "Maximum number of entries to return (string-encoded; parsed on the server).",
17142
+ "in": "query",
17143
+ "required": false,
17144
+ "schema": {
17145
+ "type": "string"
17146
+ }
17147
+ }
17148
+ ],
17149
+ "security": [
17150
+ {
17151
+ "jwtBearerAuthScheme": []
17152
+ }
17153
+ ],
16129
17154
  "responses": {
16130
17155
  "200": {
16131
- "description": "API response for starting a transfer process.",
17156
+ "description": "API response listing the app datasets owned by the calling tenant.",
16132
17157
  "content": {
16133
17158
  "application/json": {
16134
17159
  "schema": {
16135
- "$ref": "#/components/schemas/StartTransferResponse"
16136
- },
16137
- "examples": {
16138
- "startTransferResponseExample": {
16139
- "value": {
16140
- "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16141
- "@type": "TransferStartMessage",
16142
- "consumerPid": "urn:uuid:consumer-process-12345",
16143
- "providerPid": "urn:uuid:provider-process-12345"
16144
- }
16145
- }
17160
+ "$ref": "#/components/schemas/AppDatasetListResponse"
16146
17161
  }
16147
17162
  }
16148
17163
  }
@@ -16168,6 +17183,24 @@
16168
17183
  }
16169
17184
  }
16170
17185
  },
17186
+ "401": {
17187
+ "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
17188
+ "content": {
17189
+ "application/json": {
17190
+ "schema": {
17191
+ "$ref": "#/components/schemas/Error"
17192
+ },
17193
+ "examples": {
17194
+ "exampleResponse": {
17195
+ "value": {
17196
+ "name": "UnauthorizedError",
17197
+ "message": "errorMessage"
17198
+ }
17199
+ }
17200
+ }
17201
+ }
17202
+ }
17203
+ },
16171
17204
  "500": {
16172
17205
  "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
16173
17206
  "content": {
@@ -16189,82 +17222,38 @@
16189
17222
  }
16190
17223
  }
16191
17224
  },
16192
- "/dataspace-control-plane/transfers/{pid}/complete": {
16193
- "post": {
16194
- "operationId": "completeTransfer",
16195
- "summary": "Complete Transfer Process (DSP)",
17225
+ "/dataspace-control-plane/app-datasets/{id}": {
17226
+ "get": {
17227
+ "operationId": "datasetGet",
17228
+ "summary": "Retrieve an app dataset owned by the calling tenant.",
16196
17229
  "tags": [
16197
- "Transfer Process"
17230
+ "Datasets"
16198
17231
  ],
16199
17232
  "parameters": [
16200
17233
  {
16201
- "name": "pid",
16202
- "description": "Process ID (consumerPid).",
17234
+ "name": "id",
17235
+ "description": "The stored app dataset id (entity primary key).",
16203
17236
  "in": "path",
16204
17237
  "required": true,
16205
17238
  "schema": {
16206
17239
  "type": "string"
16207
17240
  },
16208
17241
  "style": "simple",
16209
- "example": "urn:uuid:consumer-process-12345"
16210
- },
16211
- {
16212
- "name": "authorization",
16213
- "in": "header",
16214
- "required": true,
16215
- "schema": {
16216
- "type": "string"
16217
- },
16218
- "style": "simple",
16219
- "example": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
17242
+ "example": "dataspace-app-dataset-1"
16220
17243
  }
16221
17244
  ],
16222
- "requestBody": {
16223
- "description": "API request for completing a transfer process.",
16224
- "required": true,
16225
- "content": {
16226
- "application/ld+json": {
16227
- "schema": {
16228
- "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolTransferCompletionMessage"
16229
- },
16230
- "examples": {
16231
- "completeTransferRequestExample": {
16232
- "value": {
16233
- "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16234
- "@type": "TransferCompletionMessage",
16235
- "consumerPid": "urn:uuid:consumer-process-12345",
16236
- "providerPid": "urn:uuid:provider-process-12345"
16237
- }
16238
- }
16239
- }
16240
- }
17245
+ "security": [
17246
+ {
17247
+ "jwtBearerAuthScheme": []
16241
17248
  }
16242
- },
17249
+ ],
16243
17250
  "responses": {
16244
17251
  "200": {
16245
- "description": "API response for completing a transfer process.",
17252
+ "description": "API response for a single stored app dataset record.",
16246
17253
  "content": {
16247
17254
  "application/json": {
16248
17255
  "schema": {
16249
- "$ref": "#/components/schemas/CompleteTransferResponse"
16250
- },
16251
- "examples": {
16252
- "completeTransferResponseExample": {
16253
- "value": {
16254
- "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16255
- "@type": "TransferProcess",
16256
- "processId": "urn:uuid:provider-process-12345",
16257
- "consumerPid": "urn:uuid:consumer-process-12345",
16258
- "providerPid": "urn:uuid:provider-process-12345",
16259
- "state": "COMPLETED",
16260
- "dataAddress": {
16261
- "@type": "DataAddress",
16262
- "@id": "https://provider.example.com/data/transfer-12345",
16263
- "endpointType": "https://w3id.org/dspace/v1/HttpDataAddress",
16264
- "baseUrl": "https://provider.example.com/data/transfer-12345"
16265
- }
16266
- }
16267
- }
17256
+ "$ref": "#/components/schemas/DataspaceAppDataset"
16268
17257
  }
16269
17258
  }
16270
17259
  }
@@ -16290,6 +17279,24 @@
16290
17279
  }
16291
17280
  }
16292
17281
  },
17282
+ "401": {
17283
+ "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
17284
+ "content": {
17285
+ "application/json": {
17286
+ "schema": {
17287
+ "$ref": "#/components/schemas/Error"
17288
+ },
17289
+ "examples": {
17290
+ "exampleResponse": {
17291
+ "value": {
17292
+ "name": "UnauthorizedError",
17293
+ "message": "errorMessage"
17294
+ }
17295
+ }
17296
+ }
17297
+ }
17298
+ }
17299
+ },
16293
17300
  "500": {
16294
17301
  "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
16295
17302
  "content": {
@@ -16309,53 +17316,49 @@
16309
17316
  }
16310
17317
  }
16311
17318
  }
16312
- }
16313
- },
16314
- "/dataspace-control-plane/transfers/{pid}/suspend": {
16315
- "post": {
16316
- "operationId": "suspendTransfer",
16317
- "summary": "Suspend Transfer Process (DSP)",
17319
+ },
17320
+ "put": {
17321
+ "operationId": "datasetUpdate",
17322
+ "summary": "Update an app dataset owned by the calling tenant.",
16318
17323
  "tags": [
16319
- "Transfer Process"
17324
+ "Datasets"
16320
17325
  ],
16321
17326
  "parameters": [
16322
17327
  {
16323
- "name": "pid",
16324
- "description": "Process ID (consumerPid).",
17328
+ "name": "id",
17329
+ "description": "The stored app dataset id.",
16325
17330
  "in": "path",
16326
17331
  "required": true,
16327
17332
  "schema": {
16328
17333
  "type": "string"
16329
17334
  },
16330
17335
  "style": "simple",
16331
- "example": "urn:uuid:consumer-process-12345"
16332
- },
17336
+ "example": "dataspace-app-dataset-1"
17337
+ }
17338
+ ],
17339
+ "security": [
16333
17340
  {
16334
- "name": "authorization",
16335
- "in": "header",
16336
- "required": true,
16337
- "schema": {
16338
- "type": "string"
16339
- },
16340
- "style": "simple",
16341
- "example": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
17341
+ "jwtBearerAuthScheme": []
16342
17342
  }
16343
17343
  ],
16344
17344
  "requestBody": {
16345
- "description": "API request for suspending a transfer process.",
17345
+ "description": "API request to update an existing app dataset record.",
16346
17346
  "required": true,
16347
17347
  "content": {
16348
- "application/ld+json": {
17348
+ "application/json": {
16349
17349
  "schema": {
16350
- "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolTransferSuspensionMessage"
17350
+ "$ref": "#/components/schemas/AppDatasetUpdateRequest"
16351
17351
  },
16352
17352
  "examples": {
16353
- "suspendTransferRequestExample": {
17353
+ "datasetUpdateRequestExample": {
16354
17354
  "value": {
16355
- "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16356
- "@type": "TransferSuspensionMessage",
16357
- "consumerPid": "urn:uuid:consumer-process-12345",
16358
- "providerPid": "urn:uuid:provider-process-12345"
17355
+ "appId": "https://twin.example.org/app1",
17356
+ "dataset": {
17357
+ "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
17358
+ "@type": "Dataset",
17359
+ "hasPolicy": [],
17360
+ "distribution": []
17361
+ }
16359
17362
  }
16360
17363
  }
16361
17364
  }
@@ -16363,27 +17366,23 @@
16363
17366
  }
16364
17367
  },
16365
17368
  "responses": {
16366
- "200": {
16367
- "description": "API response for suspending a transfer process.",
17369
+ "204": {
17370
+ "description": "The rest request ended in success with no data."
17371
+ },
17372
+ "400": {
17373
+ "description": "The server cannot process the request, see the content for more details.",
16368
17374
  "content": {
16369
17375
  "application/json": {
16370
17376
  "schema": {
16371
- "$ref": "#/components/schemas/SuspendTransferResponse"
17377
+ "$ref": "#/components/schemas/Error"
16372
17378
  },
16373
17379
  "examples": {
16374
- "suspendTransferResponseExample": {
17380
+ "exampleResponse": {
16375
17381
  "value": {
16376
- "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16377
- "@type": "TransferProcess",
16378
- "processId": "urn:uuid:provider-process-12345",
16379
- "consumerPid": "urn:uuid:consumer-process-12345",
16380
- "providerPid": "urn:uuid:provider-process-12345",
16381
- "state": "SUSPENDED",
16382
- "dataAddress": {
16383
- "@type": "DataAddress",
16384
- "@id": "https://provider.example.com/data/transfer-12345",
16385
- "endpointType": "https://w3id.org/dspace/v1/HttpDataAddress",
16386
- "baseUrl": "https://provider.example.com/data/transfer-12345"
17382
+ "name": "GeneralError",
17383
+ "message": "errorMessage",
17384
+ "properties": {
17385
+ "foo": "bar"
16387
17386
  }
16388
17387
  }
16389
17388
  }
@@ -16391,8 +17390,8 @@
16391
17390
  }
16392
17391
  }
16393
17392
  },
16394
- "400": {
16395
- "description": "The server cannot process the request, see the content for more details.",
17393
+ "401": {
17394
+ "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
16396
17395
  "content": {
16397
17396
  "application/json": {
16398
17397
  "schema": {
@@ -16401,10 +17400,28 @@
16401
17400
  "examples": {
16402
17401
  "exampleResponse": {
16403
17402
  "value": {
16404
- "name": "GeneralError",
17403
+ "name": "UnauthorizedError",
17404
+ "message": "errorMessage"
17405
+ }
17406
+ }
17407
+ }
17408
+ }
17409
+ }
17410
+ },
17411
+ "404": {
17412
+ "description": "The resource you tried to access does not exist, see the content for more details.",
17413
+ "content": {
17414
+ "application/json": {
17415
+ "schema": {
17416
+ "$ref": "#/components/schemas/NotFoundResponse"
17417
+ },
17418
+ "examples": {
17419
+ "exampleResponse": {
17420
+ "value": {
17421
+ "name": "NotFoundError",
16405
17422
  "message": "errorMessage",
16406
17423
  "properties": {
16407
- "foo": "bar"
17424
+ "notFoundId": "1"
16408
17425
  }
16409
17426
  }
16410
17427
  }
@@ -16431,102 +17448,88 @@
16431
17448
  }
16432
17449
  }
16433
17450
  }
16434
- }
16435
- },
16436
- "/dataspace-control-plane/transfers/{pid}/terminate": {
16437
- "post": {
16438
- "operationId": "terminateTransfer",
16439
- "summary": "Terminate Transfer Process (DSP)",
17451
+ },
17452
+ "delete": {
17453
+ "operationId": "datasetDelete",
17454
+ "summary": "Delete an app dataset owned by the calling tenant.",
16440
17455
  "tags": [
16441
- "Transfer Process"
17456
+ "Datasets"
16442
17457
  ],
16443
17458
  "parameters": [
16444
17459
  {
16445
- "name": "pid",
16446
- "description": "Process ID (consumerPid).",
17460
+ "name": "id",
17461
+ "description": "The stored dataset id.",
16447
17462
  "in": "path",
16448
17463
  "required": true,
16449
17464
  "schema": {
16450
17465
  "type": "string"
16451
17466
  },
16452
17467
  "style": "simple",
16453
- "example": "urn:uuid:consumer-process-12345"
16454
- },
17468
+ "example": "dataspace-app-dataset-1"
17469
+ }
17470
+ ],
17471
+ "security": [
16455
17472
  {
16456
- "name": "authorization",
16457
- "in": "header",
16458
- "required": true,
16459
- "schema": {
16460
- "type": "string"
16461
- },
16462
- "style": "simple",
16463
- "example": "Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9..."
17473
+ "jwtBearerAuthScheme": []
16464
17474
  }
16465
17475
  ],
16466
- "requestBody": {
16467
- "description": "API request for terminating a transfer process.",
16468
- "required": true,
16469
- "content": {
16470
- "application/ld+json": {
16471
- "schema": {
16472
- "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolTransferTerminationMessage"
16473
- },
16474
- "examples": {
16475
- "terminateTransferRequestExample": {
16476
- "value": {
16477
- "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16478
- "@type": "TransferTerminationMessage",
16479
- "consumerPid": "urn:uuid:consumer-process-12345",
16480
- "providerPid": "urn:uuid:provider-process-12345"
17476
+ "responses": {
17477
+ "204": {
17478
+ "description": "The rest request ended in success with no data."
17479
+ },
17480
+ "400": {
17481
+ "description": "The server cannot process the request, see the content for more details.",
17482
+ "content": {
17483
+ "application/json": {
17484
+ "schema": {
17485
+ "$ref": "#/components/schemas/Error"
17486
+ },
17487
+ "examples": {
17488
+ "exampleResponse": {
17489
+ "value": {
17490
+ "name": "GeneralError",
17491
+ "message": "errorMessage",
17492
+ "properties": {
17493
+ "foo": "bar"
17494
+ }
17495
+ }
16481
17496
  }
16482
17497
  }
16483
17498
  }
16484
17499
  }
16485
- }
16486
- },
16487
- "responses": {
16488
- "200": {
16489
- "description": "API response for terminating a transfer process.",
17500
+ },
17501
+ "401": {
17502
+ "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
16490
17503
  "content": {
16491
17504
  "application/json": {
16492
17505
  "schema": {
16493
- "$ref": "#/components/schemas/TerminateTransferResponse"
17506
+ "$ref": "#/components/schemas/Error"
16494
17507
  },
16495
17508
  "examples": {
16496
- "terminateTransferResponseExample": {
17509
+ "exampleResponse": {
16497
17510
  "value": {
16498
- "@context": "https://w3id.org/dspace/2025/1/context.jsonld",
16499
- "@type": "TransferProcess",
16500
- "processId": "urn:uuid:provider-process-12345",
16501
- "consumerPid": "urn:uuid:consumer-process-12345",
16502
- "providerPid": "urn:uuid:provider-process-12345",
16503
- "state": "TERMINATED",
16504
- "dataAddress": {
16505
- "@type": "DataAddress",
16506
- "@id": "https://provider.example.com/data/transfer-12345",
16507
- "endpointType": "https://w3id.org/dspace/v1/HttpDataAddress",
16508
- "baseUrl": "https://provider.example.com/data/transfer-12345"
16509
- }
17511
+ "name": "UnauthorizedError",
17512
+ "message": "errorMessage"
16510
17513
  }
16511
17514
  }
16512
17515
  }
16513
17516
  }
16514
17517
  }
16515
17518
  },
16516
- "400": {
16517
- "description": "The server cannot process the request, see the content for more details.",
17519
+ "404": {
17520
+ "description": "The resource you tried to access does not exist, see the content for more details.",
16518
17521
  "content": {
16519
17522
  "application/json": {
16520
17523
  "schema": {
16521
- "$ref": "#/components/schemas/Error"
17524
+ "$ref": "#/components/schemas/NotFoundResponse"
16522
17525
  },
16523
17526
  "examples": {
16524
17527
  "exampleResponse": {
16525
17528
  "value": {
16526
- "name": "GeneralError",
17529
+ "name": "NotFoundError",
16527
17530
  "message": "errorMessage",
16528
17531
  "properties": {
16529
- "foo": "bar"
17532
+ "notFoundId": "1"
16530
17533
  }
16531
17534
  }
16532
17535
  }
@@ -16587,24 +17590,6 @@
16587
17590
  }
16588
17591
  ]
16589
17592
  }
16590
- },
16591
- "papCreateEcosystemPolicyRequestExample": {
16592
- "value": {
16593
- "@context": [
16594
- "http://www.w3.org/ns/odrl.jsonld",
16595
- "https://schema.twindev.org/odrl/v1/"
16596
- ],
16597
- "@type": "EcosystemPolicy",
16598
- "profile": "https://schema.twindev.org/odrl/v1/profile",
16599
- "assigner": "did:example:publisher",
16600
- "obligation": [
16601
- {
16602
- "action": "inform",
16603
- "assignee": "did:example:border-agency",
16604
- "target": "urn:twin:asset:consignment:*"
16605
- }
16606
- ]
16607
- }
16608
17593
  }
16609
17594
  }
16610
17595
  }
@@ -17496,123 +18481,6 @@
17496
18481
  }
17497
18482
  }
17498
18483
  },
17499
- "/rights-management/policy/admin/ecosystem-policy/{id}": {
17500
- "get": {
17501
- "operationId": "papGetEcosystemPolicy",
17502
- "summary": "Get an ecosystem policy",
17503
- "tags": [
17504
- "Policy Administration Point"
17505
- ],
17506
- "parameters": [
17507
- {
17508
- "name": "id",
17509
- "description": "The ID of the ecosystem policy to get.",
17510
- "in": "path",
17511
- "required": true,
17512
- "schema": {
17513
- "type": "string"
17514
- },
17515
- "style": "simple",
17516
- "example": "urn:rights-management:abc123def456"
17517
- }
17518
- ],
17519
- "security": [
17520
- {
17521
- "jwtBearerAuthScheme": []
17522
- }
17523
- ],
17524
- "responses": {
17525
- "200": {
17526
- "description": "The response structure for getting an ecosystem policy.",
17527
- "content": {
17528
- "application/json": {
17529
- "schema": {
17530
- "$ref": "#/components/schemas/RightsManagementEcosystemPolicy"
17531
- },
17532
- "examples": {
17533
- "papGetEcosystemPolicyResponseExample": {
17534
- "value": {
17535
- "@context": [
17536
- "http://www.w3.org/ns/odrl.jsonld",
17537
- "https://schema.twindev.org/odrl/v1/"
17538
- ],
17539
- "@type": "EcosystemPolicy",
17540
- "@id": "urn:rights-management:abc123def456",
17541
- "profile": "https://schema.twindev.org/odrl/v1/profile",
17542
- "assigner": "did:example:publisher",
17543
- "obligation": [
17544
- {
17545
- "action": "inform",
17546
- "assignee": "did:example:border-agency",
17547
- "target": "urn:twin:asset:consignment:abc123"
17548
- }
17549
- ]
17550
- }
17551
- }
17552
- }
17553
- }
17554
- }
17555
- },
17556
- "400": {
17557
- "description": "The server cannot process the request, see the content for more details.",
17558
- "content": {
17559
- "application/json": {
17560
- "schema": {
17561
- "$ref": "#/components/schemas/Error"
17562
- },
17563
- "examples": {
17564
- "exampleResponse": {
17565
- "value": {
17566
- "name": "GeneralError",
17567
- "message": "errorMessage",
17568
- "properties": {
17569
- "foo": "bar"
17570
- }
17571
- }
17572
- }
17573
- }
17574
- }
17575
- }
17576
- },
17577
- "401": {
17578
- "description": "You are not authorized to use the API or no credentials were supplied, see the content for more details.",
17579
- "content": {
17580
- "application/json": {
17581
- "schema": {
17582
- "$ref": "#/components/schemas/Error"
17583
- },
17584
- "examples": {
17585
- "exampleResponse": {
17586
- "value": {
17587
- "name": "UnauthorizedError",
17588
- "message": "errorMessage"
17589
- }
17590
- }
17591
- }
17592
- }
17593
- }
17594
- },
17595
- "500": {
17596
- "description": "The server has encountered a situation it does not know how to handle, see the content for more details.",
17597
- "content": {
17598
- "application/json": {
17599
- "schema": {
17600
- "$ref": "#/components/schemas/Error"
17601
- },
17602
- "examples": {
17603
- "exampleResponse": {
17604
- "value": {
17605
- "name": "InternalServerError",
17606
- "message": "errorMessage"
17607
- }
17608
- }
17609
- }
17610
- }
17611
- }
17612
- }
17613
- }
17614
- }
17615
- },
17616
18484
  "/rights-management/negotiations/{id}": {
17617
18485
  "get": {
17618
18486
  "operationId": "pnpGetNegotiation",
@@ -19318,6 +20186,65 @@
19318
20186
  }
19319
20187
  }
19320
20188
  },
20189
+ "AppDatasetCreateRequest": {
20190
+ "type": "object",
20191
+ "properties": {
20192
+ "id": {
20193
+ "type": "string",
20194
+ "description": "Optional explicit id for the stored dataset record. If omitted, the\nControl Plane derives the id from `dataset[\"@id\"]` if present, or\ngenerates a UUID otherwise. The resolved id is returned via the\n`Location` response header."
20195
+ },
20196
+ "appId": {
20197
+ "type": "string",
20198
+ "description": "The dataspace app this dataset belongs to. Matches the app's\nregistered name in `DataspaceAppFactory` (typically the app's URI)."
20199
+ },
20200
+ "dataset": {
20201
+ "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolDataset"
20202
+ }
20203
+ },
20204
+ "required": [
20205
+ "appId",
20206
+ "dataset"
20207
+ ],
20208
+ "description": "The body of the request."
20209
+ },
20210
+ "AppDatasetCreateResponse": {},
20211
+ "AppDatasetListResponse": {
20212
+ "type": "object",
20213
+ "properties": {
20214
+ "entities": {
20215
+ "type": "array",
20216
+ "items": {
20217
+ "$ref": "#/components/schemas/DataspaceAppDataset"
20218
+ },
20219
+ "description": "The stored datasets."
20220
+ },
20221
+ "cursor": {
20222
+ "type": "string",
20223
+ "description": "Cursor to fetch the next page if more entries exist."
20224
+ }
20225
+ },
20226
+ "required": [
20227
+ "entities"
20228
+ ],
20229
+ "description": "The body of the response."
20230
+ },
20231
+ "AppDatasetUpdateRequest": {
20232
+ "type": "object",
20233
+ "properties": {
20234
+ "appId": {
20235
+ "type": "string",
20236
+ "description": "The dataspace app this dataset belongs to. May change appId on\nupdate if the tenant wants to retarget the dataset."
20237
+ },
20238
+ "dataset": {
20239
+ "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolDataset"
20240
+ }
20241
+ },
20242
+ "required": [
20243
+ "appId",
20244
+ "dataset"
20245
+ ],
20246
+ "description": "The body of the request."
20247
+ },
19321
20248
  "AttestationCreateRequest": {
19322
20249
  "type": "object",
19323
20250
  "properties": {
@@ -20077,6 +21004,38 @@
20077
21004
  ],
20078
21005
  "description": "The data to be used in the store."
20079
21006
  },
21007
+ "DataspaceAppDataset": {
21008
+ "description": "Stored dataset record returned by the Control Plane's dataset CRUD surface.",
21009
+ "type": "object",
21010
+ "properties": {
21011
+ "id": {
21012
+ "type": "string",
21013
+ "description": "The stored dataset id (matches the dataset's JSON-LD `@id`)."
21014
+ },
21015
+ "appId": {
21016
+ "type": "string",
21017
+ "description": "The dataspace app this dataset belongs to."
21018
+ },
21019
+ "dataset": {
21020
+ "$ref": "https://schema.twindev.org/dataspace-protocol/DataspaceProtocolDataset"
21021
+ },
21022
+ "dateCreated": {
21023
+ "type": "string",
21024
+ "description": "Creation timestamp (ISO string)."
21025
+ },
21026
+ "dateModified": {
21027
+ "type": "string",
21028
+ "description": "Last-modified timestamp (ISO string)."
21029
+ }
21030
+ },
21031
+ "required": [
21032
+ "id",
21033
+ "appId",
21034
+ "dataset",
21035
+ "dateCreated",
21036
+ "dateModified"
21037
+ ]
21038
+ },
20080
21039
  "DocumentManagementCreateRequest": {
20081
21040
  "type": "object",
20082
21041
  "properties": {
@@ -20183,7 +21142,7 @@
20183
21142
  },
20184
21143
  "message": {
20185
21144
  "type": "string",
20186
- "description": "The message for the error."
21145
+ "description": "The message for the error as an i18n key."
20187
21146
  },
20188
21147
  "source": {
20189
21148
  "type": "string",
@@ -20253,43 +21212,40 @@
20253
21212
  ],
20254
21213
  "description": "Transfer Process (DSP compliant) with current state, or error."
20255
21214
  },
20256
- "HealthComponentInfo": {
20257
- "description": "The health component information.",
21215
+ "Health": {
21216
+ "description": "Provides health information for a component.",
20258
21217
  "type": "object",
20259
21218
  "properties": {
20260
- "name": {
21219
+ "source": {
20261
21220
  "type": "string",
20262
- "description": "The name of the component."
21221
+ "description": "The source of the health information."
21222
+ },
21223
+ "description": {
21224
+ "type": "string",
21225
+ "description": "The description of the component as an i18n key."
20263
21226
  },
20264
21227
  "status": {
20265
21228
  "$ref": "#/components/schemas/HealthStatus"
20266
21229
  },
20267
- "details": {
21230
+ "message": {
20268
21231
  "type": "string",
20269
- "description": "The details for the status."
20270
- }
20271
- },
20272
- "required": [
20273
- "name",
20274
- "status"
20275
- ]
20276
- },
20277
- "HealthInfo": {
20278
- "description": "The status of the server.",
20279
- "type": "object",
20280
- "properties": {
20281
- "status": {
20282
- "$ref": "#/components/schemas/HealthStatus"
21232
+ "description": "The message for the status if there are further details to provide as an i18n key."
20283
21233
  },
20284
- "components": {
21234
+ "data": {
21235
+ "type": "object",
21236
+ "additionalProperties": {},
21237
+ "description": "Data to substitute in the i18n key for the message."
21238
+ },
21239
+ "grouped": {
20285
21240
  "type": "array",
20286
21241
  "items": {
20287
- "$ref": "#/components/schemas/HealthComponentInfo"
21242
+ "$ref": "#/components/schemas/Health"
20288
21243
  },
20289
- "description": "The status of the components."
21244
+ "description": "The grouped child components, if any."
20290
21245
  }
20291
21246
  },
20292
21247
  "required": [
21248
+ "source",
20293
21249
  "status"
20294
21250
  ]
20295
21251
  },
@@ -20310,6 +21266,19 @@
20310
21266
  }
20311
21267
  ]
20312
21268
  },
21269
+ "IdentityAlsoKnownAsCreateRequest": {
21270
+ "type": "object",
21271
+ "properties": {
21272
+ "alias": {
21273
+ "type": "string",
21274
+ "description": "The alias to create for the identity."
21275
+ }
21276
+ },
21277
+ "required": [
21278
+ "alias"
21279
+ ],
21280
+ "description": "The data for the request."
21281
+ },
20313
21282
  "IdentityCreateRequest": {
20314
21283
  "type": "object",
20315
21284
  "properties": {
@@ -20757,6 +21726,16 @@
20757
21726
  ],
20758
21727
  "description": "The login response details."
20759
21728
  },
21729
+ "LogoutRequest": {
21730
+ "type": "object",
21731
+ "properties": {
21732
+ "token": {
21733
+ "type": "string",
21734
+ "description": "The token to logout, if it uses a mechanism with public access."
21735
+ }
21736
+ },
21737
+ "description": "The logout token details."
21738
+ },
20760
21739
  "MetricType": {
20761
21740
  "description": "The types of metrics.",
20762
21741
  "anyOf": [
@@ -21195,7 +22174,7 @@
21195
22174
  "description": "The obligations in the policy.\nAt least one of permission, prohibition, or obligation must be present."
21196
22175
  },
21197
22176
  "@type": {
21198
- "$ref": "#/components/schemas/RightsManagementPolicyType"
22177
+ "$ref": "https://schema.twindev.org/w3c-odrl/OdrlPolicyType"
21199
22178
  },
21200
22179
  "@id": {
21201
22180
  "type": "string",
@@ -21267,6 +22246,10 @@
21267
22246
  "type": "string",
21268
22247
  "description": "The public origin of the server that initiated or received this negotiation.\nUsed to construct callback URLs in subsequent async messages."
21269
22248
  },
22249
+ "tenantId": {
22250
+ "type": "string",
22251
+ "description": "The tenant id this negotiation belongs to."
22252
+ },
21270
22253
  "organizationIdentity": {
21271
22254
  "type": "string",
21272
22255
  "description": "Organization identity to be used when sending trust payloads."
@@ -21340,6 +22323,16 @@
21340
22323
  "organizationIdentity"
21341
22324
  ]
21342
22325
  },
22326
+ "RefreshTokenRequest": {
22327
+ "type": "object",
22328
+ "properties": {
22329
+ "token": {
22330
+ "type": "string",
22331
+ "description": "The token to refresh, if it uses a mechanism with public access."
22332
+ }
22333
+ },
22334
+ "description": "The refresh token details."
22335
+ },
21343
22336
  "RefreshTokenResponse": {
21344
22337
  "type": "object",
21345
22338
  "properties": {
@@ -21364,223 +22357,8 @@
21364
22357
  ],
21365
22358
  "description": "Transfer Process (DSP compliant) with state REQUESTED, or error."
21366
22359
  },
21367
- "RightsManagementEcosystemPolicy": {
21368
- "description": "TWIN EcosystemPolicy in DSP storage shape.\n\nCombines the DSP wire-format requirements (mandatory `@id`, no `uid`) from\n`IDataspaceProtocolPolicy` with a narrowed `@type` discriminant so that callers\ncan rely on the type at compile time without any `as unknown as` cast.\n\nDefined as an intersection type (rather than `extends IDataspaceProtocolPolicy`)\nso that the narrowed `\"@type\": \"EcosystemPolicy\"` can override the base\n`\"@type\": OdrlPolicyType` without a TS2430 extends-incompatibility error.\n`\"EcosystemPolicy\"` is a TWIN extension — not in the W3C ODRL `OdrlPolicyType`\nenum — so the interface hierarchy cannot express this narrowing directly.\n\nLives in `rights-management-models` (not `standards-dataspace-protocol`) because\nEcosystemPolicy is a TWIN platform extension — not a DSP specification concept —\nand `standards-dataspace-protocol` should remain a pure standards mirror.",
21369
- "type": "object",
21370
- "properties": {
21371
- "@context": {
21372
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlContextType"
21373
- },
21374
- "profile": {
21375
- "anyOf": [
21376
- {
21377
- "type": "string"
21378
- },
21379
- {
21380
- "type": "array",
21381
- "items": {
21382
- "type": "string"
21383
- }
21384
- }
21385
- ],
21386
- "description": "The profile(s) this policy conforms to.\nIRIs identifying the ODRL Profile(s)."
21387
- },
21388
- "assigner": {
21389
- "anyOf": [
21390
- {
21391
- "type": "string"
21392
- },
21393
- {
21394
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlParty"
21395
- },
21396
- {
21397
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlPartyCollection"
21398
- },
21399
- {
21400
- "type": "array",
21401
- "items": {
21402
- "anyOf": [
21403
- {
21404
- "type": "string"
21405
- },
21406
- {
21407
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlParty"
21408
- },
21409
- {
21410
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlPartyCollection"
21411
- }
21412
- ]
21413
- }
21414
- }
21415
- ],
21416
- "description": "The assigner of the policy.\nApplies to all rules unless overridden at rule level."
21417
- },
21418
- "assignee": {
21419
- "anyOf": [
21420
- {
21421
- "type": "string"
21422
- },
21423
- {
21424
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlParty"
21425
- },
21426
- {
21427
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlPartyCollection"
21428
- },
21429
- {
21430
- "type": "array",
21431
- "items": {
21432
- "anyOf": [
21433
- {
21434
- "type": "string"
21435
- },
21436
- {
21437
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlParty"
21438
- },
21439
- {
21440
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlPartyCollection"
21441
- }
21442
- ]
21443
- }
21444
- }
21445
- ],
21446
- "description": "The assignee of the policy.\nApplies to all rules unless overridden at rule level."
21447
- },
21448
- "target": {
21449
- "anyOf": [
21450
- {
21451
- "type": "string"
21452
- },
21453
- {
21454
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlAsset"
21455
- },
21456
- {
21457
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlAssetCollection"
21458
- },
21459
- {
21460
- "type": "array",
21461
- "items": {
21462
- "anyOf": [
21463
- {
21464
- "type": "string"
21465
- },
21466
- {
21467
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlAsset"
21468
- },
21469
- {
21470
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlAssetCollection"
21471
- }
21472
- ]
21473
- }
21474
- }
21475
- ],
21476
- "description": "The target asset for the rule."
21477
- },
21478
- "action": {
21479
- "anyOf": [
21480
- {
21481
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlActionType"
21482
- },
21483
- {
21484
- "type": "string"
21485
- },
21486
- {
21487
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlAction"
21488
- },
21489
- {
21490
- "type": "array",
21491
- "items": {
21492
- "anyOf": [
21493
- {
21494
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlActionType"
21495
- },
21496
- {
21497
- "type": "string"
21498
- },
21499
- {
21500
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlAction"
21501
- }
21502
- ]
21503
- }
21504
- }
21505
- ],
21506
- "description": "The action associated with the rule."
21507
- },
21508
- "inheritFrom": {
21509
- "anyOf": [
21510
- {
21511
- "type": "string"
21512
- },
21513
- {
21514
- "type": "array",
21515
- "items": {
21516
- "type": "string"
21517
- }
21518
- }
21519
- ],
21520
- "description": "The parent policy(ies) this policy inherits from.\nIRIs identifying the parent Policy(ies)."
21521
- },
21522
- "conflict": {
21523
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlConflictStrategyType"
21524
- },
21525
- "permission": {
21526
- "anyOf": [
21527
- {
21528
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlPermission"
21529
- },
21530
- {
21531
- "type": "array",
21532
- "items": {
21533
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlPermission"
21534
- }
21535
- }
21536
- ],
21537
- "description": "The permissions in the policy.\nAt least one of permission, prohibition, or obligation must be present."
21538
- },
21539
- "prohibition": {
21540
- "anyOf": [
21541
- {
21542
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlProhibition"
21543
- },
21544
- {
21545
- "type": "array",
21546
- "items": {
21547
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlProhibition"
21548
- }
21549
- }
21550
- ],
21551
- "description": "The prohibitions in the policy.\nAt least one of permission, prohibition, or obligation must be present."
21552
- },
21553
- "obligation": {
21554
- "anyOf": [
21555
- {
21556
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlDuty"
21557
- },
21558
- {
21559
- "type": "array",
21560
- "items": {
21561
- "$ref": "https://schema.twindev.org/w3c-odrl/OdrlDuty"
21562
- }
21563
- }
21564
- ],
21565
- "description": "The obligations in the policy.\nAt least one of permission, prohibition, or obligation must be present."
21566
- },
21567
- "@id": {
21568
- "type": "string",
21569
- "description": "Unique identifier for the policy."
21570
- },
21571
- "@type": {
21572
- "const": "EcosystemPolicy",
21573
- "description": "The type must be \"EcosystemPolicy\"."
21574
- }
21575
- },
21576
- "required": [
21577
- "@context",
21578
- "@id",
21579
- "@type"
21580
- ]
21581
- },
21582
22360
  "RightsManagementPolicy": {
21583
- "description": "Base type for any ODRL policy stored and managed by the TWIN rights-management PAP.\n\nDefined as an intersection type (rather than `extends IDataspaceProtocolPolicy`)\nbecause `IDataspaceProtocolPolicy[\"@type\"]` is constrained to `OdrlPolicyType`\n(the closed W3C ODRL enum). TWIN adds `\"EcosystemPolicy\"` as a platform extension\nvia `RightsManagementPolicyType`, which is a superset of `OdrlPolicyType`.\n\nAll standard DSP policy types (`IDataspaceProtocolAgreement`, `IDataspaceProtocolOffer`,\n`IDataspaceProtocolSet`) remain structurally assignable to this type because their\n`\"@type\"` literals are all members of `RightsManagementPolicyType`.\n\nUse this type wherever the PAP needs to accept or return any policy regardless of\nits specific subtype. Use the narrower `IRightsManagementEcosystemPolicy`,\n`IDataspaceProtocolAgreement`, etc. when the specific subtype is known.",
22361
+ "description": "Base type for any ODRL policy stored and managed by the TWIN rights-management PAP.",
21584
22362
  "type": "object",
21585
22363
  "properties": {
21586
22364
  "@context": {
@@ -21784,7 +22562,7 @@
21784
22562
  "description": "Unique identifier for the policy."
21785
22563
  },
21786
22564
  "@type": {
21787
- "$ref": "#/components/schemas/RightsManagementPolicyType"
22565
+ "$ref": "https://schema.twindev.org/w3c-odrl/OdrlPolicyType"
21788
22566
  }
21789
22567
  },
21790
22568
  "required": [
@@ -21793,27 +22571,6 @@
21793
22571
  "@type"
21794
22572
  ]
21795
22573
  },
21796
- "RightsManagementPolicyType": {
21797
- "description": "TWIN rights-management policy types.",
21798
- "anyOf": [
21799
- {
21800
- "const": "EcosystemPolicy",
21801
- "description": "EcosystemPolicy type.\nA TWIN platform-level governance policy that carries obligations for data events.\nNot a bilateral contract — does not participate in DSP negotiation."
21802
- },
21803
- {
21804
- "const": "Policy"
21805
- },
21806
- {
21807
- "const": "Set"
21808
- },
21809
- {
21810
- "const": "Offer"
21811
- },
21812
- {
21813
- "const": "Agreement"
21814
- }
21815
- ]
21816
- },
21817
22574
  "Rule": {
21818
22575
  "description": "Rule defining how to extract data from an object.",
21819
22576
  "type": "object",
@@ -21872,6 +22629,25 @@
21872
22629
  },
21873
22630
  "description": "The favicon for the server."
21874
22631
  },
22632
+ "ServerHealthResponse": {
22633
+ "type": "object",
22634
+ "properties": {
22635
+ "status": {
22636
+ "$ref": "#/components/schemas/HealthStatus"
22637
+ },
22638
+ "components": {
22639
+ "type": "array",
22640
+ "items": {
22641
+ "$ref": "#/components/schemas/Health"
22642
+ }
22643
+ }
22644
+ },
22645
+ "required": [
22646
+ "status",
22647
+ "components"
22648
+ ],
22649
+ "description": "The health for the server."
22650
+ },
21875
22651
  "ServerInfo": {
21876
22652
  "description": "The information about the server.",
21877
22653
  "type": "object",
@@ -21893,17 +22669,24 @@
21893
22669
  "ServerLivezResponse": {
21894
22670
  "anyOf": [
21895
22671
  {
21896
- "const": "ok"
22672
+ "const": "alive"
21897
22673
  },
21898
22674
  {
21899
- "const": "failed"
22675
+ "const": "dead"
21900
22676
  }
21901
22677
  ],
21902
22678
  "description": "The livez information for the server."
21903
22679
  },
21904
- "ServerRootResponse": {
21905
- "type": "string",
21906
- "description": "The root text for the server."
22680
+ "ServerReadyzResponse": {
22681
+ "anyOf": [
22682
+ {
22683
+ "const": "ready"
22684
+ },
22685
+ {
22686
+ "const": "not ready"
22687
+ }
22688
+ ],
22689
+ "description": "The readyz information for the server."
21907
22690
  },
21908
22691
  "ServerSpecResponse": {
21909
22692
  "description": "The spec for the server."
@@ -22139,6 +22922,10 @@
22139
22922
  "unit": {
22140
22923
  "type": "string",
22141
22924
  "description": "The unit the metric describes."
22925
+ },
22926
+ "maxHistory": {
22927
+ "type": "number",
22928
+ "description": "The maximum number of values to retain; oldest are trimmed on each addMetricValue call.\nUnlimited when absent."
22142
22929
  }
22143
22930
  },
22144
22931
  "required": [