import requests
url = "https://platform.ankra.app/org/service-packages"
payload = {
"schema_version": 1,
"name": "<string>",
"version": "<string>",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"profiles": {},
"parameters": [
{
"name": "<string>",
"minimum": 500000000,
"maximum": 500000000,
"default": 500000000,
"unit": "<string>"
}
],
"secrets": [
{
"name": "<string>",
"modes": []
}
],
"outputs": [{ "name": "<string>" }],
"lifecycle": {
"verify": "<string>",
"upgrade": "<string>",
"recovery": "<string>",
"delete": "<string>"
}
}
headers = {
"cookie": "ankra_session=",
"X-Ankra-CSRF": "<x-ankra-csrf>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
cookie: 'ankra_session=',
'X-Ankra-CSRF': '<x-ankra-csrf>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
schema_version: 1,
name: '<string>',
version: '<string>',
publisher_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
profiles: {},
parameters: [
{
name: '<string>',
minimum: 500000000,
maximum: 500000000,
default: 500000000,
unit: '<string>'
}
],
secrets: [{name: '<string>', modes: []}],
outputs: [{name: '<string>'}],
lifecycle: {
verify: '<string>',
upgrade: '<string>',
recovery: '<string>',
delete: '<string>'
}
})
};
fetch('https://platform.ankra.app/org/service-packages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request POST \
--url https://platform.ankra.app/org/service-packages \
--header 'Content-Type: application/json' \
--header 'X-Ankra-CSRF: <x-ankra-csrf>' \
--cookie ankra_session= \
--data '
{
"schema_version": 1,
"name": "<string>",
"version": "<string>",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"profiles": {},
"parameters": [
{
"name": "<string>",
"minimum": 500000000,
"maximum": 500000000,
"default": 500000000,
"unit": "<string>"
}
],
"secrets": [
{
"name": "<string>",
"modes": []
}
],
"outputs": [
{
"name": "<string>"
}
],
"lifecycle": {
"verify": "<string>",
"upgrade": "<string>",
"recovery": "<string>",
"delete": "<string>"
}
}
'{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"version": "<string>",
"capability": "<string>",
"digest": "<string>",
"first_party": true,
"created_at": "2023-11-07T05:31:56Z",
"contract": {
"schema_version": 1,
"name": "<string>",
"version": "<string>",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"capability": "logs",
"profiles": {
"hosted": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digest": "<string>"
},
"customer": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digest": "<string>"
},
"existing": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digest": "<string>"
}
},
"parameters": [
{
"name": "<string>",
"minimum": 500000000,
"maximum": 500000000,
"default": 500000000,
"unit": "<string>"
}
],
"secrets": [
{
"name": "<string>",
"modes": [
"hosted"
]
}
],
"outputs": [
{
"name": "<string>",
"kind": "endpoint"
}
],
"lifecycle": {
"verify": "<string>",
"upgrade": "<string>",
"recovery": "<string>",
"delete": "<string>"
}
}
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Publish an immutable private package version (browser session)
Requires live profiles.read, profiles.write (publication), or profiles.share (recipient management) permission, intersected with token scopes. Catalogue publication does not grant deployment permission, approve hosted operation, or assert runtime readiness. Shared metadata can remain visible after underlying profile access is revoked; contract reads then return 404. Profile fingerprints are rechecked on contract reads.
import requests
url = "https://platform.ankra.app/org/service-packages"
payload = {
"schema_version": 1,
"name": "<string>",
"version": "<string>",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"profiles": {},
"parameters": [
{
"name": "<string>",
"minimum": 500000000,
"maximum": 500000000,
"default": 500000000,
"unit": "<string>"
}
],
"secrets": [
{
"name": "<string>",
"modes": []
}
],
"outputs": [{ "name": "<string>" }],
"lifecycle": {
"verify": "<string>",
"upgrade": "<string>",
"recovery": "<string>",
"delete": "<string>"
}
}
headers = {
"cookie": "ankra_session=",
"X-Ankra-CSRF": "<x-ankra-csrf>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
cookie: 'ankra_session=',
'X-Ankra-CSRF': '<x-ankra-csrf>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
schema_version: 1,
name: '<string>',
version: '<string>',
publisher_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
profiles: {},
parameters: [
{
name: '<string>',
minimum: 500000000,
maximum: 500000000,
default: 500000000,
unit: '<string>'
}
],
secrets: [{name: '<string>', modes: []}],
outputs: [{name: '<string>'}],
lifecycle: {
verify: '<string>',
upgrade: '<string>',
recovery: '<string>',
delete: '<string>'
}
})
};
fetch('https://platform.ankra.app/org/service-packages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));curl --request POST \
--url https://platform.ankra.app/org/service-packages \
--header 'Content-Type: application/json' \
--header 'X-Ankra-CSRF: <x-ankra-csrf>' \
--cookie ankra_session= \
--data '
{
"schema_version": 1,
"name": "<string>",
"version": "<string>",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"profiles": {},
"parameters": [
{
"name": "<string>",
"minimum": 500000000,
"maximum": 500000000,
"default": 500000000,
"unit": "<string>"
}
],
"secrets": [
{
"name": "<string>",
"modes": []
}
],
"outputs": [
{
"name": "<string>"
}
],
"lifecycle": {
"verify": "<string>",
"upgrade": "<string>",
"recovery": "<string>",
"delete": "<string>"
}
}
'{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"version": "<string>",
"capability": "<string>",
"digest": "<string>",
"first_party": true,
"created_at": "2023-11-07T05:31:56Z",
"contract": {
"schema_version": 1,
"name": "<string>",
"version": "<string>",
"publisher_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"capability": "logs",
"profiles": {
"hosted": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digest": "<string>"
},
"customer": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digest": "<string>"
},
"existing": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"version_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"digest": "<string>"
}
},
"parameters": [
{
"name": "<string>",
"minimum": 500000000,
"maximum": 500000000,
"default": 500000000,
"unit": "<string>"
}
],
"secrets": [
{
"name": "<string>",
"modes": [
"hosted"
]
}
],
"outputs": [
{
"name": "<string>",
"kind": "endpoint"
}
],
"lifecycle": {
"verify": "<string>",
"upgrade": "<string>",
"recovery": "<string>",
"delete": "<string>"
}
}
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}{
"detail": "<string>"
}Authorizations
Browser session. Mutations also require X-Ankra-CSRF.
Headers
Must match the ankra_csrf cookie.
Body
At most 256 KiB. Duplicate keys, unknown properties and null contract values are rejected. Only publisher-owned profiles may be published. An identical retry returns the existing version; a changed contract at the same identity returns 409.
63^[a-z][a-z0-9]*(-[a-z0-9]+)*$32^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$logs, metrics, traces, database, cache, queue, search, object_storage Show child attributes
Show child attributes
32Show child attributes
Show child attributes
16Show child attributes
Show child attributes
1 - 16 elementsShow child attributes
Show child attributes
Show child attributes
Show child attributes
Response
Success.
^sha256:[a-f0-9]{64}$True for a version the Ankra platform publishes itself, readable by every organisation the rollout admits without a share.
Show child attributes
Show child attributes