Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,3 @@ Most recent visible comment summary when available. Use the dedicated comment en
Quran Reflect lesson or reflection not found or has been deleted

</div><div></div></TabItem></ApiTabs></div>

Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,3 @@ All comments for the Quran Reflect lesson or reflection returned with total coun
Quran Reflect lesson or reflection not found

</div><div></div></TabItem></ApiTabs></div>

Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,3 @@ Comments for the Quran Reflect lesson or reflection retrieved with pagination me
Quran Reflect lesson or reflection not found

</div><div></div></TabItem></ApiTabs></div>

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion docs/content_apis_versioned/posts-controller-feed.api.mdx

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,3 @@ Most recent visible comment summary when available. Use the dedicated comment en
Quran Reflect lesson or reflection not found or has been deleted

</div><div></div></TabItem></ApiTabs></div>

Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,3 @@ All comments for the Quran Reflect lesson or reflection returned with total coun
Quran Reflect lesson or reflection not found

</div><div></div></TabItem></ApiTabs></div>

Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,3 @@ Comments for the Quran Reflect lesson or reflection retrieved with pagination me
Quran Reflect lesson or reflection not found

</div><div></div></TabItem></ApiTabs></div>

Large diffs are not rendered by default.

7 changes: 4 additions & 3 deletions docs/tutorials/oidc/example-integration.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,7 @@ fly deploy

## Next Steps

