Get a registration packet
The registrations.packet operation: GET /api/v1/registrations/{id}/packet in the REST API and the registration_get_packet tool in the MCP server.
/api/v1/registrations/{id}/packetReturns the registration packet of a registration: what you need to apply in the authority's portal, generated from the entity's current data:
fields: the regime's registration form fields filled in (withmissingfor required ones Ownrecord doesn't have: find them elsewhere before you submit);- the entity, the representatives (authorizations valid now for the regime), the start date, the expected turnover (a guide from the threshold counters), bank details, the activity, websites and prerequisites;
- the regime's method, portal URL and identity requirements from the tax knowledge.
format: "pdf" returns a PDF summary instead (base64 in content); over MCP, read it as the resource
ownrecord://entities/{entity_id}/registrations/{id}/packet.pdf rather than in a tool result. The steps
themselves are in the regime's playbook. The packet is data; only the playbook is guidance.
At a glance
- REST:
GET /api/v1/registrations/{id}/packet - MCP tool:
registration_get_packet - Operation ID:
registrations.packet - Scope: Legal entity
- Permission:
registrations:read - Risk tier:
read - Dry run: Not supported
- Idempotency: Not needed (read only)
- Modes: Test and live
- Authentication: API key with the
registrations:readscope - Since: M10
Request
Path parameters
| Field | Type | Description |
|---|---|---|
id | string | The registration (regn_…) or its regime's ID, e.g. EU_OSS_UNION or US_SALES_TAX:TX. |
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
format | one of json, pdf | No | json (default) or pdf (a summary, base64). |
Response
200 OK with a JSON object:
| Field | Type | Description |
|---|---|---|
object | "registration_packet_document" | |
registrationId | regn_… ID | |
format | one of json, pdf | |
filename | string | |
contentType | string | |
data | object or null | |
content | string or null | |
size | integer (at least 0) | |
sha256 | string |
Examples
The packet for the EU One-Stop Shop, non-Union scheme
GET /api/v1/registrations/regn_01m4ttwd3veh9apbewxheq5xag/packet
Authorization: Bearer or_test_…
Response (200):
{
"object": "registration_packet_document",
"registrationId": "regn_01m4ttwd3veh9apbewxheq5xag",
"format": "json",
"filename": "registration-packet-EU_OSS_NON_UNION.json",
"contentType": "application/json",
"data": {
"object": "registration_packet",
"regimeId": "EU_OSS_NON_UNION",
"regimeName": "One-Stop Shop, non-Union scheme",
"registrationId": "regn_01m4ttwd3veh9apbewxheq5xag",
"state": "grace",
"method": "online_portal",
"portalUrl": "https://ownrecord.io/fixtures/EU/oss-non-union-portal",
"identityRequirements": "Online registration with the chosen member state of identification",
"typicalProcessingDays": 14,
"fields": [
{
"label": "Legal name",
"value": "Helvetia Apps AG",
"source": "legal_entities.legalName",
"required": true,
"missing": false,
"notes": null
},
{
"label": "Date of the first supply",
"value": "2026-10-14",
"source": "registrations.triggeredAt",
"required": true,
"missing": false,
"notes": null
},
{
"label": "Contact person and email",
"value": null,
"source": null,
"required": true,
"missing": true,
"notes": "The entity's tax manager"
}
],
"entity": {
"legalName": "Helvetia Apps AG",
"tradingName": null,
"address": "Bahnhofstrasse 1, 8001 Zürich, CH",
"country": "CH",
"companyRegistryId": "CHE-000.000.042",
"taxId": {
"type": "ch_vat",
"value": "CHE-000.000.042 MWST"
},
"currency": "CHF",
"timeZone": "Europe/Zurich"
},
"representatives": [
{
"name": "Ana Horvat",
"kind": "employee_eid",
"contact": "ana.horvat@example.com",
"validFrom": "2026-01-01",
"validTo": null,
"portals": ["OSS portal"]
}
],
"startDate": "2026-10-14",
"expectedTurnover": {
"amount": {
"amount": "1200000000",
"currency": "EUR",
"decimal": "1200.00"
},
"basis": "Sales counted toward the EU_OSS_NON_UNION threshold in 2026, all brands (a guide, not a forecast)."
},
"bankDetails": null,
"activity": "Software as a service",
"websites": ["pay.helvetia.example"],
"prerequisites": [
{
"code": "portal_access",
"description": "Open a portal account",
"leadTimeDays": 14,
"status": "done"
}
],
"missing": ["Contact person and email"]
},
"content": null,
"size": 1630,
"sha256": "9b2f4c6e8a0d1f3b5c7e9a2d4f6b8c0e1a3d5f7b9c2e4a6d8f0b1c3e5a7d9f2b"
}
Errors
| Code | HTTP status | When | What to do |
|---|---|---|---|
validation_failed | 400 | The registration reference or format is invalid. | Fix the fields listed in details.issues and send the request again. |
resource_not_found | 404 | No registration with this ID or regime exists for the legal entity in this mode. | Check the ID and that your credentials are scoped to the right organization, entity, brand and mode. |
scope_required | 400 | The request names no legal entity (an organization key or agent without entity_id). | Call the operation with credentials or a target at its level: an organization, a legal entity, a brand or the platform (details.required_scope). |
permission_denied | 403 | You can't see this entity's registrations. | Ask an organization owner or admin for a role or scope that allows this action. |
It can also return these common errors: api_version_unsupported, authentication_required, api_key_invalid, dry_run_not_supported, rate_limited, internal_error.