Microsoft Dataverse product icon

HOSTED MOCK API REFERENCE

Dataverse Accounts API mock: OData success and service protection

Verify that your Dynamics connector accepts a bodyless 204 and reads OData-EntityId rather than attempting JSON parsing. Exercise PATCH requests and a selected ETag precondition failure separately from service-protection throttling.

Explore mock APIs

New registration is paused. Explore the public mock APIs; existing users can still sign in.

Existing user? Configure Microsoft Dataverse Accounts API · Workspace pricing and limits · Supported operations and behaviours

What to assert in your client

Prefer representations and concurrency errors are selected fixtures. The receiver does not persist Accounts, evaluate an If-Match value or negotiate Prefer automatically. Retry-After and OData header values are example values; they do not describe a live tenant.

Request and selected response examples

Create Account: Account row created

Documented Synthetic illustrative example from the catalogue, not a live capture. Run only after installing your own receiver. Replace <your-receiver-token> locally; no request is sent from this page.

HTTP 204 · No response body

curl / Bash request

printf '%s' '{"name":"Example Test Co"}' | \
curl -i -X POST \
  'https://nottherealapi.com/r/<your-receiver-token>/api/data/v9.2/accounts' \
  -H 'Authorization: Bearer synthetic-microsoft-dataverse-token' \
  -H 'Accept: application/json' \
  -H 'OData-Version: 4.0' \
  -H 'OData-MaxVersion: 4.0' \
  -H 'Content-Type: application/json' \
  --data-binary @-

PowerShell request

$body = '{"name":"Example Test Co"}'
Invoke-WebRequest `
    -UseBasicParsing `
    -Uri 'https://nottherealapi.com/r/<your-receiver-token>/api/data/v9.2/accounts' `
    -Method POST `
    -Headers @{
    Authorization = 'Bearer synthetic-microsoft-dataverse-token'
    Accept = 'application/json'
    'OData-Version' = '4.0'
    'OData-MaxVersion' = '4.0'
    } `
    -ContentType 'application/json' `
    -Body ([Text.Encoding]::UTF8.GetBytes($body))

Selected synthetic response

HTTP 204
odata-version: 4.0
odata-entityid: https://org.example.test/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)

Update Account: Service protection throttling

Documented Synthetic illustrative example from the catalogue, not a live capture. Run only after installing your own receiver. Replace <your-receiver-token> locally; no request is sent from this page.

HTTP 429 · 0x80072321 · Retry-After: 30

curl / Bash request

printf '%s' '{"name":"Updated Example Co"}' | \
curl -i -X PATCH \
  'https://nottherealapi.com/r/<your-receiver-token>/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)' \
  -H 'Authorization: Bearer synthetic-microsoft-dataverse-token' \
  -H 'Accept: application/json' \
  -H 'OData-Version: 4.0' \
  -H 'OData-MaxVersion: 4.0' \
  -H 'If-Match: *' \
  -H 'Content-Type: application/json' \
  --data-binary @-

PowerShell request

$body = '{"name":"Updated Example Co"}'
Invoke-WebRequest `
    -UseBasicParsing `
    -Uri 'https://nottherealapi.com/r/<your-receiver-token>/api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)' `
    -Method PATCH `
    -Headers @{
    Authorization = 'Bearer synthetic-microsoft-dataverse-token'
    Accept = 'application/json'
    'OData-Version' = '4.0'
    'OData-MaxVersion' = '4.0'
    'If-Match' = '*'
    } `
    -ContentType 'application/json' `
    -Body ([Text.Encoding]::UTF8.GetBytes($body))

Selected synthetic response

HTTP 429
content-type: application/json
retry-after: 30
x-ms-ratelimit-burst-remaining-xrm-requests: 0
x-ms-ratelimit-time-remaining-xrm-requests: 0
odata-version: 4.0

{
  "error": {
    "code": "0x80072321",
    "message": "Service protection API limit exceeded. Decrease request rate and retry later."
  }
}

CRM Dataverse Web API · v9.2

What can I test with this?

Test integrations that create and update Dataverse account rows without a live Dynamics 365 environment. Reproduce bodyless success responses, OData headers, table permissions and invalid properties. Exercise missing rows, concurrent update conflicts and service-protection throttling in your client.

Prefer representations and ETag failures are selected responses. The receiver does not persist accounts, evaluate ETags or negotiate Prefer automatically. Error messages and service-protection header values are examples.

Useful for

  • Account synchronisation
  • Dynamics 365 connectors
  • OData response handling
  • Conditional updates
  • Service-protection backoff

Supported operations

2 operations

Create Account

POST /api/data/v9.2/accounts