- **[Full OAuth2 Guide](/docs/tutorials/oidc/getting-started-with-oauth2)** — Detailed walkthrough with AI prompts
- **[Mobile Apps](/docs/tutorials/oidc/mobile-apps)** — iOS, Android, React Native guides
- **[User APIs Reference](/docs/category/user-related-apis)** — All available endpoints
- **[Full OAuth2 Guide](/docs/tutorials/oidc/getting-started-with-oauth2)** - Detailed walkthrough with AI prompts
- **[SDK](/docs/sdk)** - Client SDK for mobile and web apps
- **[Mobile Apps](/docs/tutorials/oidc/mobile-apps)** - iOS, Android, React Native guides
- **[User APIs Reference](/docs/category/user-related-apis)** - All available endpoints
8 changes: 5 additions & 3 deletions docs/tutorials/sync/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,9 @@ When the user creates data offline, push mutations to the server using `POST /v1

### API References

- [GET /v1/sync (Get mutations)](/docs/user_related_apis_prelive/auth-get-v-1-sync)
- [POST /v1/sync (Sync local mutations)](/docs/user_related_apis_prelive/auth-post-v-1-sync)
- [GET /v1/sync (Get mutations)](/docs/user_related_apis_versioned/get-mutations)
- [POST /v1/sync (Sync local mutations)](/docs/user_related_apis_versioned/sync-local-mutations)
- [POST /v1/bookmarks (Add bookmark)](/docs/user_related_apis_versioned/auth-post-v-1-bookmarks) — for bookmark field requirements

## Using metadataOnly for Efficiency

Expand All @@ -139,7 +140,7 @@ This is significantly faster than a full sync (single DB query vs multiple joins

For the full request/response schema, see:

- [GET /v1/sync (Get mutations)](/docs/user_related_apis_prelive/auth-get-v-1-sync)
- [GET /v1/sync (Get mutations)](/docs/user_related_apis_versioned/get-mutations)

## Filtering & Pagination

Expand All @@ -154,6 +155,7 @@ When `metadataOnly=true`, the response includes only `lastMutationAt` (no pagina
## Important Notes

- **Mutation limits** — `POST /v1/sync` accepts a maximum of 100 mutations per request.
- **Direct endpoints** — Direct mutation endpoints (e.g. `POST /v1/bookmarks`) require `lastMutationAt` as a query param and return the `X-Mutation-At` header for updating `lastMutationAt`.

## Next Steps

Expand Down
14 changes: 13 additions & 1 deletion docs/tutorials/sync/handling-conflicts.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,19 @@ This quickly retrieves the current `lastMutationAt` without fetching all mutatio

See the full request/response schema in the API reference:

- [GET /v1/sync (Get mutations)](/docs/user_related_apis_prelive/auth-get-v-1-sync)
- [GET /v1/sync (Get mutations)](/docs/user_related_apis_versioned/get-mutations)

## Direct Mutation Endpoints

When using direct mutation endpoints (e.g., `POST /v1/bookmarks`), the same conflict rules apply:

1. Include `lastMutationAt` as a query parameter
2. Check for 409 responses
3. Update `lastMutationAt` from the `X-Mutation-At` response header

:::tip Always Capture the Header
Store the `X-Mutation-At` header value after every successful mutation. If you miss it, use `metadataOnly=true` to recover.
:::

## Best Practices

Expand Down
2 changes: 1 addition & 1 deletion docs/tutorials/sync/offline-first-patterns.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ Apply local changes immediately, then enqueue mutations for sync. When the serve

### Handling Sync Results

When the server returns mutation results, update local records with server IDs and timestamps, then dequeue the synced mutations and persist the returned `lastMutationAt`.
When the server returns mutation results, update local records with server IDs and timestamps, then dequeue the synced mutations and persist the new cursor. Use the returned `lastMutationAt` for `/v1/sync` responses, and read `X-Mutation-At` from direct mutation endpoints such as `POST /v1/bookmarks`.

## Error Handling & Retry

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,3 @@ Tracks daily activity/progress (by date + type). This powers streaks, goals, and
- [Add/update activity day](/docs/user_related_apis_versioned/1.0.0/auth-post-v-1-activity-days)
- [Get activity days](/docs/user_related_apis_versioned/1.0.0/auth-get-v-1-activity-days)
- [Estimate reading time](/docs/user_related_apis_versioned/1.0.0/auth-get-v-1-activity-days-estimate-reading-time)

Original file line number Diff line number Diff line change
Expand Up @@ -33,4 +33,3 @@ Tracks daily activity/progress (by date + type). This powers streaks, goals, and
- [Add/update activity day](/docs/user_related_apis_versioned/auth-post-v-1-activity-days)
- [Get activity days](/docs/user_related_apis_versioned/auth-get-v-1-activity-days)
- [Estimate reading time](/docs/user_related_apis_versioned/auth-get-v-1-activity-days-estimate-reading-time)

Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,3 @@ The server is currently unable to handle the request due to a temporary overload
The server did not receive a timely response from the upstream server.

</div><div><MimeTabs schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs><TabItem label={"Schema"} value={"Schema"}><details style={{}} data-collapsed={false} open={true}><summary style={{"textAlign":"left"}}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"message"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server"}}></SchemaItem><SchemaItem collapsible={false} name={"type"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"gateway_timeout"}}></SchemaItem><SchemaItem collapsible={false} name={"success"} required={false} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","example":false}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n \"message\": \"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server\",\n \"type\": \"gateway_timeout\",\n \"success\": false\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div>

1 change: 0 additions & 1 deletion docs/user_related_apis_prelive/add-collection.api.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,3 @@ The server is currently unable to handle the request due to a temporary overload
The server did not receive a timely response from the upstream server.

</div><div><MimeTabs schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs><TabItem label={"Schema"} value={"Schema"}><details style={{}} data-collapsed={false} open={true}><summary style={{"textAlign":"left"}}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"message"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server"}}></SchemaItem><SchemaItem collapsible={false} name={"type"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"gateway_timeout"}}></SchemaItem><SchemaItem collapsible={false} name={"success"} required={false} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","example":false}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n \"message\": \"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server\",\n \"type\": \"gateway_timeout\",\n \"success\": false\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div>

1 change: 0 additions & 1 deletion docs/user_related_apis_prelive/add-note.api.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -87,4 +87,3 @@ The server is currently unable to handle the request due to a temporary overload
The server did not receive a timely response from the upstream server.

</div><div><MimeTabs schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs><TabItem label={"Schema"} value={"Schema"}><details style={{}} data-collapsed={false} open={true}><summary style={{"textAlign":"left"}}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"message"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server"}}></SchemaItem><SchemaItem collapsible={false} name={"type"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"gateway_timeout"}}></SchemaItem><SchemaItem collapsible={false} name={"success"} required={false} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","example":false}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n \"message\": \"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server\",\n \"type\": \"gateway_timeout\",\n \"success\": false\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div>

1 change: 0 additions & 1 deletion docs/user_related_apis_prelive/add-user-bookmark.api.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,3 @@ The server is currently unable to handle the request due to a temporary overload
The server did not receive a timely response from the upstream server.

</div><div><MimeTabs schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs><TabItem label={"Schema"} value={"Schema"}><details style={{}} data-collapsed={false} open={true}><summary style={{"textAlign":"left"}}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"message"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server"}}></SchemaItem><SchemaItem collapsible={false} name={"type"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"gateway_timeout"}}></SchemaItem><SchemaItem collapsible={false} name={"success"} required={false} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","example":false}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n \"message\": \"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server\",\n \"type\": \"gateway_timeout\",\n \"success\": false\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div>

Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,3 @@ User not authenticated
Post or parent comment not found

</div><div></div></TabItem></ApiTabs></div>

Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,3 @@ User not authorized to delete this comment
Comment not found

</div><div></div></TabItem></ApiTabs></div>

Original file line number Diff line number Diff line change
Expand Up @@ -35,4 +35,3 @@ Comment replies with pagination
Parent comment not found

</div><div></div></TabItem></ApiTabs></div>

Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,3 @@ User not authenticated
Comment not found

</div><div></div></TabItem></ApiTabs></div>

1 change: 0 additions & 1 deletion docs/user_related_apis_prelive/delete-bookmark.api.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,3 @@ The server is currently unable to handle the request due to a temporary overload
The server did not receive a timely response from the upstream server.

</div><div><MimeTabs schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs><TabItem label={"Schema"} value={"Schema"}><details style={{}} data-collapsed={false} open={true}><summary style={{"textAlign":"left"}}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"message"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server"}}></SchemaItem><SchemaItem collapsible={false} name={"type"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"gateway_timeout"}}></SchemaItem><SchemaItem collapsible={false} name={"success"} required={false} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","example":false}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n \"message\": \"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server\",\n \"type\": \"gateway_timeout\",\n \"success\": false\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div>

Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,3 @@ The server is currently unable to handle the request due to a temporary overload
The server did not receive a timely response from the upstream server.

</div><div><MimeTabs schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs><TabItem label={"Schema"} value={"Schema"}><details style={{}} data-collapsed={false} open={true}><summary style={{"textAlign":"left"}}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"message"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server"}}></SchemaItem><SchemaItem collapsible={false} name={"type"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"gateway_timeout"}}></SchemaItem><SchemaItem collapsible={false} name={"success"} required={false} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","example":false}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n \"message\": \"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server\",\n \"type\": \"gateway_timeout\",\n \"success\": false\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div>

1 change: 0 additions & 1 deletion docs/user_related_apis_prelive/delete-collection.api.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,3 @@ The server is currently unable to handle the request due to a temporary overload
The server did not receive a timely response from the upstream server.

</div><div><MimeTabs schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs><TabItem label={"Schema"} value={"Schema"}><details style={{}} data-collapsed={false} open={true}><summary style={{"textAlign":"left"}}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"message"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server"}}></SchemaItem><SchemaItem collapsible={false} name={"type"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"gateway_timeout"}}></SchemaItem><SchemaItem collapsible={false} name={"success"} required={false} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","example":false}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n \"message\": \"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server\",\n \"type\": \"gateway_timeout\",\n \"success\": false\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div>

1 change: 0 additions & 1 deletion docs/user_related_apis_prelive/delete-note-by-id.api.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,3 @@ The server is currently unable to handle the request due to a temporary overload
The server did not receive a timely response from the upstream server.

</div><div><MimeTabs schemaType={"response"}><TabItem label={"application/json"} value={"application/json"}><SchemaTabs><TabItem label={"Schema"} value={"Schema"}><details style={{}} data-collapsed={false} open={true}><summary style={{"textAlign":"left"}}><strong>Schema</strong></summary><div style={{"textAlign":"left","marginLeft":"1rem"}}></div><ul style={{"marginLeft":"1rem"}}><SchemaItem collapsible={false} name={"message"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server"}}></SchemaItem><SchemaItem collapsible={false} name={"type"} required={false} schemaName={"string"} qualifierMessage={undefined} schema={{"type":"string","example":"gateway_timeout"}}></SchemaItem><SchemaItem collapsible={false} name={"success"} required={false} schemaName={"boolean"} qualifierMessage={undefined} schema={{"type":"boolean","example":false}}></SchemaItem></ul></details></TabItem><TabItem label={"Example (from schema)"} value={"Example (from schema)"}><ResponseSamples responseExample={"{\n \"message\": \"The server was acting as a gateway or proxy and did not receive a timely response from the upstream server\",\n \"type\": \"gateway_timeout\",\n \"success\": false\n}"} language={"json"}></ResponseSamples></TabItem></SchemaTabs></TabItem></MimeTabs></div></TabItem></ApiTabs></div>

Loading