Creates a Dataverse account row. The success response has HTTP 204 with no body and an OData-EntityId header identifying the example row.

Request content type: application/json

Request example

{
  "name": "Example Test Co"
}

Available behaviours (7)

  • Account row created
    Documented

    Create returns no body and the new entity URL in OData-EntityId.

    HTTP 204 · No response body

    Verify that your client handles a successful response.

  • Created row representation
    Documented

    Select this response and send Prefer: return=representation. No row is persisted.

    HTTP 201

    Verify that your client handles a successful response.

  • Expired bearer token
    Representative

    Selected expired-token response; the simulator does not validate an actual Microsoft token.

    HTTP 401 · 0x8005F101

    Test credential refresh and authentication recovery.

  • Insufficient table privilege
    Representative

    Authenticated principal lacks permission for this table operation.

    HTTP 403 · 0x80040220

    Check how your integration reports missing access or permissions.

  • Invalid property value
    Representative

    Dataverse rejects an invalid property name or value.

    HTTP 400 · 0x80048d19

    Test field mapping and useful validation feedback.

  • Service protection throttling
    Documented

    429 includes Retry-After; wait before sending more requests.

    HTTP 429 · 0x80072321 · Retry-After: 30

    Verify bounded backoff and retry handling.

    • Wait for Retry-After before retrying; avoid increasing concurrency.
  • Dataverse temporarily unavailable
    Representative

    Representative upstream unavailability.

    HTTP 503 ·

    Test recovery and error reporting during simulated service failures.

Update Account

PATCH /api/data/v9.2/accounts(00000000-0000-0000-0000-000000000001)

Updates fields on the example account row using PATCH. Exercise bodyless success, missing rows and ETag precondition conflicts.

Request content type: application/json

Request example

{
  "name": "Updated Example Co"
}

Available behaviours (9)

  • Account row updated
    Representative

    PATCH a representative account row.

    HTTP 204 · No response body

    Verify that your client handles a successful response.

  • Updated row representation
    Documented

    Select this response and send Prefer: return=representation. ETag is fixed; no concurrency state is maintained.

    HTTP 200

    Verify that your client handles a successful response.

  • Expired bearer token
    Representative

    Selected expired-token response; the simulator does not validate an actual Microsoft token.

    HTTP 401 · 0x8005F101

    Test credential refresh and authentication recovery.

  • Insufficient table privilege
    Representative

    Authenticated principal lacks permission for this table operation.

    HTTP 403 · 0x80040220

    Check how your integration reports missing access or permissions.

  • Invalid property value
    Representative

    Dataverse rejects an invalid property name or value.

    HTTP 400 · 0x80048d19

    Test field mapping and useful validation feedback.

  • Row not found
    Representative

    The requested entity ID is not present.

    HTTP 404 · 0x80040217

    Check how your client handles a missing record or resource.

  • Concurrent update conflict
    Representative

    A conditional write's ETag precondition no longer matches.

    HTTP 412 ·

    Exercise conflict handling before repeating a write.

  • Service protection throttling
    Documented

    429 includes Retry-After; wait before sending more requests.

    HTTP 429 · 0x80072321 · Retry-After: 30

    Verify bounded backoff and retry handling.

    • Wait for Retry-After before retrying; avoid increasing concurrency.
  • Dataverse temporarily unavailable
    Representative

    Representative upstream unavailability.

    HTTP 503 ·

    Test recovery and error reporting during simulated service failures.

What NotTheRealAPI controls

NotTheRealAPI does not call Microsoft Dynamics 365 / Dataverse. No real provider account is required. Your integration sends the request to a NotTheRealAPI receiver and receives the selected provider-shaped response.

The receiver stays under NotTheRealAPI at /r/<receiver-token> followed by the operation path. Selecting a behaviour controls the simulated response on that same receiver.

Scope and safe testing

This independent simulation has no live Microsoft Dynamics 365 / Dataverse connection or endorsement and does not claim complete API compatibility. No real provider credentials are required. Outcomes remain selected until you change them; these provider fixtures do not persist business records or transition autonomously.

Use synthetic data only. Receiver URLs are secrets. Captured headers and bounded bodies are visible to authorised workspace members without automatic redaction; see privacy and retention.

NotTheRealAPI independently simulates third-party APIs for testing. All provider names and logos are the property of their respective owners. NotTheRealAPI is not affiliated with, sponsored by or endorsed by those providers, and these modules do not connect to their live services. Twilio and all related logos are trademarks of Twilio Inc. or its affiliates.

Browse the full mock API catalogue · HubSpot Contacts API mock: property mapping and retry handling · Compare workspace limits and pricing · Sign in

Dataverse API Mock: Test OData Errors & Throttling | NotTheRealAPI